TERM(4)
НАЗВАНИЕ
term - формат скомпилированного файла описаний терминалов
СИНТАКСИС
/usr/lib/terminfo/?/*
ОПИСАНИЕ
Скомпилированные terminfo(4) описания помещаются в каталог /usr/lib/terminfo. Чтобы предотвратить последовательный поиск в огромном каталоге, используется двухуровневая схема: /usr/lib/terminfo/с/имя, где имя - это
имя терминала, а с - первый символ имени. Так, скомпилированное описание терминала att4425 находится в файле
/usr/lib/terminfo/a/att4425. Синонимы реализуются с помощью ссылок на один и тот же скомпилированный файл.
Формат скомпилированных файлов выбран так, чтобы он не
зависел от оборудования. Считается, что байт содержит 8
бит, но не делается никаких предположений о порядке
байт или размножении знака. Таким образом, двоичные
файлы terminfo(4) могут быть перенесены на любое оборудование, в котором байт содержит 8 бит.
Короткие целые числа записываются в двух восьмибитных
байтах. Первый байт содержит наименее значимые 8 бит
значения, второй содержит наиболее значимые 8 бит (то
есть значение равно 256*второй_байт+первый_байт). Значение -1 представляется в виде 0377,0377, значение -2 в виде 0376,0377, остальные отрицательные числа недопустимы. На компьютерах, на которых эти соглашения не
соответствуют оборудованию, необходимо читать целые
числа как 2 байта, а затем вычислять значение, обеспечивая таким образом переносимость скомпилированных файлов на разные типы компьютеров. Значение, равное -1,
обычно означает, что указанная характеристика у терминала отсутствует. Значение, равное -2, означает, что
характеристика отменена в исходном описании terminfo(4)
и считается отсутствующей.
Скомпилированный файл создается из исходных файлов описаний терминалов [см опцию -I в infocmp(1M)] с помощью
компилятора tic(1M). Чтение этого файла производится с
помощью процедуры setupterm [см. curses(3X)].
Скомпилированный файл делится на 6 секций: заголовок,
имена терминалов, флаги, числа, цепочки символов, таблица цепочек.
Секция заголовок находится в начале файла. В этой секции содержатся 6 коротких целых чисел:
- Магическое число (восьмеричное 0432).
- Размер (в байтах) секции имен.
- Размер (в байтах) секции флагов.
- Количество коротких целых в секции чисел.
- Количество коротких целых (смещений) в секции цепочек символов.
- Размер (в байтах) таблицы цепочек.
Следующей идет секция имен терминалов. В ней содержится
первая строка из описания terminfo(4), в которой перечисляются различные имена данного терминала, разделенные символами | [см. term(5)]. Эта секция завершается
нулевым байтом.
В секции флагов под каждый флаг отводится один байт.
Этот байт равен 0 или 1, в зависимости от того, присутствует соответствующая характеристика или отсутствует. Значение 2 означает, что соответствующая характеристика отменена. Характеристики перечисляются в том же
порядке, что и во включаемом файле <term.h>.
Между секцией флагов и секцией чисел при необходимости
вставляется нулевой байт, обеспечивающий выравнивание
начала секции чисел по границе полуслова. Все короткие
целые выравниваются по границе полуслова.
Секция чисел похожа на секцию флагов. Описание каждой
характеристики занимает 2 байта и представляется коротким целым числом. Значения -1 и -2 означают, что характеристика отсутствует.
Секция цепочек устроена аналогично. Описание каждой характеристики занимает 2 байта и представляется коротким
целым числом. Значения -1 и -2 означают, что характеристика отсутствует. В противном случае значение представляет собой смещение цепочки от начала таблицы цепочек. Специальные символы типа ^X или \c записываются во
внутреннем виде, а не в виде пары печатных символов.
Информация о заполнителях ($<nn>) и о параметрах (%x)
записывается в текстовом виде, без интерпретации.
Последней секцией является таблица цепочек. Она содержит все цепочки символов, на которые есть ссылки из
секции цепочек. Каждая цепочка завершается нулевым байтом.
Отметим, что процедура setupterm может быть рассчитана
на другой набор характеристик, чем тот, который реально
присутствует в файле. База данных может измениться после компиляции setupterm, из-за чего в ней могут появиться нераспознаваемые характеристики или наоборот,
setupterm может распознавать больше характеристик, чем
реально описано в базе данных. Для того, чтобы
setupterm могла работать во всех случаях, в заголовок
включены размеры других секций. Новые характеристики
должны добавляться после уже существующих.
В качестве примера ниже приводится восьмеричный дамп
описания терминала Data General Dasher D200:
d200|d100|data general dasher 200,
am, bw,
cols#80, lines#24,
bel=^G, clear=\f, cr=\r, cub1=^Y, cud1=^Z, cuf1=^X,
cup=^P%p2%c%p1%c, cuu1=^W, el=^K, home=\b, ind=\n,
kcub1=^Y, kcud1=^Z, kcuf1=^X, kcuu1=^W, kf0=^^z,
kf1=^^q, kf2=^^r, kf3=^^s, kf4=^^t, kf5=^^u, kf6=^^v,
kf7=^^w, kf8=^^x, kf9=^^y, khome=\b, lf0=f10, nel=\n,
rmso=^^E, rmul=^U, smso=^^D, smul=^T,
0000 032 001 " \0 033 \0 \r \0 ) 001 z \0 d 2 0 0
0020 | d 1 0 0 | d a t a g e n e r
0040 a l d a s h e r 2 0 0 \0 001 001
0060 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0100 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 P \0 377 377 030 \0
0120 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377
0140 377 377 377 377 377 377 " \0 & \0 377 377 377 377 $ \0
0160 < \0 377 377 377 377 377 377 . \0 * \0 > \0 377 377
0200 ( \0 377 377 377 377 , \0 377 377 : \0 377 377 377 377
0220 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377
0240 377 377 377 377 377 377 377 377 377 377 u \0 x \0 377 377
0260 377 377 377 377 377 377 377 377 377 377 p \0 s \0 377 377
0300 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377
0320 377 377 377 377 377 377 377 377 377 377 377 377 377 377 D \0
0340 377 377 377 377 377 377 J \0 M \0 377 377 P \0 S \0
0360 V \0 Y \0 \ \0 _ \0 b \0 e \0 h \0 377 377
0400 377 377 B \0 377 377 377 377 377 377 F \0 377 377 377 377
0420 377 377 H \0 377 377 377 377 j \0 377 377 377 377 377 377
0440 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377
0460 377 377 n \0 377 377 377 377 377 377 377 377 377 377 377 377
0500 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377
*
0540 377 377 377 377 377 377 @ \0 377 377 377 377 377 377 377 377
0560 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377
*
1260 377 377 377 377 377 377 d 2 0 0 | d 1 0 0 |
1300 d a t a g e n e r a l d a s
1320 h e r 2 0 0 \0 007 \0 \f \0 \r \0 031 \0
1340 032 \0 030 \0 020 % p 2 % c % p 1 % c \0
1360 027 \0 013 \0 \b \0 \n \0 031 \0 032 \0 030 \0 027 \0
1400 036 z \0 036 q \0 036 r \0 036 s \0 036 t \0 036
1420 u \0 036 v \0 036 w \0 036 x \0 036 y \0 \b \0
1440 f 1 0 \0 \n \0 036 E \0 025 \0 036 D \0 024 \0
1460
ФАЙЛЫ
/usr/lib/terminfo/?/* Скомпилированная база данных описаний терминалов.
/usr/unclude/term.h Включаемый файл описаний для terminfo(4).
СМ. ТАКЖЕ
curses(3X), terminfo(4), term(5).
infocmp(1M) в Справочнике администратора.
ОГРАНИЧЕНИЯ
Общий размер скомпилированного описания каждого терминала не должен превышать 4096 байт; размер секции имен
терминалов не должен превышать 128 байт.