EN JA
term(5)
term(5) FreeBSD File Formats Manual term(5)

名称

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

書式

term

解説

記憶域の位置N

コンパイル済みの terminfo 属性記述はディレクトリ /usr/share/misc/terminfo の下にあります。 (ncurses ライブラリを構築するとき) 2 つの設定がサポートされます:
ディレクトリツリー
2 つのレベルのスキームは、莫大な UNIX システムディレクトリの線形検索 (リニアサーチ) を避けるために使用されます: /usr/share/misc/terminfo/c/name ここで、 name は端末の名前で、 cname の最初の文字です。ですから、 act4 は、 /usr/share/misc/terminfo/a/act4 というファイル名で見つけることができます。同じ端末を示す同義な名前は、同じコンパイル済みファイルへの複数のリンクとして実装されています。
ハッシュされたデータベース
Berkeley データベースを使用して、2 つのタイプのレコードは、次のように格納されます: キーとして terminfo のプライマリ名でディレクトリツリーに格納される同じ形式の terminfo データとプライマリ名を指す別名だけを含むレコード。
ハッシュされたデータベースを書き込むために構築されるなら、ncurses は、まだディレクトリツリーとして体系化された terminfo データベースを読み込むことができますが、ディレクトリツリーにエントリを書き込むことはできません。それはハッシュされたデータベースにエントリを書き込む (または、再書き込みする) ことができます。
ncurses は、既存のディレクトリと、そうでなければ、ハッシュされたデータベースに対応するエントリに対してディレクトリツリーを仮定することによって、 TERMINFO と TERMINFO_DIRS 環境変数の 2 つの場合を区別します。

記憶域の形式

この形式は、全てのハードウェアで同じになるように選ばれています。 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 は解釈を行なわずそのままの形で格納されます。

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

拡張記憶域の形式

前のセクションは従来の terminfo バイナリ形式について説明しています。オフセット (「移植性」を参照) のいくつかの小さい変更で、同じバイナリ形式は、すべての最近の UNIX システムで使用されます。各システムは、ブール値、数値または文字列ケーパビリティの事前に定義された組を使用します。

ncurses ライブラリとアプリケーションは、ユーザが実行時にロードされるケーパビリティを定義できる、拡張 terminfo バイナリ形式をサポートします。他の実装で、それらがヘッダで与えられたサイズの終りに達したとき、 terminfo データを読むのを停止するという、事実を使用することによって、この拡張を可能にします。 ncurses は、サイズと、それが事前に定義されたデータのためにそれが超えるかどうかチェックして、それ自体のスキームに従って解析し続けます。

最初に、拡張ヘッダ (5 つの short 整数) を読み込みます:

(1)
拡張ブール値ケーパビリティのカウント。
(2)
拡張数値ケーパビリティのカウント。
(3)
拡張文字列ケーパビリティのカウント。
(4)
バイト単位の拡張文字列テーブルのサイズ。
(5)
バイト単位の拡張文字列テーブルの最後のオフセット。

カウントとサイズを使用して、ncurses は、配列を割り付けて、ヘッダ情報として同じ順序で拡張ケーパビリティのためのデータを読み込みます。

拡張文字列テーブルは、文字列ケーパビリティのための値を含んでいます。これらの値の終わりの後に、例えば、ブール値、数値と最終的な文字列、の順序で拡張ケーパビリティのためのそれぞれの名前を含みます。

移植性

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).

作者

Thomas E. Dickey
 
ncurses 5.0 のための拡張 terminfo 形式
 
ncurses 5.6 のためのハッシュされたデータベースのサポート
 
Eric S. Raymond