Входной буфер терминала

Материал из ПМК вики
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

Входной буфер терминала (англ. Terminal Input Buffer, TIB) располагается в начале области байтовых данных и предназначен для ввода слов Каллисто с клавиатуры ЭКВМ. Адрес начала входного буфера даёт стандартное слово TIB, в Каллисто 1.0 он всегда равен 11000.

В Каллисто 1.0 размер TIB равен 96 байт, чтобы вместить максимальную вводимую с пульта строку в 94 символа и два завершающих нуля.

Данный буфер представляет собой входной поток, откуда слово WORD выбирает слова. По исчерпании входного потока Каллисто вводит в этот буфер новый текст, получаемый от программиста. Ввод в этот буфер осуществляется встроенным оператором QUERY.

Переключением входного потока на внешнюю память и обратно управляет стандартная переменная BLK (сокращение от англ. block — блок), значение которой проверяется каждый раз в слове WORD. Если это нуль, то в качестве входного потока служит буфер TIB, в противном случае это значение рассматривается, как номер блока на электронном диске, который используется как входной поток (этот блок переносится в оперативную память словом BLOCK). Текущая позиция во входном потоке хранится в стандартной переменной >IN (от англ. in — вход).

Исчерпание входного потока[править]

Конец входного потока в оперативной памяти отмечается нулевым кодом. Слово WORD, «натыкаясь» на нулевой код, возвращает в качестве результата пустую строку, при этом в список FORTH включена словарная статья для такого «пустого» слова. Оно имеет признак немедленного исполнения и поэтому текстовый интерпретатор его всегда исполняет, независимо от своего состояния. Исполнение «пустышки» состоит в прекращении интерпретации данного входного потока и тем самым позволяет избежать дополнительных проверок на его исчерпание.

Такая «кухня» — популярный в Форте трюк. От него постепенно избавляются в стандартах, предлагая более гибкий механизм EVALUATE, который намечен к реализации в Каллисто 2.0.