[an error occurred while processing this directive]
3. Характерные особенности BForth ------------------------------------------------------------- Введение: В данной главе будут описаны особенности BForth, которые не входят в стандарт и являются, в основе, авторской разработкой. Именно эти особенности и придают BForth статус ЯЗЫКА. ПРИМЕЧАНИЕ: Полный список слов не вошедших в стандарт ВЫ найдете в ГЛОССАРИИ. 3.1 Организация потоков ВВОДА/ВЫВОДА( IN/OUT ) 3.1.1 Общие слова В BForth не существует никаких специальных слов для работы с принтером, сетью и т.д. Все это компенсирует- ся ОБРАБОТКОЙ ПО ЦЕПОЧКЕ с едиными словами IN и OUT. Каждое из этих этих слов представляет из себя ЦЕПОЧКУ слов, которые могут обрабатывать свои устройства( память, сеть, принтер и т.д. ). Причем каждое слово в ЦЕПОЧКЕ "знает" только о следующем за ним слове, которому и будет передано управление после завер- шения работы этого слова. Также каждое звено цепочки мо- жет информировать все последующие звенья о свой работе. Понятно, что о первом слове "знает" сам IN или OUT. 3.1.2* Особенности слов IN и OUT OUT: 1. Данные для вывода( байт ) находятся в ячейке OUTCHR. 2. Ячейка для информирования след. звеньев: OUTWAS ПРИМЕЧАНИЕ: На время работы цепочки OUT запреща- ются ВСЕ прерывания системы. IN: 1. Если звено получает данные из своего устройства, то оно обязано: а) Поместить эти данные на стек б) Установить ячейку INWAS 2. Если в результате каких- либо действий пре- дыдущие звенья цепочки установили INWAS, то любое звено цепочки может игнорироваться( т.е. добровольно прервать свое исполнение ), испол- нив слово INWAS? в результате выполнения данного слова процедура будет продолжена, если не была установлена INWAS и будет совершен переход к следующему звену цепочки в обратном случае. 3. После завершения последнего звена цепочки IN на стек выдается содержимое INWAS. Понятно, что подключив к IN и OUT нужные ВАМ процедуры можно работать даже и на другом компьтере( с ВАШЕЙ клави- атуры разумеется ), а также работать в графике как в тек- сте поскольку все операторы в/в( OUTS, GETS, . и т.д. ) работают только через IN и OUT. ПРИМЕЧАНИЕ: Удалить обработчик можно, только используя знания о структуре обработчиков, которая будет рассматриваться в примерах. 3.1.3* Создание слов обработчиков IN/OUT Данные слова особые и создаются с помощью :dev <WName> ..... ;dev Понятно, что о содержимом внутри слова заботитесь только ВЫ. 3.1.4 Системные установки IN/OUT В системе инициализация происходит примерно так: для OUT OUTRESET ( Сбросим весь ВЫВОД ' CONOUT ( Получим адрес CFA процедуры вывода на ( консоль OUTSET ( Установим первое звено для OUT для IN INRESET ( Сбросим весь ВВОД ' KBDIN ( Получим адрес CFA процедуры ввода с ( клавиатуры INSET ( Установим первое звено для IN ПРИМЕР: МЫ ХОТИМ Чтобы вывод с экрана шел также и на принтер и у нас есть слово, которое может посы- лать байт на принтер( пусть OUTPRN ). Тогда цепочка вывода будет выглядеть: OUT Единое слово для вывода ! ! V OUTPRN Вывод на принтер ! ! V CONOUT Вывод на консоль ! ! V Выход_из_цепочки_OUT КАК ЭТО СДЕЛАТЬ? В диалоговом режиме: ' OUTPRN SETOUT ЧТО ДАЛЬШЕ БУДЕТ? После этого все символы, которые посылаются на консоль будут сначала приходить в OUTPRN, а потом CONOUT, причем вывод на экран будет идти вне зависимости от того, был или нет вывод на принтер( вне зависимости от OUTWAS ). ПРИМЕЧАНИЕ: Из ПРИМЕРА видно, что одно и то же слово НЕ может быть, ни два раза в цепочке, ни в какой- либо другой цепочке. 3.2 Организация устройств В BForth для работы с внешними устройствами применяется обозначение УСТРОЙСТВО. Основной принцип- это абстра- гирование от природы УСТРОЙСТВА посредством стандартиза- ции операций УСТРОЙСТВА. Т.е. ВЫ можете не знать с ка- ким устройством ВЫ сейчас работаете, но это будет знать за ВАС система, которая будет работать с внешним устрой- ством так, чтобы ВАМ не приходилось задумываться о том, как работать с ним. Теперь по делу. Примем постулаты: а) Есть УСТРОЙСТВО, т.е. абстрактная вещь. б) Есть устройство, т.е. конкретная вещь ( например дисковод ) в) Есть ОБРАБОТЧИК, т.е. программа, ко- торая знает свое устройство, и умеет: 0) Опознать устройство 1) Включить устройство 2) Выключить устройство 3) Считать блок с устройства 4) Записать блок на устройство 5) Оперировать функциями чт. файлов 6) Оперировать функциями зп. файлов 7) Считать байт с устройства 8) Записать байт на устройство 9) Инициализировать устройство ( форматировать ) 10) Установить свои параметры в рабочую область 3.2.1 Описание каждой функции 3.2.1.0 Функция 0- Опознать устройство 3.2.1.0.1 Общие слова При начальной загрузке система проверяет все слоты машины на наличие в них устройств. Для этого система выдает в стек номер слота и поочередно запускает ОБРАБОТЧИКИ из системного набора с 0 на стеке( т.е. 0- функция ). Если ОБРАБОТЧИК по 0- функции опознал в сло- те, номер которой на стеке, "свое" устройство, то ему предоставляется на "свои" нужды 256 байт в области, которая отведена системой для этой слоты( см. 0.3 ). 3.2.1.0.2 Системный набор ОБРАБОТЧИКОВ ЧТО ЭТО ТАКОЕ? В системе предусмотрена область для хранения адре- сов ОБРАБОТЧИКОВ. Другими словами система хранит в себе "знания" о том, как обрабатывать какие- либо внешние устройства. Причем она не должна заботиться о том, чтобы знать где и в какой слоте то или иное устройство, система предоставляет ОБРАБОТЧИКАМ самим опознавать "свое" устройство. ГДЕ ЭТО НАХОДИТСЯ? Итак переменная, в которой хранятся адреса ОБРАБОТ- ЧИКОВ: TREATERS КАК ЗАРЕГИСТРИРОВАТЬ СВОЙ ОБРАБОТЧИК? Необходимо выдать в стек адрес CFA своего ОБРАБОТЧИ- КА и выполнить слово REGTREAT. При этом адр. ОБРАБ. будет занесен в системный набор на первую свободную позицию, если же место в наборе исчерпано, то будет удален адрес последнего в наборе ОБРАБОТЧИКА и на его место записан адрес нового. След. файл-->bffeatr2.doc[an error occurred while processing this directive]