НЕИЗВЕСТНОГО INFORMIX


Для  настройки  на  терминалы  UNIX-овские программы используют
файл termcap,  в котором собраны описания всех (или почти всех)
терминалов,   существующих   в  природе.   Выяснив,  какой  тип
терминала подключен к  машине  (а  задается  это  в  переменной
окружения   TERM   -   например   TERM=d460   или   TERM=d211),
UNIX-программа находит описание этого терминала  в  termcap  и,
настроившись  по  хранящейся  там  информации,  может адекватно
воспроизводить на нем информацию, подлежащую выводу.

INFORMIX имеет свой собственный файл с  описаниями  терминалов,
его имя /usr/informix/etc/termcap , в нем поддерживается больше
возможностей  по  сравнению со стандартным termcap UNIX'а. Зато
многих терминалов, известных UNIX, в INFORMIXовом  termcape  не
описано.  Поэтому если на вашей машине стоят терминалы какой-то
другой конструкции (т.е.,  практически  любой  терминал  помимо
d211, d460, vt220), вам придется описание делать самому.

Общий  формат termcap-описания терминала можно описан в termin-
fo(4) ("Справочнике администратора UNIX V"), его так  же  легко
уразуметь,  рассматривая  описания  других  терминалов,  и я не
стану особо подробно на нем останавливаться.



Формат базы терминалов termcap/terminfo

За основу надо взять описание терминала из базы terminfo UNIXа,
отредактировать,    исправить и отладить его, и вставить в файл
/usr/informix/etc/termcap

Поместить полное описание терминала vt220 в формате terminfo по
одной характеристике в строке в файл vt220 :
---------------------------------------------------------------
infocmp -r1 vt220 > vt220
---------------------------------------------------------------

Поместить исправленное описание терминала vt220 в  базу  данных
terminfo
---------------------------------------------------------------
tic vt220
---------------------------------------------------------------

Поместить  полное описание терминала vt220 в формате termcap по
одной характеристике в строке в файл tmp :
---------------------------------------------------------------
infocmp -Cr1 vt220 > tmp
---------------------------------------------------------------

Поместить исправленное описание терминала vt220 в базу termcap
---------------------------------------------------------------
Самостоятельно,  ручками, с помощью любого текстового редактора
заменяем старое описание на новое в файле /etc/termcap или/и
/usr/informix/etc/termcap
---------------------------------------------------------------

Сделать описание формата terminfo из описания формата termcap
---------------------------------------------------------------
captoinfo vt220.cap > vt220
---------------------------------------------------------------

В результате некоторого количества экспериментов я выяснил, ка-
кие команды для INFORMIX знать необходимо, а какие необязатель-
ны.

Вот  какие  характеристики  имеет смысл, и следует, задавать (А
остальные, скорее всего, вообще необязательно указывать):



        :am:\     в терминале есть автоматические границы
        :bw:\     можно переводить курсор из колонки 0 в последнюю
        :mi:\     можно без опасений перемещаться в режиме вставки
        :ms:\     можно без опасений перемещаться в режиме сообщений
        :xo:\     терминал использует протокол xon/xoff


              если на нее нажать.

termcap         |
характеристика  |  клавиша
----------------+------------------------------------------
k0 ... k9          F1 ... F10
kA ... kK          F11 .. F20

ki                 ключ вставить строку
kj                 ключ уничтожить строку
kf                 ключ на следующую страницу
kg                 ключ на предыдущую страницу

