>.  Выбранный текст попадает в конец
псевдо-файла "#" и может быть просмотрен  (<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)   <любой символ>, кроме ":",  "\",  "^",  обозначает  сам
     себя.
Символ "пусто" кодируется как \200.
       Таблица 1. Основные характеристики терминалов
        --------------------------------------------
        | n имя тип обя- только   значение         |
        |   хар     зат. для red  характеристики   |
        |------------------------------------------|
        | 1 co  чис   +  - число колонок в строке  |
        |   li  чис   +  - число строк на экране   |
        |------------------------------------------|
                           - 32 -
                             33
                                          Продолжение таб. 1
        --------------------------------------------
        | n имя тип обя- только   значение         |
        |   хар     зат. для red  характеристики   |
        |------------------------------------------|
        | 2 am  лог   -  - терминал имеет автома-  |
        |                  тический перевод строк  |
        |------------------------------------------|
        | 3 bs  лог   -  - код 010 вызывает возврат|
        |                  на 1 позицию назад      |
        |   rt  стр   -  - возврат на начало строки|
        |   bc  стр   -  - код "курсор назад",     |
        |                  если не 010             |
        |   cm  стр   -  - адресация курсора *     |
        |   cl  стр   +  - очистка экрана          |
        |   do  стр   *  - курсор вниз             |
        |   up  стр   *  - курсор вверх            |
        |   nd  стр   *  - курсор вправо           |
        |   ho  стр   *  - курсор в начало экрана  |
        |------------------------------------------|
        | 3 is  стр   -  - инициализация терминала |
        |   fs  стр   -  + конец работы в редакторе|
        |                  возврат в начальное     |
        |                  состояние               |
        |   cu  стр   -  + код "светлый квадрат"   |
        |                  (как правило, \177.)    |
        |   nb  лог   -  + нет звукового сигнала   |
        |------------------------------------------|
        | 4 UC  лог   -  - терминал имеет только   |
        |                  прописные буквы         |
        |   LC  лог   -  - терминал имеет прописные|
        |                  строчные буквы          |
        |   CY  лог   -  + терминал имеет русские и|
        |                  латинские  буквы        |
        |------------------------------------------|
        | 5 al  стр   -  - вставка пустой строки   |
        |   dl  стр   -  - исключение строки       |
        |   ic  стр   -  - вставить символ         |
        |   dc  стр   -  - исключить символ        |
        |   cd  стр   -  - очистить экран от курсор|
        |                  до конца                |
        |   ce  стр   -  - очистка конца строки    |
        |   sr  стр   -  - прокрутить текст вниз   |
        |   sf  стр   -  - прокрутить текст вверх  |
        |   ns  лог   -  - нет сдвижки текста      |
        |                  (нет roll)              |
        |   cs  стр   -  - изменение области про-  |
        |                  крутки текста*          |
        |------------------------------------------|
                           - 33 -
                             34
                                          Продолжение таб. 1
        --------------------------------------------
        | n имя тип обя- только   значение         |
        |   хар     зат. для red  характеристики   |
        |------------------------------------------|
        | 6 kd  стр   +  - код клавиши стрелка вниз|
        |   ku  стр   +  -  -- // -- стрелка вверх |
        |   kl  стр   +  -  -- // -- стрелка влево |
        |   kr  стр   +  -  -- // -- стрелка вправо|
        |   kh  стр   +  -  -- // -- "home"        |
        |------------------------------------------|
        | 7                 коды клавиш, используе-|
        |                   мых для выполнения     |
        |                   команд редактора:      |
        |   kN        -  -  команда <-PAGE>        |
        |   kP        -  -  команда <+PAGE>        |
        |   kB        -  -  команда <B-TAB>        |
        |   kF        -  -  команда <+LINE>        |
        |   kR        -  -  команда <-LINE>        |
        |------------------------------------------|
        | 8                 Коды, вырабатываемые   |
        |                   функциональными клави- |
        |                   шами PF1 - PF5         |
        |                   Трактуются они так:    |
        |   k1  стр   -  -  команда <ARG>          |
        |   k2  стр   -  -  команда <OPEN>         |
        |   k3  стр   -  -  команда <CLOSE>        |
        |   k4  стр   -  -  команда <INSERT>       |
        |   k5  стр   -  -  команда <DCHAR>        |
        |------------------------------------------|
        | 9 f.  стр   -  +  Коды, вырабатываемые   |
        |   f-  стр   -  +  дополнительной функцио-|
        |   f0  стр   -  +  нальной клавиатурой.   |
        |   f1                                     |
        |   ..  ...   .  .                         |
        |   f9  стр   -  +                         |
        |------------------------------------------|
        |10 tc=<имя>    означает, что остальные ха-|
        |               рактеристики   совпадают  с|
        |               характеристиками терминала |
        |               <имя>                      |
        |   <имя>@      отмена характеристики      |
        |               <имя>                      |
        |   hR   стр  -  +   Имя файла с кратким   |
        |                    описанием команд      |
        |                   (выдается пользователю)|
        |------------------------------------------|
                           - 34 -
                             35
                                          Продолжение таб. 1
        --------------------------------------------
        | n имя тип обя- только   значение         |
        |   хар     зат. для red  характеристики   |
        |------------------------------------------|
        |11 Gs   стр  -  +  Включение псевдографи- |
        |                   ческого набора символов|
        |   Ge   стр  -  +  Выключение псевдографи-|
        |                   ки                     |
        |   Gt   стр  -  +  Набор символов псевдо- |
        |                   графики                |
        --------------------------------------------
   В таблице 1 приведены основные характеристики, используе-
