TERMCAP(3)

名称
tgetent, tgetnum, tgetflag, tgetstr, tgoto, tputs, tparm, __set_ospeed - ターミナルとは独立した操作関数

書式
#include <termcap.h> char PC; char *BC; char *UP; short ospeed; int tgetent(char *bp, const char *name) int tgetnum(const char *id) int tgetflag(const char *id) char * tgetstr(const char *id, char **area) char * tgoto(const char *cm, int destcol, int destline) int tputs(const char *cp, int affcnt, int (*outc)(int)) char * tparm(const char *cp, ...) void __set_ospeed(unsigned int speed)

解説
これらの関数は、端末機能データベース、普通は /usr/share/misc/termcap から機能を抽出して使用し、その形式は termcap(5) に説明してあります。 これらは低レベルのルーチンです。より高レベルのパッケージについては、 curses(3) を参照してください。

tgetent() 関数は、端末名の入力を bp のバッファに抽出します。引数 bp はサイズ 1024 のキャラクタバッファでなければならず、またそれに続いて関数 tgetnum(), tgetflag(), tgetstr() などの呼び出しが行われても保持されます。 tgetent() 関数は、データベースファイル termcap がどれも開けない場合は -1 を返し、 与えた端末名が入力されていない場合は 0 を返し、すべてがうまく 処理された場合は 1 を返します。この関数は環境の中で TERMCAP 変数を探します。それが見つかり、その値がスラッシュで始まっておらず、 また端末タイプ name が環境ストリング TERM と同じである場合は、 termcap ファイルを読まずに TERMCAP ストリングを使用します。スラッシュで始まっている場合は、検索する termcap ファイルのパス名としてそのストリングを使います。 TERMCAP がスラッシュで始まっておらす、かつ name が TERM と異なる場合は、環境変数 TERMPATH が存在しなければ tgetent() 関数はファイル $HOME/.termcap および /usr/share/misc/termcap をこの順番で探します。 TERMPATH が存在すれば、 それが検索するファイルの（空白またはコロンで区切られた）パス名リストを 指定します。複数のファイルを探す場合で要求されたエントリに tc フィールドがある場合は、 それが指名するエントリを同じファイルまたはそれに続くファイルの中に 探さねばなりません。これによって、 tgetent() 関数を呼び出すプログラムへの 入力のスピードを上げることができるとともに、新しい端末記述のデバッグや /usr/share/misc/termcap ファイルを書けない場合に自分の端末の端末説明を 作ることが簡単になります。

tgetnum() 関数は、機能 id の数値を取り入れて、それが端末に対して 与えられていない場合は -1 を返します。 tgetflag() 関数は、指定された機能が端末のエントリに存在する場合には 1 を返し、 存在しない場合には 0 を返します。 tgetstr() 関数は、機能 id のストリング値を返し、それを area のバッファに入れ、 area ポインタを進めます。この関数は、カーソルのアドレス およびパッディング情報を除いて、 termcap(5) に記述されたこのフィールドの 略称をデコードします。 tgetstr() 関数は、その機能が見つからない場合は NULL を返します。

tgoto() 関数は、 destline 行の cm から go to カラムまででデコードされたカーソルアドレスストリングを返します。 この関数は、返すストリングに \n, ^D または ^@ を入れることを避けるために必要な場合には外部変数 UP ( up 機能から ) および BC ( bs ではなく bc が与えられている場合 ) を使います。( tgoto() 関数を呼び出すプログラムは、 tgoto() 関数がタブを出力する可能性があるので、必ず XTABS ビットをオフにしておかなければなりません。 いずれにせよ、termcap を使っているプログラムは、 端末によっては control-I を他の機能、 例えば破壊不能スペースに使っているので、一般に XTABS をオフにする 必要があることに注意してください ) 。 理解できない % シーケンスが与えられている場合は、 tgoto() 関数は (OOPS) を返します。

tputs() 関数は、 cp ストリングの先頭のパッディング情報をデコードします。 affcnt は、この操作によって影響を受ける行数を与え、これに該当しない 場合は行数は 1 となり、 outc は各キャラクタとともに順に呼び出されるルーチンです。外部変数 PC には、パッドキャラクタが null (^@) では不適当な場合には、( pc 機能から ) 使用すべきパッドキャラクタが 入っていなければなりません。 外部変数 ospeed には、 stty(3) によりエンコードされた端末の出力速度が 入っていなければなりません。 __set_ospeed() 関数は、cps で表した速度 speed をもっとも近い stty(3) コード化された速度に変換し、その結果を ospeed に保存します。

tparm() 関数は、ストリング cp を与えられたパラメータによってインスタンスに変換します。 cp にそのパラメータが適用された結果を指すポインタ が返されます。理解できない % シーケンスが与えられた場合は、 tparm() 関数は (OOPS) を返します。

ファイル
/usr/lib/libtermcap.a
    -l ltermcap ライブラリ ( -l ltermlib とも呼ばれます )
/usr/share/misc/termcap
    標準端末機能データベース
$HOME/.termcap
    ユーザの端末機能データベース

参照
ex(1), curses(3), termcap(5)

歴史
tgetent() 関数は、 4.0BSD に現れました。