Начальный курс программирования на языке Форт

         

КОМБИНИРОВАННЫЕ КОМАНДЫ РЕДАКТИРОВАНИЯ


N и В

Вводя слово N, вы тем самым добавляете единицу к номеру текущего блока. Таким образом, очередная набранная комбинация символов N L

вызовет печать следующего блока. Аналогично слово В

уменьшит на единицу номер текущего блока. Иными словами, комбинация В L

позволяет вам вывести на печать предыдущий блок.

В некоторых системах N объединена с командой L, так что, применяя N, мы переходим к следующему блоку и выводим его содержимое. Вы можете при необходимости переопределить команды N и В с тем, чтобы они выполнялись так же — Форт допускает переопределение команд применительно к вашим потребностям.

COPY

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

Если, к примеру, вы введете 153 200 COPY

то информация, находящаяся в блоке 153, будет скопирована в блок 200. Пусть у вас войдет в привычку вводить FLUSH после каждого выполнения COPY.



S

Команда S представляет собой расширенную версию команды F. Она дает возможность осуществлять поиск указанного текста в пределах текущего блока, а затем и в пределах последующих блоков вплоть до того блока, который вы указали в команде. Например, если текущим является блок 180 и вы ввели предложение 185 S СОКРОВИЩА

то S инициирует поиск «сокровища» в блоках начиная с 180-го и заканчивая 184-м. Если искомый фрагмент обнаруживается, то на экран выводится блок, содержащий данный фрагмент, а курсор устанавливается в его начале.

Слово S оставляет в стеке номер блока, на котором закончился поиск, так что если вам требуется продолжить поиск того же самого фрагмента, просто введите команду S.

G и BRING (ПЕРЕНОС)

Слово G берет одну строку из другого блока и вставляет ее перед текущей строкой (перемещая вни? текущую и все последующие строки).

Пусть курсор указывает на строку 3 следующего блока: 1 2 Куда ж ты, милая

3 , девалась? И где искать тебя теперь?


Пропущенный текст находится в строке 10 блока 38. Наберите на клавиатуре 38 10 8<return>

и вы получите следующее: 1 2 Куда ж ты, милая

3 пропущенная строка 4 , девалась? И где искать тебя теперь?

Слово BRING перемещает сразу группу строк. Выражение 3 S 10 14 BRING

переместит из блока 38 строки 10—14.



М


Некоторые разработчики Форта вместо команд G и BRING используют команду М, которая инициирует действия, противоположные вызываемым командой G. Она перемещает текущую строку в заданную строку экрана. 190 2 M<return>

Слово К меняет местами содержимое буферов поиска и вставок. Это полезно в тех ситуациях, когда вы случайно командой D удалили нужный вам текст. Так как удаленный текст находится в буфере поиска, вам достаточно ввести команду К, которая переместит его в буфер вставок, а затем команду I.

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

Попытайтесь самостоятельно поменять местами два слова в одной и той же строке, используя слово К.

В ряде систем вместо того, чтобы нажимать клавишу RETURN, вы можете с помощью символа возврата каретки обозначать конец фрагмента текста и таким образом в одной строке вводить более одной команды. Например, вы можете ввести D ФРУКТЫ^ I ОРЕХИ<return>

Весь текст разместился в одной строке, а результат вы получите такой же, как если бы вы набрали на клавиатуре следующее: D ФРУКТЫ<return>

И I ОРЕХИ<return>

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

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


Его часто называют словарем, но к вопросу о словарях мы вернемся позднее.

Определение местоположения исходного текста (полезный прием).

В некоторых Форт-системах имеется слово LOCATE (ОПРЕДЕЛИТЬ-МЕСТОПОЛОЖЕНИЕ) или VIEW. Если вы введете следующее предложение:

LOCATE РАЗМЕР-ЯИЦ

то получите распечатку текста блока, содержащего определение РАЗМЕР-ЯИЦ. При этом указанное слово должно быть загруженным, т. е. находиться в словаре з данный момент. (В отдельных системах вы можете находить местоположение выборочных системных определений и слов вашей прикладной программы, но вы не имеете права определять местоположение слов из предварительно скомпилированного участка.)

Ниже следует перечень слов Форта, приведенных в настоящей главе:

FORGET имя ( -- ) С помощью этого слова мы забываем ( удаляем иа словаря ) указанное слово и все слова, внесенные в словарь после него.
LIST     ( n -- ) Вывод на экран дискового блока.
LOAD     ( n -- ) Загрузка дискового блока ( компиляция или выполнение ) . Блок 0 обычно загружен быть не может.
FLUSH     ( -- ) Запись всех обновленных дисковых буферов на диск, после чего освобождение этих буферов.
\         ( -- ) Пропуск оставшегося текста данной строки.
\S        ( -- ) Пропуск оставшегося текста экрана.
THRU ( мач ком — ) Загрузка всех блоков с номерами из диапазона от нач до кон
.( текст) ( -- ) Вывод текста сообщения, ограниченного правой круглой сковкой. Используется, как правило, за пределами определения через двоеточие.
THRIAD ( n -- ) Вывод трех блоков с номерами, включающими n, начиная с номера, делящегося вез остатка на 3.
SHOW ( нам кон -- ) Вывод блоков с номерами из диапазона от нач до кон по три блока.
INDEX ( нам кон --) Вывод комментария только для блоков , номера которых входят в диапазон от н а ч до кон.
LOCATE xxx ( -- ) или VIEW Вывод содержимого блока, иэ которого было загружено определение слова ххх.
Команды редактирования - работа со строками
Т ( n -- ) Вывод заданной строки.
Р ( — ) Рьь или Р XXX Копирование заданного фрагмента, еcли есть, в буфер вставок, после чего помещение копии буфера вставок в текущую строку.
U ( -- )

Uьь или U ххх
Копирование заданной строки, если есть, в буфер вставок  после чего помещение копии буфера вставок в строку, следующую за текущей.
G ( блок строка ) Копирование заданной строки и помещение ее в строку перед текущей, со сдвигом текщей и всех последующих строк вниз.
BRING ( блок нам кон ) Получение строк в указанном диапазоне.
X ( — ) Копирование текщей строки в буфер вставок и извлечение этой строки из блока.
F или ( — ) F ххх Копирование указанной строки, если заданы, в буфер поиска, после чего поиск данной строки в текущем блоке.
<


S или S xxx ( n - ) или ( n - n ) Копирование указанной строки, если задана, в буфер поиска, после .чего просмотр блоков от текущего до n-ного в поисках указанной строки. Если строка найдена, на стек помещается номер последнего просмотренного блока.
E ( - ) Используется следом за F. Удаляется столько символов перед курсором, сколько их в данный момент находится в буфере поиска.
I> или Б ххх ( - ) Копирование указанной строки, если задана, в буфер поиска, поиск очередного вхождения этого фрагмента в текущей строке и удаление его.
TILL или TILL xxx ( - ) Копирование указанной строки, если задана, в буфер поиска, после чего удаление всех символов, начиная от курсора и заканчивая последним символом заданной строки.
I или

I XXX
( - ) Копирование умазанного фрагмента, если задан, в буфер вставок, после чего помещение содержимого буфера вставок сразу же после курсора.
R или R xxx ( - ) Объединяются команды Е и I. Замещение найденного фрагмента заданным фрагментом или содержимым буфер вставок.
( - ) Отметка конца текста, помещаемого в буфер.
Комбинированные команды редактировании
WIPE ( -- ) Заполнение текущего блока пробелами.
L ( -- ) Вывод содержимого текущего блока.
( -- ) Делается текучим следующий блок.
В ( -- ) Делается текущим предыдущий блок.
COPY ( откуда куда -- ) Копирование содержимое одного блока в другой.
К ( -- ) Меняются местами содержимое буфера поиска и буфера вставок.

Содержание раздела