мые редактором red.  Полное описание возможных характеристик
имеется в документации по операционной системе.
   Характеристики разбиты на 11 групп.
Группа 1.
     Описывает размеры экрана терминала;
Группа 2.
     Описывает способ управления курсором на  экране.  Самый
     сложный  элемент  группы  - характеристика "cm". Если у
     терминала нет возможности прямой адресации  курсора  на
     экране,  то  для  работы red необходимы характеристики,
     помеченные символом "*" в графе "обязательный", в  про-
     тивном случае редактор может обойтись и без них. Харак-
     теристика  "am"  означает,  что  при  достижении  конца
     строки курсор автоматически переходит на начало следую-
     щей строки;
Группа 3.
     Описывает инициализацию дисплея  и  дополнительные  его
     характеристики.   "cu" - это код символа, используемого
     редактором для маркировки положения курсора  в  "окне".
     если он не указан, используется символ "@".  Рекоменду-
     ется указывать "cu=\177", если  только  терминал  умеет
     отображать этот код как светлый квадрат;
Группа 4.
     Возможности терминала  по  отображению  символов.  если
     "UC", то терминал должен работать в режиме "lcase"; Эти
     характеристики использует система, а не  редактор,  для
     установки флагов терминала.
Группа 5.
     Дополнительные  редактирующие  возможности   терминала;
     характеристика   "cs"   аналогична  "cm"  по  работе  с
                           - 35 -
                             36
     параметрами - номерами верхней и нижней строки  области
     сдвига текста.
Группа 6.
     Коды, вырабатываемые основными управляющими клавишами;
Группа 7.
     Коды, вырабатываемые функциональными клавишами, которые
     предполагается  использовать в соответствии с указанной
     трактовкой.
Группа 8.
     Коды, вырабатываемые функциональными  клавишами  PF1  -
     PF5 или клавишами, их заменяющими.
Группа 9.
     Коды, вырабатываемые дополнительной функциональной кла-
     виатурой с надписями "0"-"9", "-", ".".
Группа 10.
     Позволяет описывать один терминал  через  другой,  если
     они похожи.  например:
               vt340:cm@:UC:KI:LC@:nb:tc=vdt52100c
