После этого идет следующая клавиша
После этого идет следующая клавиша со своей парой адресов, и так далее. - 259 -
На третьем блоке слово 'ФУНКЦИИ берет значение клавиши, ищет его в таблице ФУНКЦИИ, а затем возвращает адрес ячейки, отвечающей найденному коду. (Мы предустанавливаем значение переменной СОВПАЛ на точку последней строки из таблицы - на те функции, которые надо выполнить, когда нажата `любая` клавиша.) Слово ДЕЙСТВИЕ вызывает 'ФУКНЦИИ, затем добавляет содержимое переменной РЕЖИМ#. Поскольку эта переменная содержит либо 2, либо 4, добавляя такое смещение, мы указываем внутри таблицы на программу, которую надо исполнить. Простое
@ EXECUTE
ее выполнит (или слово @EXECUTE или PERFORM, если оно есть в Вашей системе). В Фиг-Форте надо изменить определение слова ЕСТЬ так:
: ЕСТЬ [COMPILE] ' CFA , ;
Рис.8-5. Реализация Крошечного Редактора.
Блок # 30 0 \ Крошечный редактор 1 2 CONSTANT НОРМАЛЬНЫЙ \ смещение в ФУНКЦИях 2 4 CONSTANT ВСТАВОЧНЫЙ \ " 3 6 CONSTANT /КЛ \ байтов в таблице на каждую клавишу 4 VARIABLE РЕЖИМ# \ текущее смещение в таблице 5 НОРМАЛЬНЫЙ РЕЖИМ# ! 6 : ВЫКЛ-ВСТАВКУ НОРМАЛЬНЫЙ РЕЖИМ# ! ; 7 : ВКЛ-ВСТАВКУ ВСТАВОЧНЫЙ РЕЖИМ# ! ; 8 9 VARIABLE ВЫХОД? \ t=время выходить из цикла 10 : ВЫХОД TRUE ВЫХОД? ! ; 11 12 13 14 15 - 260 -
Блок # 31 0 \ Крошечный редактор таблица функций 1 : ЕСТЬ ' , ; \ функция ( -- ) ( для стандарта '83) 2 CREATE ФУНКЦИИ 3 \ клавиши нормальный втставочный 4 4 , ( Ctrl-D) ЕСТЬ СТЕРЕТЬ ЕСТЬ ВЫКЛ-ВСТАВКУ 5 9 , ( Ctrl-I) ЕСТЬ ВКЛ-ВСТАВКУ ЕСТЬ ВЫКЛ-ВСТАВКУ 6 8 , ( забой ) ЕСТЬ НАЗАД ЕСТЬ ВСТАВИТЬ< 7 60 , ( стрелка влево) ЕСТЬ НАЗАД ЕСТЬ ВЫКЛ-ВСТАВКУ 8 62 , ( стрелка вправо) ЕСТЬ ВПЕРЕД ЕСТЬ ВЫКЛ-ВСТАВКУ 9 27 , ( выход) ЕСТЬ ВЫХОД ЕСТЬ ВЫКЛ-ВСТАВКУ 10 0 , ( нет совпадения) ЕСТЬ ЗАМЕСТИТЬ ЕСТЬ ВСТАВИТЬ 11 HERE /КЛ - CONSTANT 'НЕ \ адрес клавиши несовпадения 12 13 14 15
Блок # 32 0 \ Крошечный редактор продолж. 1 VARIABLE СОВПАЛ 2 : 'ФУНКЦИИ ( клавиша -- адр-совпадения ) 3 'НЕ СОВПАЛ ! 'НЕ ФУНКЦИИ 4 DO DUP I @ = IF I СОВПАЛ ! LEAVE THEN /КЛ 5 +LOOP DROP СОВПАЛ @ ; 6 : ДЕЙСТВИЕ ( клавиша ) 'ФУНКЦИИ РЕЖИМ# @ + @ EXECUTE ; 7 : ПУСК FALSE ВЫХОД? ! 8 BEGIN KEY ДЕЙСТВИЕ ВЫХОД? @ UNTIL ; 9 10 11 12 13 14 15
Содержание Назад Вперед