Начальный курс программирования на языке Форт


ПОСТРОЕНИЕ ПРОГРАММЫ ВВОДА ЧИСЕЛ С ПОМОЩЬЮ СЛОВА KEY - часть 2


Цикл начинается со слова KEY. Если введена правильная цифра, вы обрабатываете ее с помощью слова ПОЛУЧЕНИЕ (посылаете в буфер и увеличиваете соответствующий указатель). В случае «ЗАБОЯ» вы уничтожаете последний символ посредством слова НАЗАД (заполняете пробелом позицию последнего введенного символа и уменьшаете значение указателя). Используя таким образом слово KEY в цикле, можно создавать любые интерпретаторы клавиатуры или редакторы. Последнее определение, ЦИФРЫ, демонстрирует использование слова EXPECT#. Итак, в листинге не осталось больше ничего, что было бы вам не известно, поэтому никаких причин для того, чтобы отложить рассмотрение этой программы, у вас нет. (Более подробную информацию вы найдете в [1].)Block # 350 0 \ Ввод чисел часть 1 1 2 : НАЗАД 8 EMIT ; 3 : ЗБ? ( с -- t=клавиша-забоя) 8 = ; \ в некот.сист. 12 4 : ВК? ( с -- t=клавиша-RETURN) 13 = ; \ в некот.сист. 0 5 : #? ( с -- t=правильная-цифра) ASCII 0 ASCII 9 1+ WITHIN ; 6 7 8 9 10 11 12 13 14 15

Block # 351 0 \ Ввод чисел часть 2 1 : ПОЛУЧЕНИЕ ( 1-й-адр посл-а+1 текущ-адр с - 1-й-адр 2 посл текущ') 3 >R 2DUP > IF R@ DUP EMIT OVER C! 1+ THEN R> DROP ; 4 : НАОБОРОТ ( 1-й-адр посл-а+1 текущ-адр с -- 1-й-адр поcл 5 текущ' ) 6 DROP SWAP >R 2DUP < IF НАЗАД SPACE НАЗАД 1- DUP 1 BLANK 7 THEN R> SWAP ; 8 : EXPECT# ( а макс-длина -- факт.-длина) 9 OVER + OVER BEGIN KEY DUP ВК? NOT WHILE 10 DUP #? IF ПОЛУЧЕНИЕ ELSE 11 DUP ЗБ? IF НАОБОРОТ ELSE DROP 12 THEN THEN REPEAT ROT 2DROP SWAP - ; 13 14 : ЦИФРЫ ( #цифр -- d) 15 PAD SWAP 2DUP 1+ BLANK EXPECT# DROP PAD 1- NUMBER ;




Начало  Назад  Вперед