ACCEPT: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Строка 152: Строка 152:
* См. также слово ACCEPT в главе [http://www.forth.com/starting-forth/sf10/sf10.html I/O and You] книги [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
* См. также слово ACCEPT в главе [http://www.forth.com/starting-forth/sf10/sf10.html I/O and You] книги [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0695 ACCEPT] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.0695 комментарий к нему] в стандарте ANS Forth ''(англ.)''
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0695 ACCEPT] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.0695 комментарий к нему] в стандарте ANS Forth ''(англ.)''
* Слово [http://www.forth200x.org/documents/html3/core/ACCEPT.html ACCEPT] и [http://www.forth200x.org/documents/html3/rationale.html#rat:core:ACCEPT комментарий к нему] в черновике Forth 200x ''(англ.)''
* Слово [http://forth-standard.org/standard/core/ACCEPT ACCEPT] и [http://forth-standard.org/standard/rationale#rat:core:ACCEPT комментарий к нему] в черновике Forth 200x ''(англ.)''





Версия от 07:47, 29 марта 2016

ACCEPT (принять) — стандартное слово Каллисто.

Ввод слова ACCEPT

В режиме ЛАТ последовательно нажмите клавиши  ШГ←   С/П   С/П   ИП   6   2 

ACCEPT в стандарте ANS Forth

6.1.0695   ACCEPT                                                          CORE
           ( c-addr +n1 -- +n2 )
           Получает строку с максимумом +n1 символов. Неопределенная ситуация 
           существует, если +n1 нулевое или больше чем 32767. Отображает 
           полученные графические символы. Программа, которая зависит от 
           присутствия или отсутствия неграфических символов в строке имеет 
           зависимость от окружающей среды. Функции редактирования, если 
           таковые вообще имеются, которые система исполняет при создании 
           строки - определенное реализацией.
           Ввод заканчивается, когда получен определенный реализацией признак 
           конца строки. Когда ввод заканчивается, ничего не добавляется в 
           конец строки, и отображение обеспечивается определенным реализацией 
           способом.
           +n2 - длина строки, сохраненной в c-addr.
A.6.1.0695   ACCEPT
Предыдущие стандарты определяли, что накопление входной строки заканчивается, 
когда получен "возврат" или когда было получено +n1 символов. Завершение, когда 
было получено +n1 символов, трудно, дорого, или невозможно осуществить в 
некоторых системных средах. Следовательно, множество существующих реализаций не 
подчиняется с этим требованиям.
Так как редактирование строки и функции накопления часто реализуются системными 
компонентами вне контроля реализацией Forth, этот Стандарт не налагает никакое 
такое требование. Стандартная Программа может только предполагать, что она 
может получать ввод строки от ACCEPT или EXPECT. Детальная последовательность 
пользовательских действий, необходимых для подготовки и передачи этой строки, 
вне контекста этого Стандарта.
Спецификация ненулевого, положительного целочисленного счетчика (+n1) для 
ACCEPT позволяет некоторым разработчикам продолжать их практику использования 
нуля или отрицательной величины как флага для вызова специального поведения. 
Поскольку такое поведение вне Стандарта, Стандартные программы не могут 
зависеть от этого, но Технический Комитет не желает излишне препятствовать 
этому. Так как фактические значения - почти всегда маленькие целые числа, 
никакие функциональные возможности не повреждаются этим ограничением.
ACCEPT и EXPECT исполняют схожие функции. ACCEPT рекомендуется для новых 
программ, и будущее использование EXPECT не одобряется.
Рекомендуется, чтобы все неграфические символы были зарезервированы для функций 
редактирования или управления и не были сохранены во входной строке.
Обычно, когда пользователь готовит входную строку, которая будет передана 
программе, система позволяет пользователю редактировать эту строку и исправлять 
ошибки перед передачей заключительной версии строки. Функция редактирования 
предоставлена иногда непосредственно Forth системой, и иногда внешним системным 
программным обеспечением или аппаратными средствами. Таким образом, управляющие 
символы и функции не могут быть доступны на всех системах. В обычном случае 
конец процесса редактирования и заключительной передачи строки обозначается 
пользователем нажатием клавиши "Return" или "Enter".
Как в предыдущих стандартах, EXPECT возвращает входную строку немедленно после 
ввода требуемого числа символов, а также когда получен признак конца строки. 
Широко рассматриваемое поведение "автоматического завершения, после того как 
было введено определенное количество символов" нежелательно, потому что 
пользователь "потеряет контроль" процесса входного редактирования в 
потенциально неизвестное время (пользователь не обязательно знает, сколько 
символов требовалось от, EXPECT). Таким образом, EXPECT и SPAN были сделаны 
устаревшими и существуют в Стандарте только как уступка существующим 
реализациям. Если EXPECT существует в Стандартной Системе, оно должно иметь 
поведение "автоматического завершения".
ACCEPT не имеет поведения "автоматического завершения" EXPECT. Однако, потому 
что внешние системные аппаратные средства и программное обеспечение могут 
исполнять функцию ACCEPT, когда получен признак конца строки действие курсора, 
и, следовательно, отображение - определенное реализацией. Рекомендуется, чтобы 
курсор остался немедленно после введенного текста после получения признака 
конца строки.

История

Слово EXPECT появилось в Форте в 1965 году, когда Чак Мур подрабатывал наёмным программистом в городе Нью-Йорк. Тогда появились миникомпьютеры, а с ними и терминалы. Интерпретатор был идеален для ввода с телетайпа.

В то время EXPECT был циклом, вызывающим KEY для чтения нажатий на клавиши.

В 1994 году стандарт ANS рекомендовал использовать улучшенное слово ACCEPT вместо устаревшего слова EXPECT

Это новое слово ACCEPT и вошло в первую версию Каллисто.

Реализация EXPECT

Юрий Семёнов приводит следующее описание слова EXPECT через цикл DO (стр. 65-66):

 : EXPECT          ( в стеке адрес ввода и максимальное число
                     вводимых символов)
         0 DO     ( начало цикла, в стеке только адрес ввода)
            KEY ↑ 13 =           ( введённый символ <ВК> ? )
            IF ( если да, то ) LEAVE DROP 0 ( уход из цикла,
                 если нажата клавиша <ВК>)
            THEN OVER C!       ( запись очередного символа в
                                 буфер)
            1+            ( в стеке адрес, куда будет введён
                            следующий байт)
         LOOP                                 ( конец цикла)
         2 ERASE ;     ( запись нулей в два последних байта)

Определение слова EXPECT в ядре ФОРТ-ЕС использует примитив (EXPECT)

Вот их опубликованные описания и определения:

  (EXPECT)  * А,+N1->А,+N2                            ВВЕСТИ С ТЕРМИНАЛА   6
                               +N1 ЛИТЕР ПО АДРЕСУ А ДО ПЕРЕВОДА СТРОКИ;
                                 +N2 - ФАКТИЧЕСКОЕ ЧИСЛО ВВЕДЕННЫХ ЛИТЕР

EXPECT    A,+N-> ВВЕСТИ С ТЕРМИНАЛА +N ЛИТЕР ПО                 40
          АДРЕСУ A,В ПЕРЕМЕННУЯ "SPAN" ЗАСЛАТЬ
          ФАКТИЧЕСКОЕ ЧИСЛО ВВЕДЕННЫХ ЛИТЕР)
          ЛИТЕРЫ НАПЕЧАТАТЬ НИ ТЕРМИНАЛЕ

                    Экран номер 6
( 09.09.86 KEY CR EMIT TYPE (EXPECT/ RBLK MBLK )
(  следующие определения дают только имена процедур)

CODE (EXPECT) ( A,N1->A,N2  ВВЕСТИ С ТЕРМИНАЛА НЕ БОЛЕЕ
  N1 ЛИТЕР /ДО ПЕРЕВОДА СТРОКИ/ В БУФЕР ПО АДРЕСУ А;
  N2 - ФАКТИЧЕСКОЕ   ЧИСЛО ВВЕДЕННЫХ  ЛИТЕР)  END-CODE

                     Экран номер 40
( 31.03.84      EXPECT  OUERY INTERPRET  ФОРТ-СИСТЕМА  X )

: EXPECT  ( A,+N->)  DUP >R (EXPECT) DUP SPAN !
   TYPE R> SPAN @ - IF SPACE THEN ;

В FORTH ИТЭФ слово EXPECT также было примитивом, вот его определение:


             HEAD    206Q,'EXPEC',324Q,EXPE               ; EXPECT
             MOV   AH, 0AH
             POP   CX                   ; Число символов
             POP   BX                   ; Адрес буфера SS
             MOV   BYTE PTR [BX],  CL   ; Засылка ожидаемого числа
             MOV   DX, BX
             INT   21H

             MOV   AL, BYTE PTR [BX+1]
             SUB   AH, AH
             ADD   BX, AX
             MOV   WORD PTR [BX+2],0
             NEXT

Ссылки


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


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