Для настройки на терминалы UNIX-овские программы используют файл termcap, в котором собраны описания всех (или почти всех) терминалов, существующих в природе. Выяснив, какой тип терминала подключен к машине (а задается это в переменной окружения TERM - например TERM=d460 или TERM=d211), UNIX-программа находит описание этого терминала в termcap и, настроившись по хранящейся там информации, может адекватно воспроизводить на нем информацию, подлежащую выводу.
INFORMIX имеет свой собственный файл с описаниями терминалов, его имя /usr/informix/etc/termcap , в нем поддерживается больше возможностей по сравнению со стандартным termcap UNIX'а. Зато многих терминалов, известных UNIX, в INFORMIXовом termcape не описано. Поэтому если на вашей машине стоят терминалы какой-то другой конструкции (т.е., практически любой терминал помимо d211, d460, vt220), вам придется описание делать самому.
Общий формат termcap-описания терминала можно описан в terminfo(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 знать необходимо, а какие необязательны.
Вот какие характеристики имеет смысл, и следует, задавать (А остальные, скорее всего, вообще необязательно указывать):
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:\
например, для vt100:
:up=\E[A:do=\E[B:nd=\E[C:le=\E[D:\
Например, для терминала d211-132:
:ti=^^FK:\ Включить 132 символьный экран
:te=^^FJ:\ Включить 80 символьный экран
Например, для терминала 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 | (есть или нет) |
Стек-машина понимает такие команды:
Условный оператор %? %t %e %; Вынимается значение из стека, и, в зависимости от его значения (0 / не0), выполняет соотв.
ветвь.
%? операция %t операция_когда_истинно %e операция_когда_ложно %;
%? операция %t операция_когда_истинно %;
Есть еще некоторое количество команд, но они нам не понадобятся. Остальные символы сразу пересылаются на терминал без изменений.
Разберем все на примере терминала vt220
В инструкции к терминалу написано, что указанные атрибуты на терминале устанавливаются следующими 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.