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! и цикла BEGINAGAIN:

 : 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-$

Ссылки[править]


  Nopictures-icon.png У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их.


  Stub-icon-48px.png Это заготовка статьи. Вы можете помочь проекту, дополнив её.