MESSAGE

Материал из ПМК вики
Перейти к навигации Перейти к поиску

MESSAGE — архаичное слово Каллисто. Вывести на индикатор сообщение об ошибке.

MESSAGE        ( c −− )                             Сохранить >IN в R# и вывести сообщение номер c.

Ввод слова MESSAGE[править]

В режиме ЛАТ последовательно нажмите клавиши  ÷   ИП   1   1   ШГ←   БП   ИП 

Номера сообщений Каллисто[править]

 Сообщение             Значения                        Сообщение при WARNING=1         Кто генерирует ошибку
                                                       ( нет в Каллисто 1.0)

 MSG# 0        Слово не узнано.                                                        [COMPILE] TO 'N '
               Число не узнано.
               Нет соответствия системе счисления
 MSG# 1        Попытка извлечь нечто из пустого стека  EMPTY STACK                     ?STACK
 MSG# 2        Переполнение стека или словаря          STACK OR DIRECTORY OVERFLOW     ?STACK
 MSG# 4        Повторное описание слова (не является   IT ISN'T UNIQUE
               фатальной ошибкой)
 MSG# 17       Используется только при компиляции      COMPILATION ONLY                ?COMP
 MSG# 18       Используется только при исполнении      EXECUTION ONLY                  ?EXEC
 MSG# 19       IF и THEN или другие операторы          CONDITIONALS AREN'T PAIRED      ?PAIRS
               не имеют пары
 MSG# 20       Определение не завершено                DEFINITION ISN'T FINISHED       ?CSP
 MSG# 21       Неверный аргумент слова FORGET          PROTECTED DIRECTORY             FORGET ( нет в Каллисто 1.0)
               Слово в защищённой области словаря
 MSG# 22       Должно использоваться только            USED AT LOADING ONLY            ?LOADING
               при загрузке
 MSG# 23       Строка экрана вне диапазона 0..47
 MSG# 24       ???                                     ???                             FORGET ( нет в Каллисто 1.0)
 MSG# 26       Деление на 0                            0 DIVISION                      ( нет в Каллисто)

 (только в Каллисто, ошибки дисковых операций)
 MSG# 39       Сохранение от другой версии                                             LOAD" ( не может быть игнорировано)
 MSG# 40       Файл не найден                                                          LOAD"
 MSG# 41       Нет диска
 MSG# 42       Диск не форматирован
 MSG# 43       Нет места на диске
 MSG# 44       Нет места в каталоге
 MSG# 45       Ошибка имени файла/каталога
 MSG# 46       Невозможно удалить/создать/загрузить файл/каталог
 MSG# 47       Файл/каталог не выбран
 MSG# 48       Нет разрешения дисковой операции

История[править]

Централизация сообщений об ошибках в MESSAGE — ранняя форма системы обработки ошибок в Форте. В отличии от вошедшего в стандарт слова ABORT" каллистянский MESSAGE позволяет экономить драгоценное место в памяти программ, сведя все сообщения об ошибках к единой справочной таблице, не расходующей эту память.

В fig-Форте была переменная WARNING, с помощью которой слово MESSAGE можно было попросить считать с диска текстовое сообщение об ошибке. Этот дружелюбный, но тоже занимающий дефицитное место в памяти программ, механизм пришлось удалить из Каллисто 1.0, так как наличие всего одного буфера в МК-161 делает загрузку экрана с текстом ошибок дополнительным источником нестабильности в критической ситуации.

MESSAGE в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]

MESSAGE       n --
       Print on the selected output device the text of line n relative to
       screen 4 of drive O. n may be positive or negative. MESSAGE may be
       used to print incidental text such as report headers. If WARNING is
       zero, the message will simply be printed as a number (disc
       unavailable).

Реализация[править]

