[an error occurred while processing this directive]

.цв

Несколько предварительных слов

.нф

Среди программистов на Агате заслуженной известностью пользуется отладочная система Best 5.3. Единственным ее недостатком, если вообще можно говорить о недостатках этого отличного инструментального средства, являлось отсутствие приличного макроассемблера. Теперь он появился в виде резидента forth.sys с языком Форт-Агат, который более чем на порядок увеличивает производительность программирования, сохраняя при этом скоростные характеристики создаваемых программ.

Форт в нашей стране незаслуженно пользуется дурной славой чего-то примитивного и непонятного. До недавнего времени на Агате не было ни одной версии Форта, хотя зарубежные аналоги Агата - ЭПЛ и BBC - имеют несколько версий этого языка "для ЭВМ четвертого поколения", как назвал Форт его автор - Чарльз Мур.

Кстати, все большее число программистов во всем мире соглашаются с мнением Ч.Мура, что Форт - это лучший язык для написания программ и изложения алгоритмов или объяснения работы ЭВМ.

В сочетании "Форт+Отладчик Best" я вижу мощное средство для разработки разнообразных программ на Агате. Да и не только для него, ведь Форт - самый легкопереносимый язык!

Предлагаемая версия Форта протестирована только автором, что явно недостаточно для выявления всех ее ошибок и недостатков. Поэтому автор с признательностью примет любые замечания и указания на ошибки.

             Виктор Тимофеевич Монахов, т.(095) 529 75 73

21.05.96

.сс

.цв

Форт-Агат в операционной системе Best 5.3

(Краткое руководство программиста)

.нф

В данном Руководстве предполагается, что пользователь знаком с отладочной системой Best 5.3 и с языком Форт, с последним хотя бы в объеме учебника Л.Броуди "Начальный курс программирования на языке Форт" или глав 6 и 7 книги В.П. Дьяконова "Форт-системы программирования персональных ЭВМ".

.цв

1. Общие сведения

.нф

Вашему вниманию предлагается одна из первых версий языка программирования Форт, написанная В.Т. Монаховым (т. 529 75 73) специально для Агата-9. За основу ее взят Форт Acornsoft для микрокомпьютеров BBC и Acorn Electron, который основательно переделан применительно к возможностям Агата и Best 5.3. Предлагаемую версию отличают следующие основные особенности:

1. Форт-Агат работает в среде Best 5.3, являясь ее резидентом, поэтому он располагает практически всеми ресурсами этой системы, включая драйверы управления экраном, принтером, дисководами и электронным диском. Сохранена также возможность перепрограммирования клавиш управления.

2. Форт-Агат соответствует стандарту Форт-79, поэтому снабжен традиционной системой автоматического поблокового обмена с диском. Но, в дополнение к ней, в нем реализована современная файловая система записи скомпилированных программ пользователя на диск и считывания их с диска наиболее простым способом - по имени файла, как в Бейсике ( см. слова sprog и rprog).

3. В Форт-Агате реализованы так называемые векторные слова, т.е. слова-переменные, содержанием которых служат другие слова Форта. Это позволяет непосредственно из программ пользователя легко изменять функции таких слов основного словаря, как abort, create, emit, key, message, number, r/w и др.

4. Форт-Агат снабжен встроенным однопроходным ассемблером, который радикально упрощает создание программ в машинных кодах. В нем кодовые слова создаются так же просто, как обычные высокоуровневые слова, с применением слов if, else, then, begin, while, repeat, again, until, а также других слов Форта.

5. В отличие от других версий, Форт-Агат допускает свободное использование заглавных или строчных букв латинского и русского алфавита, а также текстовой графики с кодами от 1 до 63. В именах слов Форта система не различает заглавные и строчные буквы, но различает - русские и латинские.

6. Из версий Форта на 8-разрядных процессорах Форт-Агат - это одна из наиболее быстрых версий. Это достигнуто максимальным использованием ассемблерных слов, размещением стека данных на нулевой странице, использованием стека данных в качестве буфера, в котором непосредственно выполняются большинство стековых и арифметических операций.

7. Форт-Агат снабжен двумя текстовыми редакторами для разработки программ:

.ло+3

