Редакторы текстов. Часть 1.

В составе ФОДОС, МДОС и ПЛОС используется широкий набор текстовых редакторов. Различают две группы: консольные и экранные. Основное отличие между этими группами редакторов заключается в следующем.

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

Экранные редакторы позволяют использовать экран дисплея как поле для внесения исправлений в текст. В этом случае каждое нажатие функциональной клавиши приводит к выдаче из ЭВМ специальных управляющих кодов. С помощью этих кодов можно смещать курсор, стирать экран или его часть, раздвигать строки или часть строки и т. д. К сожалению, в различных моделях дисплеев коды одних и тех же управляющих функций (а иногда и набор этих функций) различны. Поэтому для выполнения практически одинаковых редакторских функций разработан ряд экранных редакторов: К340 (для экранов типа VT-340); К2000 (для экранов типа ВТА-2000); К13 (для экранов типа 15ИЭ-00-013) и т. д.

В качестве примера рассмотрим два консольных редактора EDIT и ТЕСО и один экранный К13.

Редактор EDIT. Является интерактивным консольным редактором в ФОДОС, позволяет в пределах одного сеанса редактировать несколько входных файлов, объединяя их в выходном, или, наоборот, из одного входного наредактировать несколько выходных. Однако, так как текстовый буфер всего один, открытыми одновременно могут быть один входной и один выходной файлы. С помощью специальных команд выполняются операции поиска контекста, удаления и вставки строк и символов. Подобно курсору на экране, с буфером связан указатель места в буфере, к которому относится вводимая команда. Хотя на экране нельзя немедленно увидеть результат выполнения команды, его можно вызвать на экран специальной командой чтения строк. Большинство команд допускает простое повторение, число повторений указывается перед командой.

Несколько команд (они, как правило, представляются одной буквой) могут быть объединены в одну командную строку; тогда они будут выполнены последовательно. Часть строки (или все) может быть выполнена несколько раз, если она будет заключена в угловые скобки и перед скобками указано число повторений. Кроме того, командная строка может быть помещена в макробуфер и выполнена потом специальной командой. Так как текстовые вставки (и замены) вводятся в той же строке, что и команды, для отделения текста от команд используется специальный разделитель СКЛ — [, который не может встретиться в тексте (на экране он отображается ¤). Конец командной строки обозначается двумя разделителями СКЛ — [.

Команды редактора могут быть отнесены к одной из четырех групп:

  1. управление редактором (в частности, команда окончания);
  2. ввод-вывод текста в буфер;
  3. перемещение указателя;
  4. модификация текста (непосредственно редакторские) — удаление, замена, вставка.

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

Перемещение текста и его отдельных участков при использовании команд редактора EDIT показана на рис. 6.10.

Схема перемещения текста при работе редактора

Консольный редактор EDI предназначен для работы в МДОС, выполняет в основном те же команды, что и редактор EDIT, хотя обозначаются они иначе. Размер текстового буфера может быть задан (по умолчанию — 38 строк); обработка текста производится построчно. Замена (или удаление) отдельных символов производится командой замены (С), в которой приводятся сменяемый контекст и текст замены. В целом функции EDI аналогичны функциям редактора EDIT. К сожалению, различные обозначения одинаковых функций усложняют переход от одного редактора к другому.