КАК СОЗДАТЬ TERMCAP ОПИСАНИЕ ТЕРМИНАЛА
Для настройки на терминалы 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"), его так же легко
уразуметь, рассматривая описания других терминалов, и я не
стану особо подробно на нем останавливаться.
См. также
За основу надо взять описание терминала из базы 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 знать необходимо, а какие необязательны.
Вот какие характеристики имеет смысл, и следует, задавать (А
остальные, скорее всего, вообще необязательно указывать):
нажать.
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:\
(использует стек-машину терминала),
например :cm=\E[%i%d;%dH:\ для vt220
:cm=^P%r%.%.:\ для d211
например, для vt100:
:up=\E[A:do=\E[B:nd=\E[C:le=\E[D:\
Например, для терминала d211-132:
:ti=^^FK:\ Включить 132 символьный экран
:te=^^FJ:\ Включить 80 символьный экран
нужно перечислить символы ASCII, которые, будучи
выведены в режиме псевдографики, нарисуют "уголки"
Например, для терминала 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 операция_когда_истинно %;
Есть еще некоторое количество команд, но они нам не понадобятся.
Остальные символы сразу пересылаются на терминал без изменений.