ACCEPT

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

ACCEPT — стандартное слово Каллисто.


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

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

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


Ссылки


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


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