Группа 11
     Описывает работу с псевдографическими символами,  кото-
     рые используются для рисования рамок. Gs включает режим
     вывода псевдографических символов,  Ge  его  выключает.
     Строка  Gt описывает кодирование псевдографических сим-
     волов в  режиме  псевдографики:  каждый  символ  строки
     соответствует  одному символу псевдографики в следующем
     порядке:
          - горизонтальная черта;
          - большой закрашенный квадрат;
          - вертикальная черта;
          - левый нижний угол;
          - нижнее "T";
          - правый нижний угол;
          - левое "T";
          - пересечение двух линий;
          - правое "T";
          - верхний левый угол;
          - верхнее "T";
          - верхний правый угол;
          - стрелка вниз;
          - стрелка вверх;
          - стрелка влево;
          - стрелка вправо;
     если в  строке  задано  меньше  символов,  не  заданные
                           - 36 -
                             37
     символы  заменяются  на соответствующие им обычные сим-
     волы КОИ-8.
5.2.  Адресация курсора.
   Способ адресации курсора для данного  терминала  описыва-
ется  характеристикой  "cm"  строчного типа. Кроме символов,
которые просто передаются на терминал, в строке могут встре-
чаться  специальные  последовательности вида %X, которые при
выводе заменяются на номер колонки или номер строки по  пра-
вилам, определяемым символом X (аналогично работает формат в
printf).  Если рассматривать строку "cm" как формат  вывода,
то  параметрами функции вывода являются номер строки и пози-
ции,  на которые должен быть установлен  курсор.  Коды  типа
"%" имеют следующий смысл:
%d   - то же,  что и для программы "printf",  причем нумера-
       ция колонок и столбцов начинается с 0;
%2   - эквивалентно %2d;
%3   - эквивалентно %3d;
%.   - эквивалентно %c;
%+x  - сложить код символа "x" с  соответствующим  значением
       (номером  строки  или  колонки),   затем выдать ее по
       "%.";
%r   - обратный порядок номеров строки и позиции.  вывод  не
       производится;
%i   - номера строки и колонки отсчитывать с 1 (вместо 0);
%%   - дает один символ "%".
   Например,  для терминала  "VDT-52100"  адресация  курсора
описывается следующей строкой:
                         cm=3^a%.%.
   Терминалы, которые используют  коды  вида  "%.",   должны
иметь  характеристики  "bs" (или "bc") и "up", то есть иметь
возможность перемещать курсор назад на 1 позицию и вверх  на
одну  строку.   Это  необходимо,  так как редактор не выдает
при адресации курсора символы \t, \n, ^D и \r: система может
изменить или уничтожить эти символы.
   В данном разделе очень кратко были изложены правила  опи-
сания  терминала  в файле /etc/termcap. Обычно при появлении
нового  терминала  бывает  целесообразно  для  его  описания
использовать  описание  какого-либо  другого  терминала либо
                           - 37 -
                             38
использовать краткое описание с параметром "tc=...".  Однако
скорее  всего все ваши терминалы уже имеются в /etc/termcap,
что избавит от необходимости разбираться в не очень  простых
правилах описания терминалов.
                           - 38 -
                             39
ПРИЛОЖЕНИЕ 1. Справочная информация по red
   Редактор red предназначен для редактирования и  просмотра
файлов  в  экранном  режиме.   Он позволяет просматривать на
экране терминала один или  несколько  файлов,  редактировать
файлы с использованием управляющих клавиш терминала и команд
редактора, переносить информацию из файла в файл и проводить
другие операции редактирования.
   Редактор вызывается с помощью команды red в одном из сле-
дующих форматов:
red [-ключи] имя_файла [номер_строки]
     Начать редактирование файла "имя_файла", установив окно
     на  строку номер_строки; если номер не указан, высвечи-
     вается начало файла.
red [-ключи]
     Продолжить редактирование с того состояния,  в  котором
     был  завершен  предыдущий сеанс работы с данного терми-
     нала.
red [-ключи] -
     Повторить сеанс редактирования файлов после  сбоя  сис-
     темы или редактора.
