TERM(4) 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 коротких целых чисел: 1. Магическое число (восьмеричное 0432). 2. Размер (в байтах) секции имен. 3. Размер (в байтах) секции флагов. 4. Количество коротких целых в секции чисел. 5. Количество коротких целых (смещений) в секции це- почек символов. 6. Размер (в байтах) таблицы цепочек. Следующей идет секция имен терминалов. В ней содержится первая строка из описания terminfo(4), в которой пере- числяются различные имена данного терминала, разделен- ные символами | [см. term(5)]. Эта секция завершается нулевым байтом. В секции флагов под каждый флаг отводится один байт. Этот байт равен 0 или 1, в зависимости от того, при- сутствует соответствующая характеристика или отсутству ет. Значение 2 означает, что соответствующая характе- ристика отменена. Характеристики перечисляются в том же порядке, что и во включаемом файле . Между секцией флагов и секцией чисел при необходимости вставляется нулевой байт, обеспечивающий выравнивание начала секции чисел по границе полуслова. Все короткие целые выравниваются по границе полуслова. Секция чисел похожа на секцию флагов. Описание каждой характеристики занимает 2 байта и представляется корот ким целым числом. Значения -1 и -2 означают, что харак- теристика отсутствует. Секция цепочек устроена аналогично. Описание каждой ха- рактеристики занимает 2 байта и представляется коротким целым числом. Значения -1 и -2 означают, что характ ристика отсутствует. В противном случае значение предс тавляет собой смещение цепочки от начала таблицы цепо- чек. Специальные символы типа ^X или \c записываются во внутреннем виде, а не в виде пары печатных символов. Информация о заполнителях ($) и о параметрах (%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 |1340 032 \0 030 \0 020 % p 2 % c % p 1 % c |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 байт.