`6';


- 16 -



17


<B-SPACE>
- отменяет предыдущий символ; в режиме вставки строка
уплотняется. Действует и при вводе параметров. По
умолчанию - клавиши `DEL' или `BackSpace'.

3.4.3. Ввод нетекстовых символов (<ESCAPE>)

Нетекстовыми (неграфическими) являются символы с кодами
0-037, 0177-0277,, 0377. Для их ввода в файл служит специ-
альный "ESCAPE"-символ, который преобразует следующий за ним
символ в нетекстовый.

Для ввода символа с кодом 0-037 необходимо:

- ввести команду <ESCAPE> (по умолчанию CTRL/A);

- ввести соответствующий "CTRL"-символ либо пропис-
ную латинскую букву, либо восьмеричный код сим-
вола и затем CTRL/L.

На экране появится пара символов: светлый квадратик (либо
символ его заменяющий) и текстовый символ. При записи в файл
эта пара заменится на один символ с кодом <символ>&037, где
"&"- "поразрядное логическое умножение", то есть букве "A"
соответствует код 01 и так далее.

Для ввода символов с кодами 0200-0277 и 0377:

- введите <ESCAPE> (CTRL/A);

- введите трехзначный код символа.

Символ <Забой> (0177) вводится как <ESCAPE>#.

3.5. Перемещение по файлу

3.5.1. Запоминание места в файле

<ARG>>имя<RETURN>
Текущее положение курсора запоминается в переменной
"имя". Затем эта переменная может быть использована в
командах <OPEN>, <CLOSE>, <PICK>, <GOTO>.

3.5.2. Подвод к строке (<GOTO>)

