term − コンパイル済みの term ファイルの形式 |
term |
コ ン パ イ ル 済 み の terminfo 属 性 記 述 は ディ レ ク ト リ /usr/share/misc/terminfo の下にあります。 UNIX システムの巨大なディレク ト リを線形探索するのを避けるため、 /c/name という形の 2 階層の命名規則 が用いられます。 (ここで、 name は端末の名前で、 c は name の最初の文字 です。) ですから、 act4 は、 /usr/share/misc/terminfo/a/act4 というファ イル名で見つけることができます。同じ端末を示す同義な名前は、同じコン パ イル済みファイルへの複数のリンクとして実装されています。 この形式は、全てのハードウェアで同じになるように選ばれています。 1 バイ トが 8 ビット以上であることは仮定していますが、バイトオーダや符号拡張の 方式については仮定していません。 コ ン パ イ ル済みのファイルは tic プログラムにより生成され、 setupterm ルーチンにより読み取られます。このファイルは 6 つの部分に分割されます。 す なわち、ヘッダ、端末の名称、ブール値のフラグ、数値、文字列、および文 字列テーブルです。 ヘッダセクションはファイルの冒頭にあります。このセクションは、以下に 示 す形式の short 型の整数 6 個からなります。これらの整数は (1) マジックナ ンバ (8 進で 0432)、 (2) 名称セクションのバイト単位での 大 き さ、 (3) ブール値のセクションに含まれるバイトの個数、 (4) 数値セクションに含まれ る short 型整数の個数、 (5) 文字列セクションに含まれるオフセットの個 数 (short 型整数)、 (6) 文字列テーブルのバイト単位での大きさです。 short 型の整数は 2 個の 8 ビットバイトに格納されています。最初のバイト は値の最下位 8 ビットを、2 番目のバイトは最上位 8 ビットを含みます。(す なわち、値は 256*second+first と表現されます。) 値 −1 は 2 バイト 0377, 0377 で表現されますが、その他の負の値は構文違反です。一般に、この値は、 あ るケーパビリティがその端末に備わっていないことを示します。この形式は VAX と PDP -11 のハードウェアに一致するものであることにご注意下さい ( こ れらはリトルエンディアンマシンです)。これに一致しないハードウェアのマシ ンでは、整数を 2 個のバイトとして読み込み、リトルエンディアン値を算出す る必要があります。 次 に現れるのは端末名セクションです。これは、端末のさまざまな名前を ‘|’ 文字で区切って列挙した、 terminfo 記述の最初の行を含みます。こ の セ ク ションは 1 個の ASCII NUL 文字で終端されます。 ブー ル 型 のフラグは、フラグ 1 個につき 1 バイトを占めます。このバイト は、フラグが存在するかしないかに従って、0 か 1 となる必要があり ま す。 ケーパビリティはファイル <term.h> に含まれるのと同じ順番に並びます。 数 値セクションが偶数バイト目から開始されるように、ブール値のセクション と数値セクションの間には、必要なら 1 個のナルバイトを挿入します (これは PDP-11 のワードアドレスアーキテクチャの名残であり、元々は奇数バイト境界 上のワードをアドレスすることで発生する IOT トラップを避けるためにデザイ ンされました)。すべての short 型整数は short 型のワード境界に揃えて配置 されます。 数値セクションはフラグセクションと同様です。各ケーパビリティは 2 バイト を占め、リトルエンディアンの short 型整数として格納されます。もし表現さ れた値が −1 なら、そのケーパビリティは存在しないものと解釈されます。 文字列セクションもまた同様です。各ケーパビリティは上記の形式に 従 い、2 バイトの short 型整数として格納されます。値 −1 は、ケーパビリティが存在 しないことを意味します。それ以外の場合、値は、文字列テーブルの先頭か ら の オフセットとして解釈されます。 ^X や \c といった記法で示された特殊文 字は、その記法を解釈した結果の形で格納され、印刷可能表現では格納され ま せん。パッド情報 $<nn> とパラメータ情報 %x は解釈を行なわずそのままの形 で格納されます。 最後のセクションは文字列テーブルです。これは文字列セクションで参照さ れ て いるすべての文字列ケーパビリティの値を含みます。各文字列はナルで終端 されています。 setupterm ルーチンでは、ファイルに実際に存在するケーパビリティとは異 な るものが予想され得ることにご注意下さい。 setupterm が再コンパイルされた 後にデータベースが更新される (ファイルにいくつかの未知のエントリが含 ま れる結果になります)か、データベースが最後にコンパイルされた後にプログラ ムが再コンパイルされる (存在しないエントリを生む結果になります)両方の可 能性があります。ルーチン setupterm は両方の可能性に備える必要があります − これが、データ内に個数と大きさが含まれている理由です。また、 新 し い ケー パビリティは常に、ブール値、数値、文字列のケーパビリティリストのそ れぞれの最後に追加しなければなりません。 数値にリトルエンディアンを使用して他には自ら記述した書式を使用して も、 商 用 UNIX バージョンとのバイナリ terminfo エントリの互換性を信用するこ とは賢くはありません。問題は、少なくとも 3 種の terminfo (HP-UX AIX, OSF/1) が SVr1 後に System V がら分岐し、 System V と XSI の Curses 拡 張と (バイナリ書式において) 衝突する拡張ケーパビリティを文字列テーブ ル に 追 加 し た ことです。 terminfo ソースの互換性に関する詳細な議論は、 terminfo(5) を参照してください。 例として、Lear-Siegler ADM-3 の記述の 16 進数ダンプを示します。これは、 ポピュラーですが、馬鹿な初期の端末です: adm3a|lsi adm3a, am, cols#80, lines#24, bel=^G, clear= 32$<1>, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, home=^^, ind=^J, 0000 1a 01 10 00 02 00 03 00 82 00 31 00 61 64 6d 33 ........ ..1.adm3 0010 61 7c 6c 73 69 20 61 64 6d 33 61 00 00 01 50 00 a|lsi ad m3a...P. 0020 ff ff 18 00 ff ff 00 00 02 00 ff ff ff ff 04 00 ........ ........ 0030 ff ff ff ff ff ff ff ff 0a 00 25 00 27 00 ff ff ........ ..%.’... 0040 29 00 ff ff ff ff 2b 00 ff ff 2d 00 ff ff ff ff ).....+. ..-..... 0050 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 0060 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 0070 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 0080 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 0090 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 00a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 00b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 00c0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 00d0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 00e0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 00f0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 0100 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 0110 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 0120 ff ff ff ff ff ff 2f 00 07 00 0d 00 1a 24 3c 31 ....../. .....$<1 0130 3e 00 1b 3d 25 70 31 25 7b 33 32 7d 25 2b 25 63 >..=%p1% {32}%+%c 0140 25 70 32 25 7b 33 32 7d 25 2b 25 63 00 0a 00 1e %p2%{32} %+%c.... 0150 00 08 00 0c 00 0b 00 0a 00 ........ . い くつかの制限: コンパイル済みのエントリは 4096 バイトを超えることがで きません。名前フィールドは 128 バイトを超えることができません。 |
/usr/share/misc/terminfo/*/* |
コンパイル済みの端末ケーパビリティデー タ ベース |
curses(3X), terminfo(5). |