QUIT
QUIT (уйти, покидать) — стандартное слово Каллисто.
QUIT ( −− ) Передать управление на пульт. Ждёт команд молча, без приглашения.
Очищает стек возвратов, устанавливает состояние исполнения и возвращает управление на пульт Каллисто (BLK=0). Не выдаётся никаких сообщений.
«В сущности, пока Форт работает, он исполняет команду QUIT. QUIT — это резидентный монитор системы Форт.» © Юрий Семёнов (стр. 56)
Ввод слова QUIT[править]
В режиме ЛАТ последовательно нажмите четыре белые клавиши + 3 7 2
QUIT в стандарте ANS Forth[править]
6.1.2050 QUIT CORE ( -- ) ( R: i*x -- ) Освобождает стек возвратов, сохраняет нуль в SOURCE-ID, если он присутствует, делает пользовательское устройство ввода входным источником, и вводит состояние интерпретации. Не отображает сообщение. Повторяет следующее: - Принимает строку из входного источника во входной буфер, обнуляет >IN, и интерпретирует. - Отображает определенную реализацией системную подсказку, если в состоянии интерпретации вся обработка была закончена, и нет неопределенной ситуации. См.: 3.4 Интерпретатор текста Forth.
История[править]
Одна из отличительных черт Форта появилась в 1966 году, когда Чак Мур, будучи гуру MCP на 5500, работал в Realtime Systems, Inc (RSI). Это правило, что Форт подтверждает каждую строку ввода добавлением OK по завершению интерпретации. На RSI OK был на другой строчке, например:
56 INSERT ALGOL IS VERY ADAPTABLE OK
В опубликованной реализации Баранова-Ноздрунова слово QUIT называется ФОРТ-СИСТЕМА
В редакторе EDT для Форта тоже есть слово QUIT — хотя его имя идентично слову QUIT из базового словаря Форта, их функции абсолютно различны.
QUIT в предыдущем стандарте Forth-83 (англ.)[править]
QUIT -- 79 Clears the return stack, sets interpret state, accepts new input from the current input device, and begins text interpretation. No message is displayed.
QUIT в стандарте Forth-79 (англ.)[править]
QUIT 211 Clear the return stack, setting execution mode, and return control to the terminal. No message is given.
QUIT в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]
QUIT Clear the return stack, stop compilation, and return control to the operators terminal. No message is given.
Реализация[править]
3427 ;#QUIT 3428 ; QUIT ( −− ) Передать управление на пульт. Ждать команд молча, без приглашения. 3429 ; Очистить стек возвратов, устанавить состояние исполнения и возвратить управление на пульт Каллисто. 3430 ; Не выдаётся никаких сообщений. Резидентный монитор среды Каллисто. 3431 LQUIT: .DB 4 3432 .TEXT "QUIT" 3433 .DW LPAREN 3434 QUIT: .DW CALL 3435 RQUIT: .DW BLK,ZSTORE, LBRAC 3436 QUI: .DW RPSTO, CR, QUERY, INTER, STATE,UAT 3437 .DW ZEQU, ZBRAN,QUI, PDOTQ 3438 .DB 3 3439 .TEXT " ok" ; Это приглашение не будет видно при 2 FONT! 3440 .DW BRAN,QUI
Реализация из SP-Forth 4.20:
: MAIN1 ( -- ) BEGIN REFILL WHILE INTERPRET OK REPEAT BYE ; : QUIT ( -- ) ( R: i*x ) \ CORE 94 \ Сбросить стек возвратов, записать ноль в SOURCE-ID. \ Установить стандартный входной поток и состояние интерпретации. \ Не выводить сообщений. Повторять следующее: \ - Принять строку из входного потока во входной буфер, обнулить >IN \ и интепретировать. \ - Вывести зависящее от реализации системное приглашение, если \ система находится в состоянии интерпретации, все процессы завершены, \ и нет неоднозначных ситуаций. BEGIN CONSOLE-HANDLES 0 TO SOURCE-ID 0 TO SOURCE-ID-XT [COMPILE] [ ['] MAIN1 CATCH ['] ERROR CATCH DROP ( R0 @ RP! \ стек не сбрасываем, т.к. это за нас делает CATCH :) S0 @ SP! \ стек сбрасываем, т.к. OPTIONS может оставить значения :( AGAIN ;
Советская реализация[править]
Юрий Семёнов приводит следующее определение слова QUIT через QUERY и INTERPRET (стр. 56):
: QUIT 0 BLK ! ( переход в пультовый режим) [ ( установка режима исполнения) BEGIN ( начало бесконечного цикла ожидания) !RP ( установка указателя возвратного стека в начальное состояние) ↵ QUERY ( приглашение ввести команду с терминала) INTERPRET ( интерпретация и исполнение команды) STATE @ 0= IF ." OK" ( сообщение о благополучном выполнении в режиме "исполнения") THEN 0 ( засылка 0 для поддержания цикла) UNTIL ;
Оно же, с использованием слова 0! и цикла BEGIN…AGAIN:
: QUIT BLK 0! ( переход в пультовый режим) [ ( установка режима исполнения) BEGIN ( начало бесконечного цикла ожидания) !RP ( установка указателя возвратного стека в начальное состояние) ↵ QUERY ( приглашение ввести команду с терминала) INTERPRET ( интерпретация и исполнение команды) STATE @ 0= IF ." OK" ( сообщение о благополучном выполнении в режиме "исполнения") THEN AGAIN ;
У Баранова-Ноздрунова определение слова QUIT выглядит так (стр. 81):
: QUIT ( ---> ) BEGIN ↵ ." >" ( Приглашение к вводу) TIB 80 EXPECT ( Ввести текст с терминала) SPAN @ #TIB ! ( Установить его длину) 0 TIB #TIB @ + C! ( Установить ограничитель) 0 >IN ! 0 BLK ! ( Установить входной поток) INTERPRET ( Интерпретировать введённый текст) STATE @ 0= IF ." OK" THEN ( Подтверждение) AGAIN ;
В ядре ФОРТ-ЕС слово QUIT называлось ФОРТ-СИСТЕМА
Вот его описание и определение:
ФОРТ-СИСТЕМА * -> ТЕКСТОВЫЙ ИНТЕРПРЕТАТОР ФОРТ-СИСТЕМЫ 40 Экран номер 40 ( 31.03.84 EXPECT OUERY INTERPRET ФОРТ-СИСТЕМА X ) : ФОРТ-СИСТЕМА ( ->) BEGIN QUERY INTERPRET AGAIN ;
Определение слова QUIT в FORTH ИТЭФ:
HEAD 204Q,'QUI',324Q,QUIT,$COL ; QUIT DW ZERO,BLK,STORE,LBRAC QUI: DW RPSTO,CR,QUERY,INTER,STATE,AT DW ZEQU,ZBRAN,QUI-$,PDOTQ DB 3,' OK' DW BRAN,QUI-$
Ссылки[править]
- Исходный текст слова QUIT в Каллисто Классик 1.0
- См. слова ABORT, WARM, COLD и BYE
- Слово QUIT в стандарте ANS Forth (англ.)
- Слово QUIT в черновике Forth 200x (англ.)
- ФУНКЦИОНИРОВАНИЕ ФОРТ-СИСТЕМЫ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- Throw It For a Loop в книге Leo Brodie Starting Forth (англ.)
- Under the Hood в книге Leo Brodie Starting Forth (англ.)
- I/O and You в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |