КОМБИНИРОВАННЫЕ КОМАНДЫ РЕДАКТИРОВАНИЯ
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 | ( -- ) | Вывод содержимого текущего блока. |
N | ( -- ) | Делается текучим следующий блок. |
В | ( -- ) | Делается текущим предыдущий блок. |
COPY | ( откуда куда -- ) | Копирование содержимое одного блока в другой. |
К | ( -- ) | Меняются местами содержимое буфера поиска и буфера вставок. |