Страница:
`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) <любой символ>, кроме ":", "\", "^", обозначает сам
- 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) <любой символ>, кроме ":", "\", "^", обозначает сам