а) Встроенный в Форт редактор EDITOR, являющийся стандартным для многих версий Форта;

б) Загружаемый экранный редактор EDIT, за основу которого принят редактор, опубликованный в книге М. Келли и Н. Спайса "Язык прогаммирования Форт" - более мощный и удобный в работе, чем встроенный.

.нф

8. Форт-Агат, в отличие от известных версий Форта, снабжен библиотекой арифметики вещественных чисел с плавающей десятичной точкой

Форт-система размещена на отдельном диске. Диск включает систему Best 5.3, резидентный файл fort.sys, системный файл float с экранным редактором и арифметикой плавающей точки и 20 текстовых файлов NSCREEN (где N=0..9,A..J) для хранения программ и данных Форта. Форт использует эти файлы автоматически как один длинный файл данных, поэтому стирание их недопустимо.

Кроме этого, на системном диске записаны текстовые файлы со словарем Форт-Агата и настоящим Кратким руководством программиста. Эти файлы можно читать и печатать на принтере в редакторе ТОР, входящем в комплект системного диска Best 5.3.

Диск с Форт-системой можно копировать в стандартном копировщике Агата. Такую копию настоятельно рекомендуется сделать не откладывая, так как Форт-система не имеет защиты от порчи и легко может быть разрушена, особенно на начальном этапе освоения Форта.

Форт-система в памяти Агата размещена в адресах 0..¤1001 и ¤D000..¤FFFF. Экранная память - ¤B800..¤BFFF. Пользовательская память составляет более 40 К в банках 1..5, в распоряжении пользователя также банки 8..D основной памяти и вся дополнительная память, если она установлена.

.цв

2. Запуск и работа в Форт-системе

2.1. Запуск и работа в режиме диалога

.нф

