КАК СОЗДАТЬ 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"), его так же легко
уразуметь, рассматривая описания других терминалов, и я не
стану особо подробно на нем останавливаться.
См. также Формат базы терминалов 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 характеристики.
- :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.
Если характеристики 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 операция_когда_истинно %;
Есть еще некоторое количество команд, но они нам не понадобятся.
Остальные символы сразу пересылаются на терминал без изменений.
Разберем все на примере терминала 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.
[Назад]
[Содержание]
[Вперед]