curs_termcap 3x

curs_termcap(3x)                                       curs_termcap(3x)




名前

       PC, UP, BC, ospeed, tgetent, tgetflag, tgetnum, tgetstr,
       tgoto, tputs 
       - terminfo 機能データベースへの直接の curses インターフェイス


書式

       #include <curses.h>
       #include <term.h>

       extern char PC;
       extern char * UP;
       extern char * BC;
       extern short ospeed;

       int tgetent(char *bp, const char *name);
       int tgetflag(char *id);
       int tgetnum(char *id);
       char *tgetstr(char *id, char **area);
       char *tgoto(const char *cap, int col, int row);
       int tputs(const char *str, int affcnt, int (*putc)(int));


説明

        これらのルーチンは termcap ライブラリを使うプログラムが
       変換するのを助けるため、ライブラリに含まれています。
        これらのルーチンは terminfo データベースを使って
       エミュレートされ、引数は (termcap ライブラリと) 同じです。
        したがって、それらは terminfo 収録項目 (エントリ) が
       コンパイルされている収録項目の機能項目 (ケーパビリティ) を
       問い合わせることしかできません。


初期化

        tgetent ルーチンは name に対応する収録項目をロードします。
        このルーチンは次の値を返します。

          1  成功のとき

          0  そのような収録項目がない (または、ジェネリック・タイプで
             あり、curses アプリケーションを実行するには情報が
             少なすぎる)

          -1 terminfo データベースが見つからない

        このルーチンは termcap ライブラリと 2 つの点で異なります。

          o   このエミュレーションはバッファ・ポインタ bp を
              無視します。
              termcap ライブラリはこのポインタが指す領域に端末記述の
              コピーを格納します。
              しかし、ncurses は端末記述をコンパイルされた
              バイナリ形式で格納し、それは同じものではありません。

          o   戻り値に違いがあります。
              termcap ライブラリは端末記述が generic 機能項目で
              マークされているかどうか、または端末記述が
              カーソル・アドレッシングを持つかどうか、
              チェックしません。


機能項目の値

        tgetflag ルーチンは id に対するブール値収録項目を取得します。
       できない場合はゼロです。

        tgetnum ルーチンは id に対する数値収録項目を取得します。
       できない場合は -1 です。

        tgetstr ルーチンは id に対する文字列収録項目を返します。
       できない場合はゼロです。
        返された文字列を出力するには tputs を使ってください。
        引数 area は次のように使われます。

          o   呼び出し側のアプリケーションが管理するバッファへの
              ポインタのアドレスとみなします。

          o   しかし、ncurses はその area が NULL でないことと、
              結果を返すパッファ・ポインタも NULL でないことを
              確かめます。
              どちらかのチェックに失敗したときは、引数 area は
              無視されます。

          o   チェックが成功すると、ncurses は area で指される
              バッファへ返す値をコピーし、area の値はこの値の
              終端ヌルを通り越した点まで増やされます。
              (訳注: *area と思われる)

          o   戻り値そのものはメモリにロードされた端末記述内の
              アドレスです。

        tgetflag, tgetnum, tgetstr の引数 id の最初の 2 文字だけが
       検索の際に比較されます。


機能項目の整形

        tgoto ルーチンは引数から与えられた機能項目のインスタンスを
       生成します。
        このルーチンからの出力は tputs に渡すものです。

        tputs ルーチンは curs_terminfo(3x) マニュアル・ページで
       説明しています。
        このルーチンは termcap 名によっても terminfo 名によっても
       機能項目を検索することができます。


広域(グローバル)変数

        変数 PC, UP, BC はそれぞれ terminfo 収録項目 pad_char, 
       cursor_up, backspace_if_not_bs のデータとして tgetent が
       設定します。
        ncurses は UP を使いません。
        PCtdelay_output 関数で使います。
        BCtgoto エミュレーションで使います。
        変数 ospeed は端末の速度を反映してシステム固有の
       コーディングで ncurses が設定します。


戻り値

        特記がない限り、整数を返すルーチンは失敗のとき ERR を、
       正常終了のとき OK (SVr4 は「ERR 以外の整数値」としか
       指定していません) を返します。

        ポインタを返すルーチンはエラーのとき NULL を返します。


バグ

        ca その他のパラメータ化された文字列を tgetstr を呼び出して
       読み出すなら、旧式で十分な互換性のない termcap の
       表記法ではなく、terminfo の表記法で返されることに
       注意してください。
        ともに terminfo 形式の文字列を terminfo として展開する 
       tgoto または tparm の呼び出しだけしか行わないならば
       問題を引き起こしません。
        (tgoto 関数は、もし termcap をサポートするように構成されて
       いれば、"%p" パラメータか "$<..>" ディレイを探すことにより、
       文字列が実際に terminfo 形式かどうかチェックします。そして
       文字列が terminfo のように見えないときは termcap 形式の
       パーサ (構文解析ルーチン) を呼び出します。)

        terminfo が文字列機能項目でパディングを表す仕様が termcap と
       異なっているため、tputs("50"); は 50 ミリ秒の処理待ちをせず、
       リテラル "50" を出力します。
        これにうまく対処してください。

        termcap には terminfo の sgr 文字列に対応するものがないことに
       注意してください。
        その結果のひとつとして、termcap アプリケーションは 
       me (terminfo の sgr0) が代替文字セットをリセットしないものと
       仮定します。
        この実装は termcap インターフェイスに見せるデータを
       チェックし修正して、この点での termcap の制限に適応させます。


移植性

        これらの関数は XSI Curses standard, Issue 4 に記載されて
       います。
        しかし、これらは廃止予定と注記されており、将来の
       バージョンでは削除されるかもしれません。

        XSI Curses standard も SVr4 もマニュアル・ページで 
       tgetent の戻り値を正しく記述していません。しかし、SVr1 以来 
       3 つとも実際には値を返していました。
        特に XSI Curses documentation の手落ちは、tgetentOK または ERR を返すものと誤解していました。
        これらの関数の目的は termcap ライブラリとの互換性を
       与えることなので、それは ncurses でよりも 
       XCurses, Issue 4, Version 2 での欠陥となっています。

        特定の termcap アプリケーションをサポートするために、
       いくつかの外部変数が用意されています。
        しかし、termcap アプリケーションによるそれらの変数の使用に
       ついてはあまり説明されていません。たとえば、入力と出力を
       区別していません。
        特に、一部のアプリケーションは ospeed を宣言したり
       修正したりすると報告されています。

        引数 id の初めの 2 文字だけが使われるという注釈は、多くの
       開発者から忘れられています。
        オリジナルの BSD 4.2 termcap ライブラリ 
       (とその歴史的遺物) は tgetstr, tgetnum, tgetflag に渡される
       パラメータ名の終端ヌル NUL を必要としませんでした。
        いくつかのアプリケーションは、termcap インターフェイスには
       パラメータ名に終端 NUL が必要ないとみなしています。
        これらの問題を考慮すると、

       o   特別な場合として、tgetflag は端末記述の最後にあった 
           1 文字の識別子と一致しました。
           ポータブル・プログラムでこの動作に依存してはいけません。
           この実装は 1 文字の機能項目名との一致を許していません。

       o   この実装は termcap インターフェイスの検索による 
           2 文字より長い拡張機能項目名との一致を許していません。


関連項目

       curses(3x), terminfo(5), term_variables(3x), putc(3).

       http://invisible-island.net/ncurses/tctest.html



                                                       curs_termcap(3x)