В редакторе строки текста считаются пронумерованными под-
ряд, начиная с 1. Для подвода к нужной строке служит
команда <GOTO> (по умолчанию клавиша `4').

<GOTO>
- подвод к началу файла;




- 17 -



18


<ARG><GOTO>
- подвод к концу файла;

<ARG>N<GOTO>
- подвод к строке номер "N" (N - целое число);

<ARG>$имя<GOTO>
- подвод к месту в файле, запомненному под именем "имя"
("имя" - одна латинская буква);

Номер текущей строки выдается на нижней строке экрана.

3.5.3. Листование файла (<+PAGE>, <-PAGE>, <+LINE>, <-
LINE>)

Страницей считается часть файла, умещающаяся в текущем
окне на экране.

<+PAGE>
- перемещает окно на 1 страницу вниз по файлу; по
умолчанию клавиша `7';

<-PAGE>
- перемещает окно на 1 страницу вверх; по умолчанию
клавиши `2'`7';

<ARG>N<-PAGE>
перемещает окно вниз (вверх) на N страниц.

Для перемещения окна с точностью до строки служат команды
<+/-LINE>; (CTRL/T/CTRL/W):

<ARG>N<+LINE>
- вперед на N строк;

<ARG>N<-LINE>
- назад на N строк;

<+LINE>
- вперед на 1 строку, если терминал поддерживает аппа-
ратный сдвиг текста на экране, или на 8 строк в про-
тивном случае;

<-LINE>
- назад на 1 строку (8, если нет аппаратного сдвига) ;

<ARG><+LINE>
- Сдвинуть "окно" вниз так, чтобы текущая строка стала
первой на экране;

<ARG><+LINE>
- Сдвинуть "окно" вверх так, чтобы текущая строка стала
последней на экране;


- 18 -



19


3.5.4. Сдвиг окна вправо/влево (<RIGHT> и <LEFT>)

<RIGHT>
- сдвинуть "окно" вправо на 30 колонок; по умолчанию
`2'<стрелка вправо>.

<LEFT>
сдвинуть "окно" влево на 30 колонок; по умолчанию
`2'<стрелка влево>.

<ARG>N<RIGHT>
- сдвинуть "окно" вправо на N колонок;

<ARG>N<LEFT>
- сдвинуть "окно" влево на N колонок;

Команда <RIGHT> выполняется автоматически, если при
наборе текста курсор достиг правую границу экрана. По
команде <RETURN> окно автоматически устанавливается на 1-ю
колонку файла.

3.5.5. Перемещение с помощью стрелок

Окно можно двигать по файлу с помощью клавиш со стрел-
ками: если не установлен ключ f (по умолчанию) и курсор
"упирается" в границу окна, при очередном нажатии на клавишу
движения курсора окно сдвинется в нужную сторону.

3.6. Контекстный поиск (<+SEARCH>, <-SEARCH>)

Команды <+/-SEARCH> (по умолчанию `3' и `2'`3') вызывают
поиск заданного образа в файле соответственно вперед или
назад от текущего места. Для указания текста, который нужно
найти, служат команды:

<ARG>текст<+SEARCH>
<ARG>текст<-SEARCH>
производится поиск указанного текста в файле вперед
(назад) от текущего положения в файле. Если текст най-
ден, это место в файле высвечивается на экране и курсор
устанавливается на начало найденного текста, иначе
выдается предупредительное сообщение:

"search key not found"
"Текст не найден"


Для продолжения поиска данного образа достаточно ввести
одну из команд:

<+SEARCH> или <-SEARCH>




- 19 -



20


3.7. Чтение и запись файлов (<USE>, <SAVE>)

Команда <USE> (CTRL/D, или `-') служит для переключения
редактора с файла на файл. Для перехода к редактированию
нового файла служит команда:

<ARG>имя<USE>
начать редактировать файл имя.

При этом возможны следующие случаи:

1) Файл существует, доступен и не входит в число фай-
лов, которые уже редактировались в данном сеансе
работы. В этом случае редактор подключает его и
высвечивает в текущем "окне", а ранее редактировав-
шийся файл становится "альтернативным";

2) Файл уже редактировался в данном сеансе работы
(хотя, возможно, и не показывается ни в одном окне
на экране терминала). В этом случае файл отобража-
ется на экране со всеми уже внесенными изменениями.
Отметим, что редактор не читает файл из архива
заново. Текущий файл становится "альтернативным";

3) Файл не существует. Редактор просит подтвердить
необходимость создания нового файла:

"Create (y/n)?"
("Создать(y/n)?")


в случае положительного ответа создается новый
файл.

Команда <USE> без параметров переключает редактор на аль-
тернативный файл. В частности, в начале сеанса он может
использоваться для получения справочной информации из файла
/usr/lib/re.std

<SAVE>
- запись текущего файла в архив (`2'`-' или CTRL/V по
умолчанию). При этом исходный вариант файла переиме-
новывается в "старое имя.b". После выполнения <SAVE>
без параметров для повторения сеанса в случае сбоя
необходимо восстановить исходное состояние файла из
файла имя.b, поскольку изменилось исходное состояние
редактируемых файлов.

<ARG>имя<SAVE>
Происходит запись текущего файла в файл "имя".

Команда <SAVE> автоматически выполняется для всех изме-
ненных в процессе работы файлов при выходе из редактора по


- 20 -



21


команде <EXIT>.

3.7.1. Запрет и разрешение записи в файл

<ARG>+w<RETURN>
- запретить изменение текущего файла;

<ARG>-w<RETURN>
- разрешить изменение (и запись, если она разрешена)
редактируемого файла.

3.8. Перенос, уничтожение и вставка текста

3.8.1. Команды <OPEN> и <CLOSE>

Команда <OPEN> (раздвинуть) позволяет вставить пробелы
между колонками, строками или в середину группы строк.

<OPEN>
- перед текущей строкой вставляется пустая строка; по
умолчанию `8' или PF2.

<ARG>n<OPEN>
- перед текущей строкой вставляется "n" пустых строк
(где "n"-целое положительное число);

<ARG><OPEN>
- текущая строка делится на две части, начиная с теку-
щей колонки;


<ARG>указание_курсором<OPEN>
<ARG>$имя<OPEN>
- в отмеченное курсором (или курсором и точкой, запом-
ненной в "имя") место вставляются пробелы (или пустые
строки, если отмечена группа строк целиком). Правила
указания части файла с помощью курсора подробно при-
ведены в описании команды <ARG>.

Команда <CLOSE> действует противоположно команде <OPEN>,
убирая из файла соответствующую часть текста:

<CLOSE>
- уничтожить текущую строку; по умолчанию `2'`8' или
PF3.

<ARG>n<CLOSE>
- уничтожить "n" строк, начиная с текущей;

<ARG><CLOSE>
- склеить текущую строку со следующей, причем следующая
строка приклеивается начиная с текущей колонки;



- 21 -



22


<ARG>указание_курсором<CLOSE>
<ARG>$имя<CLOSE>
- уничтожается указанный кусок текста либо группа строк
целиком. Правила указания с помощью курсора приве-
дены в разделе <ARG>.

Текст, удаленный с помощью команды <CLOSE>, попадает в
конец псевдо-файла "#" и может быть вставлен обратно (либо в
другое место) с помощью команды:

<ARG><PUT>
- текст, убранный последней командой <CLOSE>, вставля-
ется в текущее место файла.

Псевдо-файл "#" можно просмотреть, введя команду:

<ARG>#<USE>


Для возврата в прежний файл служит команда <USE>.

<ARG>>имя<CLOSE>
- текст, убранный последней командой <CLOSE>, запомина-
ется в переменной "имя".

3.8.2. Копирование текста (<PICK>, <PUT>)

Для копирования текста используются две команды. Команда
<PICK> (выбрать) позволяет записать в буфер вставок кусок
текста, который затем может быть вставлен в произвольное
место по команде <PUT>. Выбранный текст попадает в конец
псевдо-файла "#" и может быть просмотрен (<ARG>#<USE>) или
выбран заново:

<PICK>
- выбрать для вставки текущую строку; по умолчанию вво-
дится клавишей `9'.

<ARG>n<PICK>
- выбрать n строк, начиная с текущей;


<ARG>указание_курсором<PICK>
<ARG>$имя<PICK>
- выбрать указанный курсором участок файла (смотри опи-
сание <ARG>).

Выбранный текст заносится в так называемый "PICK"-буфер
(буфер вставки);

<ARG>>имя<PICK>
- запомнить выбранный последней командой <PICK> текст в
переменной "имя".


- 22 -



23


Для вставки текста в файл используются команды:

<PUT>
- (по умолчанию `2'`9'): выбранный ранее текст вставля-
ется в текущее место файла. При этом, если была выб-
рана группа строк целиком, происходит вставка строк,
иначе текст вставляется в середину имеющихся строк
(которые для этого раздвигаются);

<ARG><PUT>
- работает аналогично <PUT>, но вместо "PICK"-буфера
используется "CLOSE"-буфер, в котором запоминается
текст, исключенный из файла последней командой
<CLOSE>;

<ARG>$имя<PUT>
- текст из переменной "имя" ("имя" - одна буква) встав-
ляется в файл и становится текущим буфером вставки.

3.9. Работа с окнами (<M-PORT> и <CH-PORT>)

На экране терминала можно создавать новые "окна" и унич-
тожать старые. Для этого служит команда <M-PORT> (создать
"окно", клавиши `2'`4'). Новое "окно" создается в уже имею-
щемся путем деления его на две части. Если курсор находится
в первой строке "окна", то оно делится по вертикали. Если
курсор стоит в первой колонке окна, то деление происходит по
горизонтали. В остальных случаях выдается сообщение об
ошибке. Примеры приведены на рисунках 4 и 5.


____________________________________________________________


Деление по горизонтали

До команды После команды

------------------ ------------------
! ! ! старое !
! ! ! окно !
!*-курсор ! !----------------!
! старое ! ! новое !
! окно ! ! окно !
! ! ! !
! ! ! !
------------------ ------------------

Рис. 4
____________________________________________________________

- 23 -



24



____________________________________________________________

Деление по вертикали

До команды После команды

------------------ -------------------
! *-курсор ! ! !! !
! ! ! старое !! новое !
! ! ! !! !
! старое ! ! окно !! окно !
! окно ! ! !! !
! ! ! !! !
! ! ! !! !
------------------ -------------------

Рис 5.
____________________________________________________________


Максимальное число окон на экране равно 10.

Для создания и уничтожения окон используются следующие
команды:

<M-PORT>
- создается новое окно, и в нем высвечивается файл
/usr/lib/re.std;

<ARG>имя<M-PORT>
- Создается новое окно, и в нем высвечивается файл
"имя". В том, что касается нового файла, команда
полностью аналогична команде <USE>;

<ARG><M-PORT>
- уничтожить окно, созданное последним.

Если один файл изображен сразу в нескольких окнах, изме-
нения в нем будут высвечиваться одновременно во всех окнах.

Для перехода из окна в окно служит команда:

<CH-PORT>
(по умолчанию `0')


Нескольких окон целесообразно использовать при сравнении
файлов, частичном копировании одного файла в другой, при
работе с файлами диагностик об ошибках и в ряде других слу-
чаев.




- 24 -



25


3.10. Использование макрокоманд

Последовательность команд редактора вместе с любым текс-
том, если их приходится часто повторять, может быть присво-
ена "переменной" редактора red. Для записи макроопределения
служит команда:

<ARG>d имя<RETURN>


(имя - одна буква). Редактор выдаст приглашение на ввод:

Mac:


Введенный в ответ текст и команды редактора запишутся в
переменную имя. Редактор отображает команды на экране в
виде пары символов, их кодировка приведена в приложении 2.
Признаком конца ввода является команда <EXIT> (клавиши
<LineFeed><Del>), для отмены ошибочных символов или команд
используется команда <B-SPACE> (клавиша <Del> или <Back-
Space>).

Для выполнения макрокоманды достаточно ввести:

<LineFeed>$имя


то есть последовательно нажать клавиши <LineFeed> (или
<ПС>), "$" и малую латинскую букву, которой именуется пере-
менная. Редактор подставляет содержимое переменной вместо
ввода с терминала. Выполнение макро прерывается, если при
выполнении записанной в макро операции поиска не найден
искомый текст. При необходимости можно переопределить
какую-либо функциональную клавишу терминала как вызов опре-
деленной макрокоманды.

3.11. Переопределение клавиатуры

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

<ARG>k<RETURN>


Редактор запрашивает:

Enter <new key>:

- 25 -



26


Нажмите переопределяемую клавишу и затем клавишу <Del>
(<Забой>).

Редактор запрашивает:

Enter <command> or <macro name>:


Введите команду, имя макропеременной (малую латинскую
букву) или признак макропеременной "$". Если введена команды
редактора, то при нажатии переопределяемой клавиши будет
вводиться эта команда. Если введено имя переменной, значе-
нием которой должна быть макрокоманда, то клавиша будет
вызывать эту макрокоманду. Если был введен символ "$", то
клавиша станет признаком макропеременной вместо комбинации
<Line Feed>$ (<Перевод Строки>$).

3.12. Выполнение команд-фильтров (команда <EXEC>)

Такие полезные операции над текстами, как сортировка,
выравнивание параграфов текста, структуризация текстов прог-
рамм на "Си" и другие, выполняются командами операционной
системы ДЕМОС. Редактор red позволяет использовать такие
команды для переработки части файла с помощью команды
<EXEC>. Например, для контекстной замены int на short в оче-
редных 10 строках файла служит команда:

<ARG>10l rpl "int" "short"<EXEC>


После этого в очередных 10 строках произойдет замена текста
int на short, которую выполнит команда ДЕМОС "rpl", на-
писанная специально для red. Можно вызывать любые команды,
которые могут использоваться как фильтр. Например:

cb - улучшение читаемости программы на Си,

sort - сортировка

Команда <EXEC> может выполняться в одном из следующих форма-
тов:

<ARG><ч.п> <команда> <с.п.><EXEC>
либо
<ARG>-<ч.c.><команда> <с.п.><EXEC>
либо
<ARG><ч.с.>l <команда> <с.п.><EXEC>
где <ч.п.> - число параграфов,
<ч.с.> - число строк,
<с.п.> - список параметров.

- 26 -



27


Причем <число строк> или <список параметров> могут отсутст-
вовать.

Первый (необязательный) аргумент формата определяет число
строк либо параграфов за текущей строкой в файле, которые
будут обрабатываться командой. Параграфы - это группы непус-
тых строк, разделенные одной или несколькими пустыми стро-
ками. Целое неотрицательное число указывает число парагра-
фов. если число отрицательно или за ним следует буква l -
оно указывает число строк. Если первый аргумент опущен, то
имеется в виду 1 параграф текста. Таким образом, -15 или 15l
задают 15 строк текста, а 2 - 2 параграфа.

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

Действие <EXEC> состоит в том, что вызывается указанная
команда операционной системы с указанными параметрами. На
стандартный ввод ей подаются заданные строки. Если команда
выполнилась нормально, то указанные строки в файле заменя-
ются на стандартный вывод команды. Старые строки помещаются
в CLOSE-буфер.

3.12.1. Контекстная замена (rpl)

Программа rpl вызывается командой <EXEC> и требует два
аргумента. Она заменяет в указанных строках все вхождения
первого аргумента на второй аргумент. Если какой-либо аргу-
мент содержит пробелы, он должен быть взят в кавычки. rpl
распознает регулярные выражения в первом аргументе по тем же
правилам, что и редактор ed в контексте поиска, с тем отли-
чием, что вместо символа . используется @ для обозначения
одного произвольного символа.

Например, команда:

<ARG>100l rpl "^ *" " "<EXEC>


исключит все группы пробелов в начале следующих 100 строк.
для обозначения самих символов $, &, @, ^, * перед ними
необходимо ставить \ (обратную черту).

3.12.2. Примеры использования команды <EXEC>

С помощью команды <EXEC> можно вставить в любое место
файла группу файлов, набрав:

<ARG>0 cat <список файлов><EXEC>

- 27 -



28


Если при вводе программ на языке Си в отдельных функциях
не оставлять пустых строк, а сами функции разделять пустыми
строками, то можно улучшить читаемость текста любой функции,
подведя курсор к ее началу и набрав:

<ARG>cb<EXEC>


3.12.3. Выход из редактора (<EXIT>)

Для того, чтобы окончить работу в red, записав все изме-
нения в архив, служит команда:

<EXIT>


По умолчанию это две клавиши: <LineFeed>,<Del>. Если нужно
выйти из редактора, не записывая изменения в архив, необхо-
димо набрать:

<ARG>a<EXIT>


где "a" - строчная латинская буква "a".

Команду <EXIT> можно ввести и так: <ARG>q<RETURN>, для
выхода без записи нужно набрать: <ARG>qa<RETURN>.

3.13. Прерывание выдачи. Аварийный выход из редактора

Операционная система интерпретирует символы CTRL/S,
CTRL/Q (приостановить передачу, продолжить передачу),
CTRL/N, CTRL/O (русский регистр, латинский регистр), а также
символ "прерывание" (interrupt) - CTRL/C. Одиночное нажатие
символа "прерывание" прерывает вывод на экран или операцию
контекстного поиска и переводит редактор в режим ввода пара-
метров. Двойное нажатие символа "прерывание" в случае, если
редактор не успел перейти в режим ввода параметров, приводит
к аварийному завершению работы без записи измененных файлов.
В режиме приема с клавиатуры символ "прерывание" интерпрети-
руется как команда <ARG>. В режиме повторения прерванного
сеанса нажатие символа "прерывание" прерывает повторение и





- 28 -



29


переводит редактор в режим ввода с терминала.

4. ДИАГНОСТИЧЕСКИЕ СООБЩЕНИЯ

Сообщения редактора высвечиваются в нижней строке экрана.
Они делятся на сообщения о режимах работы и сообщения об
ошибках. В зависимости от установленной версии редактора
диагностики выдаются на русском или английском языке. Ниже
будут приводиться оба варианта диагностики.

Сообщения о режимах работы

Ред:<имя>
use:<имя>
- идет чтение файла <имя>;

Зап:<имя>
save:<имя>
- идет запись файла <имя>;

+Поиск:<текст>
-Поиск:<текст>
+search:<текст>
-search:<текст>
- идет поиск текста <текст> вперед или назад;

Выполнение.
executing..
- идет выполнение внешней команды;

Режим вставки
insertmode
- установлен режим вставки;

Указание курсором
cursor defined
- идет указание участка текста для команд <PICK> или
<CLOSE>;

Создать(y/n)? имя
Create (y/n)? имя
- если вы действительно хотите создать новый файл
<имя>, то введите "y";

Строки указаны меткой
lines defined by tag
- предыдущей командой указана часть строк файла (от
курсора до запомненной в переменной метки), которая
будет передана очередной команде как параметр;

Прямоугольник указан меткой
square defined by tag
- предыдущей командой указана часть файла (от курсора


- 29 -



30


до запомненной в переменной метки), которая будет пере-
дана очередной команде как параметр;

Часть строки указана меткой
columns defined by tag
- предыдущей командой указана часть строки (от курсора
до метки, присвоенной переменной), которая будет пере-
дана очередной команде как параметр.

Сообщения об ошибках :

Аргумент должен быть числом
argument must be numeric
- аргумент команды должен быть числовым;

Аргумент должен быть положительным
argument must be positive
- аргумент должен быть положительным;

Буфер вставок пуст
nothing in the pick buffer
- введена команда <PUT>, но ни разу не выполнялась
команда <PICK>;

Close буфер пуст
nothing in the close buffer
- введена команда <ARG><PUT>, но ни разу не выполнялась
команда <CLOSE>;

А что искать?
nothing to search for
- не задан образ для контекстного поиска;

Текст не найден
search key not found
- образ для поиска не найден;

Здесь нельзя создать окно
can't put a window there
- при создании нового "окна" курсор должен быть в пер-
вой строке "окна" или на первой колонке;

Не могу создать столько
can't make any more ports
- превышено допустимое число "окон" (10);

Слишком много файлов
too many files...
- превышено максимально допустимое число файлов (10);

Вы не можете изменить этот файл
you can't modify this file
- файл нельзя изменять, так как запись в него


- 30 -



31


запрещена.

Имеется еще несколько редких диагностик, но они, как пра-
вило, самоочевидны.

5. ПОСТАНОВКА РЕДАКТОРА red. ПОДКЛЮЧЕНИЕ НОВЫХ ТИПОВ ТЕРМИ-
НАЛОВ

Редактор red ничего не знает о терминалах, на которых он
работает. Необходимую для работы информацию он получает от
операционной системы. Операционная система знает тип терми-
нала и устанавливает его в переменную TERM интерпретатора
SHELL или CSH.

Свойства терминалов описаны в файле /etc/termcap. Терми-
налы характеризуются набором функциональных возможностей,
кодами команд и способом выполнения различных операций.
Список терминалов, описание которых уже занесено в систему,
приведен в начале файла "/etc/termcap".

Элементы файла termcap состоят из символьных полей, раз-
деленных символом ":"(двоеточие). Первый элемент указывает
имена, под которыми терминал известен в системе. имена раз-
делены символом (вертикальная черта). Как правило, последнее
имя является полным названием терминала, а предыдущие имена
- его сокращениями, которые используются, в частности, в
файле /etc/ttytype. Подробную информацию можно найти в сле-
дующих разделах оперативной документации по ОС ДЕМОС:

environment (5),
tset (1)
ttys (5)
ttytype (5)
termcap (5)


Ниже повторяется описание формата описания терминалов
termcap.

5.1. Описание терминала в базе описаний терминалов

Описание каждого типа терминалов в файле /etc/termcap
состоит из ряда полей, разделенных символом ":". Если описа-
ние переносится на новую строку, то в конце предыдущей ста-
вится ":\", и новая строка начинается с символа ":".

Все характеристики имеют двухсимвольные коды.

Характеристика может иметь одну из трех форм записи:

:<имя>:
- характеристика описывает наличие или отсутствие
какой-либо возможности (логический тип);


- 31 -



32


:<имя>#<число>:
- это численная характеристика (например, размер
экрана);

:<имя>=<задержка><строка>:
- значением является строка символов, причем <задержка>
может отсутствовать.

В последнем случае за "=" следует необязательное число,
которое указывает длительность задержки при выполнении
команды в миллисекундах. затем следует строка символов в
закодированной форме. Элементы строки могут представляются в
одной из четырех форм:

1) \<символ> - обозначает один из следующих символов, не
представимых графически:

\r - код 015 (return);

\n - код 012 (line feed);

\t - код 011 (tab);

\b - код 010 (backspace);

\f - код 014;

2) \nnn,

где "nnn" -восьмеричные цифры - символ с кодом "nnn";

3) ^<буква> - управляющий символ CTRL+<буква>, например,
"^C" обозначает символ "003";

4) <любой символ>, кроме ":", "\", "^", обозначает сам