red [-ключи] -r файл_протокол
     Повторить сеанс редактирования, считав протокол из ука-
     занного файла.
   Ввод команд осуществляется с помощью функциональных  кла-
виш  терминала.  На большинстве терминалов для этого исполь-
зуется  дополнительная  цифровая  клавиатура,  расположенная
справа  для  основной.  Особое  значение  имеет клавиша `2',
которая изменяет значение следующей клавиши.  Если  дополни-
тельная  цифровая клавиатура отсутствует или не имеет режима
генерации управляющих кодов, используется  клавиша  <перевод
строки>    (<LineFeed>),    например   вместо   `1'   вводят
<LineFeed>`1', а вместо `2'`4' - <LineFeed><LineFeed>`4'.
Краткое описание команд
   В описании приведены: краткое  название  команды,  полное
название  команды,  ввод с клавиатуры (через "," перечислены
возможные варианты ввода, запись ^C означает CTRL+C):
<ARG> - ВВОД АРГУМЕНТА: `1', <LineFeed><Пробел>
     Начало ввода аргумента. Аргументом  может  быть  строка
     символов  или  указание  области  на  экране  терминала
     (область определяется начальным и конечным  положениями
     курсора  и  представляет  собой  либо  прямоугольник на
     экране, если начальная и конечная колонки не совпадают,
     либо несколько строк, если начальная и конечная колонки
                           - 39 -
                             40
     совпадают).  Ввод аргумента завершается вводом команды,
     к которой этот аргумент относится.
<TAB> - ТАБУЛЯЦИЯ: <TAB>
<B-TAB> - ТАБУЛЯЦИЯ НАЗАД: `.', ^B
     передвинуть курсор на  следующую  (предыдущую)  позицию
     табуляции.
<GOTO> - ПЕРЕЙТИ НА: `4'
     Без аргумента - переход на начало  файла.   Аргумент  -
     номер строки; пустой аргумент - конец файла.
<LEFT> - СДВИГ ВЛЕВО: `2'<курсор влево>
<RIGHT> - СДВИГ ВПРАВО: `2'<курсор вправо>
     Сдвиг экрана влево/вправо.
<+PAGE> - ЛИСТ ВПЕРЕД:  `7', <NextScr>
<-PAGE> - ЛИСТ НАЗАД:   `2'`7', <PrevScr>
     Возможный аргумент - число страниц,  на  которые  экран
     перемещается по текущему файлу.
<+LINE> - СТРОКА ВПЕРЕД: <Forward>, ^T
<-LINE> - СТРОКА НАЗАД:  <Backward>, ^W
     Аргумент - число строк; пустой аргумент - вывести теку-
     щую строку в верхнюю (нижнюю) строку окна (перемещением
     окна по файлу).  Клавиши <Forward> и  <Backward>  (над-
     писи  могут  быть и иными) обозначены в описании терми-
     нала в системе как "kF" и "kR".
<+SEARCH> - ПОИСК ВПЕРЕД: `3', ^R
<-SEARCH> - ПОИСК НАЗАД: `2'`3', ^E
     Аргумент - текст, который нужно найти в файле.
<INSERT> - РЕЖИМ ВСТАВКИ: `5', <PF4>
     Включает/выключает режим вставки;
<D-CHAR> - ИСКЛЮЧИТЬ СИМВОЛ: `6', ^U
<TRUNC> - ИСКЛЮЧИТЬ КОНЕЦ СТРОКИ: `1'`6'
<OPEN>  - РАЗДВИНУТЬ: `8',  <PF2>
     Вставить пустую строку; аргумент  -  число  строк  либо
     область на экране, в которую нужно вставить пробелы.
<CLOSE> - УБРАТЬ: `2'`8', <PF3>
     Убрать строки либо область на экране.  Убранная  инфор-
     мация попадает в буфер убранных строк.
<GET> - ВЗЯТЬ: `9', ^F
     Запомнить строки либо область на экране.
<PUT> - ПОЛОЖИТЬ: `2'`9', ^G
     Взятая ранее информация помещается в текущее  место  на
                           - 40 -
                             41
     экране.   Команда  с  пустым  аргументом  используется,
     чтобы вставить информацию из буфера убранных строк.