3529 ;#MESSAGE
3530 ; MESSAGE          ( c −− )                             Сохранить >IN в R# и вывести сообщение номер c.
3531 ; В Форте ИТЭФ сообщения при WARNING=1 хранились в блоке №4.
3532 ;
3533 ; Сообщение             Значения                        Возможный текст         Кто генерирует ошибку
3534 ;
3535 ; MSG# 0        Слово не узнано.                                                        [COMPILE] TO 'N '
3536 ;               Число не узнано.
3537 ;               Нет соответствия системе счисления
3538 ; MSG# 1        Попытка извлечь нечто из пустого стека  EMPTY STACK                     ?STACK
3539 ; MSG# 2        Переполнение стека или словаря          STACK OR DIRECTORY OVERFLOW     ?STACK
3540 ; MSG# 4        Повторное описание слова (не является   IT ISN'T UNIQUE
3541 ;               фатальной ошибкой)
3542 ; MSG# 17       Используется только при компиляции      COMPILATION ONLY                ?COMP
3543 ; MSG# 18       Используется только при исполнении      EXECUTION ONLY                  ?EXEC
3544 ; MSG# 19       IF и THEN или другие операторы          CONDITIONALS AREN'T PAIRED      ?PAIRS
3545 ;               не имеют пары
3546 ; MSG# 20       Определение не завершено                DEFINITION ISN'T FINISHED       ?CSP
3547 ; MSG# 21       Неверный аргумент слова FORGET          PROTECTED DIRECTORY             FORGET ( нет в Каллисто 1.0)
3548 ;               Слово в защищённой области словаря
3549 ; MSG# 22       Должно использоваться только            USED AT LOADING ONLY            ?LOADING
3550 ;               при загрузке
3551 ; MSG# 23       Строка экрана вне диапазона 0..47
3552 ; MSG# 24       ???                                     ???                             FORGET ( нет в Каллисто 1.0)
3553 ; MSG# 26       Деление на 0                            0 DIVISION                      ( нет в Каллисто)
3554 ; (только в Каллисто, ошибки дисковых операций)
3555 ; MSG# 39       Сохранение от другой версии                                             LOAD" ( не может быть игнорировано)
3556 ; MSG# 40       Файл не найден                                                          LOAD"
3557 ; MSG# 41       Нет диска
3558 ; MSG# 42       Диск не форматирован
3559 ; MSG# 43       Нет места на диске
3560 ; MSG# 44       Нет места в каталоге
3561 ; MSG# 45       Ошибка имени файла/каталога
3562 ; MSG# 46       Невозможно удалить/создать/загрузить файл/каталог
3563 ; MSG# 47       Файл/каталог не выбран
3564 ; MSG# 48       Нет разрешения дисковой операции
3565 ;
3566 LMESS:          .DB     7
3567                 .TEXT   "MESSAGE"
3568                 .DW     LDLINE
3569 MESS:           .DW CALL, IN,UAT, RNUM,STORE, PDOTQ
3570                 .DB 5
3571                 .TEXT "MSG #"
3572                 .DW BRAN,RDOT

Советская реализация[править]

Юрий Семёнов приводит следующее определение слова MESSAGE (стр. 156):

 : MESSAGE    >IN @ R# ! ( сохранение указателя входного буфера в
                            R#)
              WARNING @ IF                    ( если WARNING $0)
              ?DUP IF   ( если код диагностического сообщения не
                          равен 0)
              4 OFFSET @ -             ( выбор экрана с текстами
                                      диагностических сообщений)
              (LINE) TYPE                    ( печать сообщения)
              ELSE ." MSG # 0" THEN   ( если код ошибки равен 0)
              ELSE ." MSG # " I. THEN ; ( печать сообщения, если
                                          WARNING =0)

Определение слова MESSAGE в FORTH ИТЭФ:

             HEAD    207Q,'MESSAG',305Q,MESS,$COL         ; MESSAGE
             DW  IN,AT,RNUM,STORE,WARN,AT,ZBRAN,MS1-$
             DW  DDUP,ZBRAN,MES-$,LIT,4,OFSET,AT,SUB,DLINE
   MES:      DW  SEMI
   MS1:      DW  PDOTQ

             DB  6,'MSG # '
             DW $DOT,SEMI

В ядре ФОРТ-ЕС другая система обработки ошибок, например было слово BADWORD

Ниже его описание и определение через слово ".

BADWORD * А-> СООБЩИТЬ О НЕОПОЗНАННОМ СЛОВЕ                     29

                     Экран номер 28
( 31.03.86 LIT" COUNT ," " ". (."/ ." C" ( ,( QUIT ABORT )

: ".  ( T-> )   COUNT TYPE ;

                     Экран номер 29
( 31.03.86 ПРОВЕРКИ И СИГНАЛИЗАЦИИ ОБ ОШИБКАХ )

: BADWORD ( T->) CR  ".  ."   ?" ABORT ;

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


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


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