TERM(5)

名称
term - コンパイル済みの term ファイルの形式

書式
term

解説

コンパイル済みの terminfo 属性記述はディレクトリ /usr/lib/terminfo の下にあります。 UNIX システムの巨大なディレクトリを線形探索するのを避けるため、 /c/name という形の 2 階層の命名規則が用いられます。 (ここで、 name は端末の名前で、 c は name の最初の文字です。) ですから、 act4 は、 /usr/lib/terminfo/a/act4 というファイル名で見つけることができます。 同じ端末を示す同義な名前は、同じコンパイル済みファイルへの複数の リンクとして実装されています。

この形式は、全てのハードウェアで同じになるように選ばれています。 1 バイトが 8 ビット以上であることは仮定していますが、バイトオーダや 符合拡張の方式については仮定していません。

コンパイル済みのファイルは tic プログラムにより生成され、 setupterm ルーチンにより読み取られます。 これらのソフトウェア部品は ncurses(3) の一部です。 このファイルは 6 つの部分に分割されます。すなわち、 ヘッダ、 端末の名称、 ブール値のフラグ、 数値、 文字列、および 文字列テーブルです。

ヘッダセクションはファイルの冒頭にあります。 このセクションは、以下に示す形式の short 型の整数 6 個からなります。 これらの整数は (1) マジックナンバ (8 進で 0432)、 (2) 名称セクションのバイト単位での大きさ、 (3) ブール値のセクションに含まれるバイトの個数、 (4) 数値セクションに含まれる short 型整数の個数、 (5) 文字列セクションに含まれるオフセットの個数 (short 型整数)、 (6) 文字列テーブルのバイト単位での大きさ です。

short 型の整数は 2 個の 8 ビットバイトに格納されています。 最初のバイトは値の最下位 8 ビットを、2 番目のバイトは最上位 8 ビットを 含みます。(すなわち、値は 256*second+first と表現されます。) 値 -1 は 0377, 0377 で表現されますが、その他の負の値は構文違反です。 一般に、値 -1 は、あるケーパビリティがその端末に備わっていないことを 示します。 この形式は VAX と PDP-11 のハードウェアに 一致するものであることにご注意下さい。これに一致しないハードウェアの マシンでは、整数を 2 個のバイトとして読み込み、結果を算出します。

次に現れるのは端末名セクションです。 これは、端末のさまざまな名前を `|' 文字で区切って列挙した、 terminfo 記述の最初の行を含みます。 このセクションは 1 個の ASCII NUL 文字で終端されます。

ブール型のフラグは、フラグ 1 個につき 1 バイトを占めます。 このバイトは、フラグが存在するかしないかに従って、0 か 1 となる必要があります。 ケーパビリティはファイル <term.h> に含まれるのと同じ順番に並びます。

数値セクションが偶数バイト目から開始されるように、 ブール値のセクションと数値セクションの間には、 必要なら 1 個のナルバイトを挿入します。 すべての short 型整数は short 型のワード境界に揃えて配置されます。

数値セクションはフラグセクションと同様です。 各ケーパビリティは 2 バイトを占め、short 型整数として格納されます。 もし表現された値が -1 なら、そのケーパビリティは存在しないものと 解釈されます。

文字列セクションもまた同様です。 各ケーパビリティは上記の形式に従い、2 バイトの short 型整数として 格納されます。 値 -1 は、ケーパビリティが存在しないことを意味します。 それ以外の場合、値は、文字列テーブルの先頭からのオフセットとして 解釈されます。 ^X や \c といった記法で示された特殊文字は、その記法を解釈した結果の形で 格納され、印刷可能表現では格納されません。 パッド情報 $<nn> とパラメータ情報 %x は解釈を行なわずそのままの形で 格納されます。

最後のセクションは文字列テーブルです。これは文字列セクションで参照されている すべての文字列ケーパビリティの値を含みます。 各文字列はナルで終端されています。

setupterm ルーチンでは、ファイルに実際に存在するケーパビリティ とは異なるものが予想され得ることにご注意下さい。 setupterm が再コンパイルされた後にデータベースが更新される (ファイルにいくつかの未知のエントリが含まれる結果になります)か、 データベースが最後にコンパイルされた後にプログラムが再コンパイルされる (存在しないエントリを生む結果になります)両方の可能性があります。 ルーチン setupterm は両方の可能性に備える必要があります - これが、データ内に個数と大きさが含まれている理由です。 また、新しいケーパビリティは常に、ブール値、数値、文字列の ケーパビリティリストのそれぞれの最後に追加しなければなりません。

使用例として、 Microterm ACT 4 の記述の 8 進数ダンプをここに収めます。

microterm|act4|microterm act iv,
    cr=^M, cud1=^J, ind=^J, bel=^G, am, cub1=^H,
    ed=^_, el=^^, clear=^L, cup=^T%p1%c%p2%c,
    cols#80, lines#24, cuf1=^X, cuu1=^Z, home=^],

00 032 001      \0 025  \0  \b  \0 212  \0   "  \0   m   i   c   r
020   o   t   e   r   m   |   a   c   t   4   |   m   i   c   r   o
040   t   e   r   m       a   c   t       i   v  \0  \0 001  \0  \0
060  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
100  \0  \0   P  \0 377 377 030  \0 377 377 377 377 377 377 377 377
120 377 377 377 377  \0  \0 002  \0 377 377 377 377 004  \0 006  \0
140  \b  \0 377 377 377 377  \n  \0 026  \0 030  \0 377 377 032  \0
160 377 377 377 377 034  \0 377 377 036  \0 377 377 377 377 377 377
200 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377
*
520 377 377 377 377      \0 377 377 377 377 377 377 377 377 377 377
540 377 377 377 377 377 377 007  \0  \r  \0  \f  \0 036  \0 037  \0
560 024   %   p   1   %   c   %   p   2   %   c  \0  \n  \0 035  \0
600  \b  \0 030  \0 032  \0  \n  \0

いくつかの制限: コンパイル済みのエントリは 4096 バイトを超えることが できません。名前フィールドは 128 バイトを超えることができません。

関連ファイル
/usr/lib/terminfo/*/*    コンパイル済みの端末ケーパビリティデータベース

関連項目
ncurses(3), terminfo(5).