КАК СОЗДАТЬ 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 знать необходимо, а какие необязательны.

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

  1. Символьные termcap характеристики.
  2. Ключи. Т.е. коды, которые посылаются клавишей, если на нее нажать.
    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:\

  3. Коды управления курсором

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

  4. Коды управления экраном
  5. Инициализация терминала.

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

  6. Управление атрибутами.
  7. Символы рисования рамочек.

    Например, для терминала d460:
    :gb=1324;\::\
    :gs=^^FS11:ge=^^FS00:\

  8. Управление цветами 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 (есть или нет)

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

    Условный оператор %? %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.

[Назад] [Содержание] [Вперед]


Copyright © CIT