КАК СОЗДАТЬ TERMCAP ОПИСАНИЕ ТЕРМИНАЛА
КАК СОЗДАТЬ 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.
[Назад] [Содержание] [Вперед]
|