<SPLIT> - РАЗРЕЗАТЬ СТРОКУ НА ДВЕ
     Отрабатывается по команде <OPEN> с  пустым  аргументом.
     (`1'<PF2>).
<JOIN> - СКЛЕИТЬ СТРОКИ
     Отрабатывается по команде <CLOSE> с пустым  аргументом.
     (`1'<PF3>).
<SAVE> - ЗАПИСЬ: `2' `-', ^V
     Аргумент - имя файла (если не совпадает со старым).
<USE> - РЕДАКТИРОВАТЬ: `-', ^D
     Команда без аргумента переходит к альтернативному файлу
     (по умолчанию - файл подсказок).
<M-PORT> - СОЗДАТЬ ОКНО: `2'`4'
     Аргумент - имя файла,  который  будет  высвечиваться  в
     новом  окне.   Курсор  должен быть либо в крайней левой
     позиции экрана либо на верхней строке экрана.   Команда
     с  пустым  аргументом выполняет отмену последнего заве-
     денного окна.
<CH-PORT> - СМЕНИТЬ ОКНО: `0'
     сменить текущее  окно  (если  открыто  более  чем  одно
     окно).
<EXEC> - ВЫПОЛНИТЬ: `2'`0', ^P
     Аргумент: "[число[l] ] команда [аргументы]".  "команда"
     выполняется  как фильтр над текстом в очередных "число"
     абзацах (если  указана  буква  l,  то  строках)  файла.
     Абзац  - группа непустых строк файла, разделенная одной
     или несколькими пустыми строками.
<EXIT> - ВЫХОД: <Перевод строки><Забой>
     Аргумент  "a"  блокирует  запись   измененных   файлов.
     Команда  может  также  вводиться  как <АРГ>q[a]<Возврат
     каретки>.
 - Запомнить в переменную: <АРГ>>И<Команда>
     Где И - имя макропеременной (одна буква),  <Команда>  -
     либо  <Возврат  каретки>  (тогда  запоминается  текущее
     место  в  файле),  либо   <GET>   (запоминается   буфер
     вставки),  либо  <CLOSE>  (запоминается  буфер убранных
     строк).  Макро  затем  можно  использовать  в  командах
     <GOTO>,  <PUT>,  а также в командах, аргументом которых
     может быть область на экране (в  этом  случае  вводится
     область  от  текущего  положения курсора до запомненной
     метки), указав в качестве аргумента "$И".
                           - 41 -
                             42
 - ВВОД МАКРО: <АРГ>d И<ВК>
     Концом ввода служит команда <ВЫХОД>.
 - ВЫПОЛНЕНИЕ МАКРО: <ПС>$И
 - ПЕРЕОПРЕДЕЛЕНИЕ КЛАВИШИ: <АРГ>k<ВК>
     При этом,  если  в  ответ  на  запрос  переопределяемой
     команды  введено  имя  макро  (одна буква), при нажатии
     этой клавиши выполняется данное макро.
<ESCAPE> - ПРИЗНАК НЕТЕКСТОВОГО СИМВОЛА: `2'`0', ^A
     По этой команде вводится специальный символ и следующий
     управляющий  символ  вводится  в  файл, а не трактуется
     редактором как команда.
   Далее приведена кодировка команд для наиболее распростра-
ненных  терминалов.   Если на вашем терминале обозначения на
управляющей клавиатуре не совпадают с ними, необходимо уточ-
нить кодирование команд редактора у системных программистов.
На схемах клавиатуры сверху написано название команды, кото-
рая  исполняется по данной клавише.  Посередине - надпись на
клавише.  Снизу написано название команды, которая  исполня-
ется, если предварительно нажать клавишу `2'.
____________________________________________________________
          Команды для Электроника-15-ИЭ-0013
 управляющая клавиатура         цифровая клавиатура
 -------