Форт-Агат запускают как обычный резидент отладчика Best 5.3, т. е. исполнив команду

                 [BOOT fort.sys

Если загрузка прошла успешно, на экране появятся слова

Форт-Агат v.1.1

forth

Ok

Приглашение "Ok" свидетельствует о том, что вы находитесь в режиме диалога и можете вводить с клавиатуры отдельные слова или цепочки слов Форта, для исполнения которых достаточно нажать клавишу ВВОД. Так для ознакомления со списком слов основного словаря можно исполнить слово VLIST. А если исполнить команду

                RPROG FLOAT

то будет загружен с системного диска скомилированый дополнительный словарь с определениями нескольких слов Форта, экранным редактором EDIT и арифметикой вещественных чисел.

В диалоговом режиме Форта сохраняют свое действие все клавиши управления, действующие в отладчике Best, в частности:

.кс-5

Стрелки - пермещают курсор по экрану, причем при вводе текста

клавиша ← стирает символ в памяти, а стрелка → переводит символы, по которым она движется, с экрана в память (как в Бейсике),

f8 - стирает текст до конца экранной строки,

f9 - стирает весь текст от курсора до конца экрана,

F2 - стирает символ слева от курсора со сдвижкой остального текста строки,

F3 - раздвигает текст строки и заполняет знакоместо пробелом,

ПРОБЕЛ - приостанавливает вывод информации на экран, следующее нажатие клавиши продолжает вывод;

УПР/Л - стирает экран,

УПР/И - включает многоколоночную печать на принтере,

УПР/О - печатает на принтере содержимое экрана,

УПР/W - переключает вывод с принтера на экран,

УПР/К - включает режим перепрограммирования управляющих клавиш (подробнее об этом режиме сказано в Руководстве по операционной системе Best),

УПР/СБР - аварийно выходит в Best (для нормального выхода из Форта следует применять слово bye).

.нф

Разумеется, продолжают действовать запрограммированные клавиши f0 .. f9, f., f=, F1, РЕД, УПР/Ю.

Все указанные клавиши управления работают не только в диалоге с Форт-системой, но и при исполнении любых слов Форта, в которых вводится текст с клавиатуры.

.цв

2.2. Встроенный текстовый редактор

.нф

Диалоговый режим используют в основном для подачи команд Форт-системы или операционной системы Best, а также для проверки работы новых слов и целых программ. Основная же работа по созданию новых программ ведется в текстовых редакторах.

Редактор editor входит в состав Форт-системы и включается словом editor. При исполнении слов save или load редактор автоматически отключается и для работы с ним требуется повторное включение словом editor.

Этот редактор принадлежит к редакторам командного типа: все манипуляции с текстами выполняются путем подачи соответствующих команд, набираемых с клавиатуры и исполняемых после нажатия клавиши ВВОД. При подключении к Форту редактор устанавливает десятичную систему счисления. Основные команды редактора editor представлены в табл. 1. Эти команды представляют обычные слова Форта, часть из них - с числовыми параметрами, которые перед исполнением слова должны быть введены в стек, другие - с текстовыми параметрами, которые должны непосредственно следовать за словом-командой.

Редактор одновременно работает с одним блоком, текст которого называется листом, или экраном и состоит из 16 линий (строк) по 64 символа в каждой. В сформированной Форт-системе имеется 180 листов, пронумерованных от 0 до 179. Листы хранятся на диске и загружаются в один из блочных буферов командами N block или N list, где N - номер листа. Последняя команда удобна тем, что загруженный лист одновременно выводится на экран.

Для записи текущего листа на диск удобно использовать слово save, которое запрашивает подтверждение, и после нажатия клавиши Y записывает лист в нужное место диска. Для записи листов на диск можно воспользоваться также командами save-buffers и flush, которые описаны в Основном словаре Форт-Агата. Отметим только, что после команды flush все блочные буферы станут пустыми.

.цв

Таблица 1. Команды текстового редактора editor

.нф

.кс-5

B (═→) Перемещает курсор к началу текущей линии на число позиций, равное числу символов текста в буфере PAD (включая хвостовые пробелы)

C <tekst> (═→) Вставляет на место курсора указанный текст <tekst>

CLEAR (s ═→) Очищает лист с номером s

COPY (s1 s2 ═→) Копирует текст листа s1 на лист s2

D (n ═→) Уничтожает линию n, сдвигая остальные линии вверх, текст линии сохраняется в буфере PAD

DELETE (n ═→) Стирает (со сдвижкой текста) n символов перед текущим положением курсора на текущей линии

E (n ═→) Заменяет текст линии n пробелами

F <tekst> (═→) Ищет в текущем листе <tekst> и устанавливает курсор в конце первого вхождения текста <tekst>. Если линия переведена в буфер PAD, то поиск начинается с этой линии

H (n ═→) Копирует линию n в буфере PAD

I (n ═→) Вставляет в лист новую линию n с текстом из буфера PAD. Прежняя линия n и все остальные сдвигаются вниз

L (═→) Выводит на экран обновленный текст текущего листа

M (n ═→) Сдвигает курсор на n позиций (если n<0, то курсор сдвигается влево, если n>0, то - вправо

MATCH (A l A1 n ═→ A s) Ищет в тексте, начинающемся по адресу A и длиной l, строку по шаблону, расположенному по адресу A1 и длиной n. Найдя, снимает со стека три первых числа и кладет на него смещение s от A до первого символа найденой строки. Если строка не найдена, то на стек кладет флаг FALSE

N (═→) Ищет следующее вхождение текста из буфера PAD

P <tekst> (n ═→) Вводит текст <tekst> в лист на линию n, заменяя ее прежнее содержимое

R (n ═→) Копирует текст из буфера PAD в лист на линию n

S (n ═→) Вставляет в лист пустую линию n, сдвигая остальные линии вниз

T (n ═→) Копирует линию n в буфере PAD и выводит ее отдельной строкой на экран (для редактирования)

TILL <tekst> (═→) Стирает текст текущей линии от текущего положения курсора до указанного текста <tekst> включительно

TOP (═→) Устанавливает курсор в начало листа

X <tekst> (═→) Находит и стирает указанный текст <tekst>, оставляя на его месте курсор

.нф

Редактирование текстов программ в редакторе editor выполняется так. Выводят заданный лист n на экран командой n list. По исполнении команды на экране видно 16 нумерованных строк, на каждую из которых командой n P <tekst> можно ввести до 64 символов текста, независимо от того, был на ней текст или она была пустой. Текст длиной более 64 символов при вводе на линию усекается справа и на следующую линию не переходит.

Если требуется только исправить текст, то нужную линию переводят в буфер PAD командой n T и далее используют слова

.кс-3

M, F или B - для установки курсора в место вставки или замены текста линии;

X, TILL, DELETE - для стирания ненужного текста;

C - для вставки нового текста.

.нф

Для редактирования нового текста, вводимого с клавиатуры при исполнении команд C, F, P, X и TILL, можно пользоваться клавишами управления, о которых было сказано в разделе 2. Однако, недопустимо редактировать этими клавишами текст в буфере, выведенный на экран командами list, L или T.

Закончив редактирование линии, нужно исполнить слово TOP, чтобы убрать курсор из текста линии. Дело в том, что в данном редакторе курсор представлен в виде символа "|", который ставится в линию позади текущего положения. Если его не убрать из линии, то текст программы будет искажен.

Для визуального контроля за ходом редактирования полезно почаще пользоваться командой L для вывода обновленного текста листа на экран. Дело в том, что в описываемом редакторе изменения в тексте на экране сами по себе не отражаются.

Отредактированный лист следует записать на диск словом save, после чего можно скомпилировать его в словарь командой s load, где s - номер листа. Никакого специального выхода из редактора не требуется - после исполнения load редактор окажется отключенным.

При работе в редакторе Вы остаетесь в диалоговом режиме Форт-системы и поэтому можете пользоваться любыми словами из основного словаря FORTH, в частности, словами:

INDEX (s1 s2 ═→) - для вывода на экран текста нулевых линий листов от s1 до s2,

.LINE (n s ═→) - для вывода на экран текста линии n листа s,

TRIAD (s ═→) - для вывода на экран трех последовательных листов, включая лист s. Эта команда обычно применяется при печати листов на принтере.

Как видно из описанного, работая в редакторе, мы остаемся в Форте и можем исполнять любые команды Форт-системы. Общение с диском здесь предельно упрощено: команды block, list, save не требуют указаний имени файла, адресов загрузки и команд открытия или закрытия файлов. Единственным идентификатором является номер блока, и он же номер листа, или экрана (как называли его раньше).

.цв

2.3. Обмен с диском

.нф

Наряду со стандартными словами поблокового обмена, такими, как load, block и list - для чтения с диска, и save-buffers и flush - для записи на диск, данная версия включает нестандартное слово save, которое записывает текущий отредактированный лист на диск без выхода из редактора. При этом не требуется исполнять слово UPDATE и вводить в стек номер листа.

Как уже говорилось выше, Форт-Агат располагает возможностью саписывать на диск текущий словарь, созданный пользователем, и затем считывать его с диска в память. Для записи используется команда

               sprog <ИМЯ_ФАЙЛА>

а для чтения - команда

               rprog <ИМЯ_ФАЙЛА>

Заметим, что, в отличие от файлов системы ДОС 3.3, имя файла в Форт-Агате не может содержать пробела и быть длиннее 10 символов.

.цв

2.4. Печать на принтере

.нф

Драйвер принтера системы Best постоянно доступен из Форта, как в диалоге (как было показано выше, в разд. 2.1), так и программно при помощи слова prn, которое инициализирует принтер и включает многоколоночную печать в режиме, ранее установленном командами " и # операционной системы Best (об этом следует позаботиться заблаговременно - до входа в Форт-систему).

Тексты, выводимые на печать, должны быть отформатированы, т.е. каждая строка должна оканчиваться символом cr (код ¤8D). Таким образом, неотформатированные тексты редактора ТОР здесь печатать, увы, нельзя. В то же время тексты редактора editor печатаются правильно.

По окончании работы с принтером следует переключить вывод на экран. В диалоге для этого надо нажать клавиши УПР/W, а программно - исполнить слова

      hex 97 emit 

.цв

2.5. Общение с дисковой операционной системой Best

.нф

Как можно было видеть из предыдущего, пользователь стандартного Форта практически может обойтись без непосредственной работы с ДОС, хотя все его программы и данные хранятся на диске. От этого его избавляет поблоковый обмен с диском, который выполняется автоматически словами block и save-buffers. Но такой тип обмена имеет и крупные недостатки: он искусственно сужает возможности дисковой системы, вызывает повышенный износ дисковода из-за частого его использования, а главное, резко, почти на 2 порядка снижает скорость обмена информацией. В Форт-Агате имеется возможность организовать прямое обращение к ДОС как в диалоге, так и из программы. Это обеспечивается словами >CLI и OS.

Слово >CLI исполняет команду ДОС, если адрес счетной строки, в которой она записана, лежит на стеке. Заметим, что строка эта должна оканчиваться кодами ¤8D и ¤00. Для снабжения командных строк такими окончаниями в Форте имеется специальная текстовая константа crtxt. Конкатенация ее с командной строкой словом ¤+ дает нужный результат.

Слово OS ожидает ввода командной строки ДОС с клавиатуры и после нажатия клавиши ВВОД передает ее драйверу ДОС для исполнения. Другими словами, слово OS позволяет, не выходя из Форта, исполнять в диалоге любую команду операционной системы. Вот некоторые примеры:

OS

[CAT

 - выводит таблицу файлов текущего каталога,

OS

[5

 - делает текущим электронный диск

OS

[TYPE file1

 - выводит на экран (или принтер) содержимое текстового файла file1.

.цв

2.6. Виртуальный диск в Форте

.нф

Недостатки поблокового обмена с диском - медленность и частое использование дисковода - можно заметно ослабить, используя для хранения текущих файлов электронный, или виртуальный диск, который создается в памяти по умолчанию при запуске системы Best или может быть создан пользователем командой [RAMn, где n=0, 1 или 2.

Для этого нужно переслать из системного диска в виртуальный файлы с теми листами, с которыми предполагается работать. Команды пересылки таковы:

[COPY 0SCREEN,3,5 - для пересылки листов 0..8

[COPY 1SCREEN,3,5 - то же, листов 9..17 и т.д.,

то-есть по одному файлу на каждые 9 листов.

Закончив пересылку, загрузите и запустите Форт-Агат командой

[BOOT fort.sys

и сделайте текущим электронный диск как указано в примере предыдущего раздела.

Теперь можно работать с редактором, как указано выше. Вся загрузка блоков в память будет выполняться из файлов электронного диска, а запись листов - в те же файлы.

По окончании работы все обновленные листы, точнее файлы, в которых хранятся эти листы, нужно переслать обратно на системный диск, иначе после выключения компьютера вся новая информация будет утрачена. Обратная пересылка выполняется аналогичными командами из Форта или из отладчика - после выхода из Форта, напр.

             [COPY 0SCREEN,5,3

и т.д.

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

.цв

2.7. Экранный текстовый редактор

.нф

При разработке и отладке больших и сложных программ пользоваться встроенным редактором editor становится неудобно. Значительно большие удобства предоставляет экранный редактор EDIT, загружаемый с диска. Этот редактор позволяет практически одновременно обрабатывать программу размером до 10 и более листов. По удобству работы он приближается к таким редакторам, как ТОР, ну , конечно с поправками на принятую в Форте автоматическую блоковую систему обмена с диском.

Прежде, чем загружать экранный редактор, необходимо сохранить на диске созданный ранее словарь пользователя. Это обусловлено тем, что редактор EDIT, как всякая другая скомпилированная программа, загружается с начала словаря, затирая все другие введенные Вами слова.

Перед загрузкой редактора задают число s одновременно обрабатываемых листов и устанавливают нужное для них число блочных блочных буферов:

                s SETBUF

По умолчанию система формирует 4 блочных буфера. Эта операция, вообще говоря, не является необходимой. Просто когда все листы редактируемой программы будут одновременно в памяти редактора, то не будет тратиться лишнее время на загрузку, пусть и автоматическую, нужных листов с диска.

Редактор загружают в Форте командой

                RPROG FLOAT

и входят в него - командой

                N EDIT

где N - номер обрабатывемого листа. Находясь в редакторе, можно сменить лист на экране клавишами листания f4 и f5, а также клавишей УПР/N, которая запрашивает номер листа, подлежащего вводу.

Выведенный после этого текст листа можно свободно редактировать, перемещая курсор стрелками, исправляя текст в любой строке в режимах вставки или замены. Переключаются эти режимы клавишей f2. Для выполнения других операций можно использовать клавиши управления, указанные в табл. 2.

Таблица 2. Клавиши управления экранным редактором

.кс-8

Клавиша Выполняемые действия

Стрелки Перемещение курсора на 1 позицию в направлении стрелки

f1 Ставит курсор в начало экрана (листа)

ВВОД Переводит курсор в начало следующей строки

f2 Переключает режим ввода с замены на вставку и обратно. Вид курсора: _ - при замене и > - при вставке

f. Стирает символ слева от курсора, как в ТОРе

F2 Стирает символ под курсором, как в Best'е

F3 Раздвигает строку на месте курсора, как в Best'е

Обработка текущей строки

f= Копирует строку и помещает ее в буфер строки

f0 Выводит текст строки из буфера строки на экран

f6 Переводит строку из кольцевого буфера на экран

f7 Переводит строку с экрана в кольцевой буфер

f8 Стирает строку от курсора до конца, как в Best'е

f9 Вставляет пустую строку, сдвигая остальные вниз. Последняя строка уходит в кольцевой буфер

f3 Копирует лист в блочном буфере и помечает его как измененный (update) - для автоматической записи

f4/f5 Листают экраны назад/вперед

F1 Копирует на экране текущий лист из блочного буфера, тем самым отменяются все внесенные в него изменения

УПР/N Выводит на экран лист по запрашиваемому номеру

УПР/X Переходит в режим стирания экрана или кольцевого буфера

УПР/I Включает режим сканирования экрана клавишей '→'

УПР/W Выводит на экран текст, сканированный клавишей '→'

УПР/G Включает режим вывода графических символов

УПР/V Включает режим ввода управляющих символов как текста

УПР/К Записывает все обновленные листы на диск без выхода из редактора

УПР/L Очищает блочные буферы без выхода из редактора

УПР/О Выводит на принтер текущее содержимое экрана

УПР/К Выполняет слово FLUSH

УПР/Л Выполняет слово EMPTY-BUFFERS

УПР/J Выход из редактора с запросом записывать листы в блочных буферах на диск или нет

РЕД Отменяет режимы сканирования экрана и вывода графических или управляющих символов

.нф

В редакторе имеется экран на 16 строк по 64 символа и 2 буфера: кольцевой - для приема до 16 убираемых с экрана строк, и строчный - для хранения копии запомненной строки. Кроме того, имеется системная текстовая переменная bufins для приема до 64 символов строки, сканируемой клавишей '→'.

Кольцевой буфер закольцован с экраном, и многократным нажатием клавиши f6 или f7 можно сдвинуть все строки экрана в буфер (вниз или вверх) или, наоборот, выдвинуть их на экран. Этой операцией удобно переносить строки с одного листа на другой.

В строчном буфере копия строки сохраняется при копировании на экран, поэтому им удобно размножать строки.

Режим сканирования экрана обычен для Агата. в режиме ввода с клавиатуры в Бейсике и Best'е. Там он включен постоянно. Но при редактировании текстов это неудобно. В предлагаемом экранном редакторе режим сканирования можно включать только тогда, когда он нужен, т.е. тогда, когда курсор подведен к тексту, который нужно запомнить для последующего использования. Для этого достаточно нажать кдавишу УПР/И. После этого при каждом нажатии клавиши '→' в переменной bufins будет запоминаться очередной символ (включая пробел), на который встал курсор. Нажатие любой другой клавиши перемещения курсора или клавиши РЕД выключает режим сканирования.

Записанный в bufins текст можно вывести в любое место любого текущего листа на экране. Для этого надо поставить курсор в место вставки и нажать клавишу УПР/О. После вставленного текста система добавляет один пробел. Не лишне напомнить, что текст в переменную bufins можно внести не только путем сканирования экрана, но и заблаговременно, до входа в редактор, как в обычную текстовую переменную.

В редакторе можно выводить на экран символы текстовой графики с кодами от 1 до 63. Для этого нужно войти режим такого вывода клавишей УПР/Г и использовать буквенные клавиши и клавишу РЕГ для вывода этих символов. Аналогично, можно вывести (например в текстовую строку) коды клавиш управления (от 129 до 159). Вход в этот режим выполняется клавишей УПР/Ж. При этом клавиша A будет выводить код 129, B - код 130, C - 131, D - 132 и т.д. Для возврата в обычный режим вывода символов нажмите клавишу РЕД.

Закончив редактирование листа, нужно скопировать его текст клавишей f3 в блочный буфер для последующей записи на диск. Если этого не сделать, то при переходе к другому листу правка будет утрачена.

Очистить экран или буфер для ввода нового текста можно клавишей УПР/Ь.

Для выхода из редактора нажмите УПР/J и далее букву S, если желаете сохранить измененные тексты, или букву Q - если это не требуется, нажатие других клавиш возвращает Вас в редактор.

.цв

3. Особенности программирования на Форт-Агате

3.1. Общие замечания

.нф

В описываемой версии Форта арифметический стек, или стек данных очень короткий - он включает всего 36 ячеек. При попытке ввести в стек 37-е число будет выдано сообщение об ошибке, и исполнение программы прервется. Об этом следует помнить при разработке собственных и использовании опубликованных программ.

Форт-Агат имеет возможность обрабатывать следующие типы данных:

.кс-4

логические величины - false (ложь, числовое значение 0) и true (истина, числовое значение 1 или любое ненулевое значение);

биты, или двоичные разряды;

восьмиразрядные байты;

восьмиразрядные коды, выводимые как печатаемые символы;

восьмиразрядные коды, выводимые как управляющие символы;

16-разрядные машинные слова, представляемые беззнаковыми числами от 0 до 65535;

16-разрядные числа со знаком в интервале -32768..32767;

32-разрядные числа со знаком в интервале -2147483648..2147483647 (они вводятся с точкой в конце числа, напр., 12345678. или -45. и т.д.;

слово - последовательность печатных символов, ограниченная пробелами или управляющими символами ↵ (перевод строки);

счетная строка - последовательность символов, первый байт которой содержит число символов в строке;

строка текста - последовательность символов, заканчивающаяся управляющим символом ↵ (перевод строки);

входной поток - совокупность слов, завершающаяся нулевым байтом;

файл - последовательность байтов, обрабатываемая как единое целое.

.нф

Указанное деление данных на типы относительно. Оно справедливо только по отношению к словам-операторам, которые рассматривают содержимое ячеек памяти как тот или иной тип данных. Так одно и то же содержимое двух соседних ячеек стека данных словом d. будет рассматриваться как одно двойное число, а словом type как строка из четырех символов.

Программист волен вводить любые другие типы данных, какие необходимы ему для решения задачи.

Описание большинства слов Форта представлено в таблице "Основной словарь языка Форт-Агат", записанной на диске в файлах Словарь Форт-АгатN (где N=0 и 1). Из таблицы можно видеть, что слова данной версии, в основном, соответствуют описаниям, опубликованным в литературе. Но есть и особенности.

Прежде всего это касается слов, выполняющих деление. Эти слова дают правильный результат только, если делитель меньше 32768. Кстати этот недостаток присущ всем известным мне версиям Форта.

Своеобразно работает слово -FIND. Оно снимает со стека число и, используя его как адрес поля имени, ищет в словаре адрес поля кода слова-шаблона, стоящего вслед за -FIND. Поиск может быть успешным только тогда, когда адрес искомого поля кода меньше снятого со стека адреса поля имени. Эта особенность требует исполнения команды

              ' <ИМЯ> NFA

перед исполнением слова -FIND (здесь <ИМЯ> - это первое имя, выводимое на экран словом Vlist).

Необычно в данной версии и расположение временного текстового буфера PAD: для него выделено постоянное место в памяти по адресу 5C0, поэтому записанный в него текст не затирается при изменении положения HERE, как это происходит в других версиях Форта. В то же время положение PAD в нулевом сегменте налагает ограничение на длину обрабатываемых в нем текстов, в частности, не позволяя загружать в него длинные текстовые файлы с диска.

Слово STRING здесь вводит текст за собой не в словарь, как в стандартных версиях, а в буфер ввода TIB. Чтобы перевести его оттуда в словарь, надо исполнить слово TEKST, или CMOVE.

В качестве расширений стандарта Форт-79 отметим слова, облегчающие обмен с диском (sprog и rprog), и операторы, вводящие в Форт новый класс объектов - векторные слова.

.стФортАгат.Инстр1

[an error occurred while processing this directive]