ku                 стрелка вверх
kd                 стрелка вниз
kr                 стрелка вправо
kl                 стрелка влево

        например, для xterm:
 :ku=\E[A:kd=\E[B:kr=\E[C:kl=\E[D:\



vi      сделать курсор невидимым
ve      сделать курсор нормальным
vs      сделать курсор ярким

cm      позиционировать курсор #стр #столб
        (использует стек-машину терминала),
 например        :cm=\E[%i%d;%dH:\      для vt220
                 :cm=^P%r%.%.:\         для d211

bc      шаг назад
le      курсор влево
do      курсор вниз
nd      курсор вправо
up      курсор вверх

ho      в начало экрана
cr      вернуть каретку
nl      перейти на новую строку
nw      возврат каретки и переход к новой строке

        например, для vt100:
 :up=\E[A:do=\E[B:nd=\E[C:le=\E[D:\



cl      очистить экран
ic      вставить символ
dc      удалить символ
bl      звонок



ti      включить терминал в штатный режим работы.
te      "восстановить" первобытное состояние
 Например, для терминала d211-132:
        :ti=^^FK:\      Включить 132 символьный экран
        :te=^^FJ:\      Включить 80 символьный экран



as             перейти к дополнительному алфавиту
ae             вернуться из дополнительного алфавита
ac             пары символов из графического алфавита
mr             в режим REVERSE
me             выключить все атрибуты



        нужно перечислить символы ASCII, которые, будучи
        выведены в режиме псевдографики, нарисуют "уголки"
gb      символы рисования рамки     pqbd-|
gs      в режим псевдографики.
ge      конец режима псевдографики.
 Например, для терминала d460:
        :gb=1324;\::\
        :gs=^^FS11:ge=^^FS00:\



Если  характеристики  ZA не задано, то терминал будет поддержи-
вать только два цвета: REVERSE и NORMAL. (В termcap UNIX'а есть
аналогичная характеристика sa.)

Характеристика ZA использует стек_машину терминала и параметры.
Устроено все примерно так:

У терминала есть, так называемая, стек_машина:
Это несколько переменных, несколько статических переменных, во-
семь параметров от p1 до p8, и стек.
Имеется набор операций, которыми можно манипулировать с  данны-
ми,  лежащими в переменных и в параметрах, производить над ними
в стеке логические и арифметические операции  и  пересылать  на
терминал.

Когда  INFORMIXу нужно поменять атрибуты  вывода, он устанавли-
вает в параметрах p1 - p4 нужные значения, а  дальше  применяет
команду  терминала, записанную в ZA. В итоге на терминал уходит
ESC-последовательность, включающая  на  нем  заданные  атрибуты
(цвета).

параметр | значение  |  задает атрибут(на монохроме) или цвет
---------+-----------+---------------------------------------
p1        от 0 до 7       определяет цвет  (от WHITE до BLACK)
-------------------------------------------------------------
p1   0              NORMAL               WHITE
p1   1              BOLD                 CYAN
p1   2              BOLD                 YELLOW
p1   3              BOLD                 MAGENTA
p1   4              DIM                  RED
p1   5              DIM                  GREEN
p1   6              DIM                  BLUE
p1   7              INVISIBLE            BLACK

p2  1 или 0         атрибут REVERSE     (есть или нет)
p3  1 или 0         атрибут DIM         (есть или нет)
p4  1 или 0         атрибут UNDERLINE   (есть или нет)

Стек-машина понимает такие команды:

%pi     параметр i в стек      где i=1,2,...,8
%{n}    число n в стек
%c      вершину стека на терминал в формате %c (1 байт)
%d      вершину стека на терминал в формате %d (целое число)

Условный  оператор %? %t %e %; Вынимается значение из стека, и,
в зависимости от его  значения  (0  /  не0),  выполняет  соотв.
ветвь.
%? операция %t операция_когда_истинно %e операция_когда_ложно %;
%? операция %t операция_когда_истинно %;

Есть еще некоторое количество команд, но они нам не понадобятся.
Остальные символы сразу пересылаются на терминал без изменений.



В инструкции к терминалу написано, что  указанные  атрибуты  на
терминале устанавливаются следующими ESC-последовательностями:

\E[0m           сбросить все атрибуты.      (если p1=0)
\E[0;1m         установить BOLD             (если p1>0)
\E[0;7m         установить REVERSE          (если p2=1)
\E[0;5m         установить BLINK            (если p3=1)
\E[0;4m         установить UNDERLINE        (если p4=1)

        Итак:
ZA=\E[0 # посылаем начало последовательности \E[0 - сброс  всех
        #  атрибутов.
 %?%p1          # если p1 не равен 0
   %t;1%;         # то вывести на терминал символы ;1
 %?%p2%t;7%;    # если p2 равен 1 то вывести на терминал ;7
 %?%p3%t;5%;    # если p3 равен 1 то вывести на терминал ;5
 %?%p4%t;4%;    # если p4 равен 1 то вывести на терминал ;4
 m             # вывести символ m

Объединяем  все  вместе  и получаем ZA характеристику терминала
vt220

        :ZA=\E[0%?%p1%t;1%;%?%p2%t;7%;%?%p3%t;5%;%?%p4%t;4%;m:

Как видите, эта характеристика ZA не обеспечит нам никаких цве-
тов. Любители красивого могут  самостоятельно  поупражняться  с
разборкой и обработкой всех возможных значений параметра p1.

Популярность: 30, Last-modified: Tue, 25 Nov 1997 06:58:06 GMT