curs_terminfo 3x

curs_terminfo(3x)                                     curs_terminfo(3x)




名前

       del_curterm, mvcur, putp, restartterm, set_curterm,
       setterm, setupterm, tigetflag, tigetnum, tigetstr, tiparm,
       tparm, tputs, vid_attr, vid_puts, vidattr, vidputs 
       - terminfo データベースへの curses インターフェイス


書式

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

       int setupterm(char *term, int fildes, int *errret);
       int setterm(char *term);
       TERMINAL *set_curterm(TERMINAL *nterm);
       int del_curterm(TERMINAL *oterm);
       int restartterm(char *term, int fildes, int *errret);
       char *tparm(char *str, ...);
       int tputs(const char *str, int affcnt, int (*putc)(int));
       int putp(const char *str);
       int vidputs(chtype attrs, int (*putc)(int));
       int vidattr(chtype attrs);
       int vid_puts(attr_t attrs, short pair, void *opts, int (*putc)(int));
       int vid_attr(attr_t attrs, short pair, void *opts);
       int mvcur(int oldrow, int oldcol, int newrow, int newcol);
       int tigetflag(char *capname);
       int tigetnum(char *capname);
       char *tigetstr(char *capname);
       char *tiparm(const char *str, ...);


説明

        例えばファンクションキーをプログラミングするような、
       特定の端末機能項目 (ケーパビリティ) を取り扱うため、
       terminfo データベースを直接扱う必要のあるプログラムは、
       これらの低レベル・ルーチンを呼び出す必要があります。
        他のすべての機能については、 curses ルーチンのほうが
       適切であり、そちらの利用を推奨します。


初期化

        最初に setupterm を呼び出す必要があります。
        setupterminitscrnewterm から自動的に呼び出される
       ことに注意してください。
        これは端末依存の変数 [terminfo(5) に一覧がある] の組を
       定義します。

        それぞれの初期化ルーチンは、直接に (ヘッダ定義を通して)、
       または特別な関数により、アプリケーションに端末機能項目を
       与えます。
        これらの文字列、数値、フラグの定義を取得するために、
       ヘッダファイル curses.hterm.h を (この順に) 取り込む 
       (include) 必要があります。

        terminfo 変数 linescolumnssetupterm が次のように
       初期化します。

       o   use_env(FALSE) が呼び出された場合、
           terminfo で指定された linescolumns を使います。

       o   その他の場合、環境変数 LINESCOLUMUS が存在するならば、
           それらの値を使います。
           これらの環境変数が存在せず、プログラムをウインドウ内で
           実行しているならば、現在のウインドウのサイズを使います。
           上記以外の場合、これらの環境変数が存在しないならば、
           terminfo データベースで指定されている linescolumns の
           値を使います。

        パラメータ化された文字列は、 tparm を通して渡し、
       インスタンス化しなくてはなりません。
        すべての terminfo 文字列 [tparm の出力を含む] は、
       tputsputp を使って出力 (print) しなくてはなりません。
        終了 (exit) する前に reset_shell_mode を呼び出して 
       tty モードを復元しなくてはなりません。[curs_kernel(3x) 参照]

        カーソル位置設定機能 (カーソル・アドレッシング) を用いる
       プログラムは

       o   開始時に enter_ca_mode を出力しなくてはなりません 

       o   終了前に exit_ca_mode を出力しなくてはなりません 

        シェルの子プロセスを実行するプログラムは

       o   シェルを呼び出す前に reset_shell_mode を呼び出し、
           exit_ca_mode を出力しなくてはなりません 

       o   シェルから戻った後に enter_ca_mode を出力し、
           reset_prog_mode を呼び出さなくてはなりません 

        setupterm ルーチンは terminfo 構造(体)を初期化するときに、
       terminfo データベースを読みますが、curses の使う
       出力仮想化構造(体)を準備しません。
        端末のタイプは文字列 term です。もし term がヌルならば、
       環境変数 TERM が使われます。
        すべての出力は、出力用に初期化されている
       ファイル識別子 fildes へ送られます。
        errret がヌルでない場合、setuptermOK または ERR を返し、
       状態値を errret が指す整数型領域に格納します。
        戻り値 OKerrret 内の状態値 1 の組み合わせが正常です。
        ERR を返した場合は errret を調べてください。

       1    端末はハードコピー端末であり、curses アプリケーションは
           使うことができません。

            setuptermhc (hardcopy) 機能項目を調べ、収録項目 
            (エントリ) がハードコピータイプかどうかを判定します。

       0    端末が見つからないか、ジェネリックタイプ端末であって
            情報が少なすぎるため、curses アプリケーションを
            実行することができません。

            setuptermgn (generic) 機能項目を調べ、収録項目が
            ジェネリックタイプかどうかを判定します。

       -1   terminfo データベースが見つかりません。

        errret がヌルの場合、setupterm はエラーを検出したとき
       エラーメッセージを出力 (print) して終了します。
        したがって、もっとも単純な呼び出しは

             setupterm((char *)0, 1, (int *)0);,

       で、すべてデフォルト値を使い、出力を stdout へ送ります。

        setterm ルーチンは setupterm に置き換えられました。

             setupterm(term, 1, (int *)0)

       呼び出しは、setterm(term) と同じ動作をします。
        setterm ルーチンは BSD との互換性のために用意されており、
       新規のプログラムには推奨されません。


端末の状態

        setupterm ルーチンは端末の情報を広域 (グローバル) 変数 
       cur_term の指す TERMINAL 構造体に格納します。
        エラーを検出するか、端末が不適当 (ハードコピーまたは
       ジェネリック) と判定した場合はこの情報を破棄し、
       アプリケーションで使えないようにします。

        setupterm を同じ端末タイプに対して繰り返して呼び出すと、
       端末情報を再利用します。
        与えられた端末の機能項目を 1 組しかメモリ上に保管しません。
        setupterm を異なるタイプの端末に対して呼び出すと、それぞれの
       端末機能項目情報の組を新たに割り当てます。

        set_curterm ルーチンは cur_termnterm にセットし、すべての 
       terminfo のブール値・数値・文字列変数が nterm からの値を
       使うようにします。
        このルーチンは cur_term の古い値を返します。

        del_curterm ルーチンは oterm の指す領域を開放し、後で
       使えるようにします。
        otermcur_term と同じ場合、新たに setupterm を
       呼び出すまで terminfo のブール値・数値・文字列変数への参照は
       すべて無効なメモリ領域への参照となります。

        restartterm ルーチンは、メモリを前の状態に戻した後で
       呼び出される点を除いて setupterminitscr と同じです 
       (例えば、コア・イメージ・ダンプとしてセーブしたゲームを
       再ロードする時)。
        restartterm はウインドウと入出力オプションが、メモリが
       セーブされた時点と同じだと仮定しますが、端末タイプと
       ボーレートは異なっているかもしれません。
        したがって restartterm は種々の tty 状態ビットを保存し、
       setupterm を呼び出し、それらのビットを復元します。


出力の整形

        tparm ルーチンは、文字列 str を引数 pi とともに
       インスタンス化します。(訳注: pi を使ってパラメータを評価します)
        str に引数が適用された結果へのポインタを返します。

        訳注: tparm() は可変引数ですが (移植性を参照)、他の実装では
       char *tparm(char *str, long p1, long p2, long p3, long p4,
       long p5, long p6, long p7, long p8, long p9);
       のようになっています。
       pi とあるのは p1, p2, ... を指しています。

        tiparm は固定の引数リストでなく <stdarg.h> 
       (訳注: 可変引数リスト) を使う、tparm の新しい形式です。
        数値引数は long ではなく整数 (int) です。


出力関数

        tputs ルーチンは、パディング情報を文字列 str に適用して
       出力します。
        strterminfo の文字列変数、または tparm, tgetstr, tgoto 
       の戻り値でなければなりません。
        affcnt は影響される行の数で、適用できない場合は 1 に
       なります。
        putc は一度に 1 つずつ文字を渡される putchar のような
       ルーチンです。

        putp ルーチンは tputs(str, 1, putchar) を呼び出します。
        putp の出力は、setupterm で指定した fildes ではなく、
       常に stdout へ行くことに注意してください。

        vidputs ルーチンは文字列を curses(3x) にリストされたすべての
       組み合わせの表示属性 (モード) attrs で端末に表示します。
        文字は putchar のようなルーチン putc に渡されます。

        vidattr ルーチンは vidputs に似ていますが、putchar を通して
       出力する点だけが異なっています。

        vid_attrvid_puts ルーチンはそれぞれ vidattrvidputs 
       ルーチンに対応しています。
        この 2 つは表示属性と色を表す引数、すなわち属性を表す 
       attr_t 型と色のペアの番号を表す short 型を使います。
        vid_attrvid_puts ルーチンは WA_ で始まる属性定数を
       使うように設計されています。
        引数 opts は将来のために予約されています。
        現在は、ヌルポインタを与えなければなりません。

        mvcur ルーチンは低レベルのカーソル移動を行います。
        これは即座に作用します (次の更新 (refresh) 時ではなく)。


端末機能項目関数

        tigetflag, tigetnum, tigetstr ルーチンは、xenl のように、
       渡された terminfocapname に対応する機能項目の値を返します。
        各機能項目に対する capnameterminfo(5) の機能項目の節の
       表の capname コードと題された列に与えられています。

        これらのルーチンはエラーを示す特別な値を返します。

       tigetflag ルーチンは次の値を返します。

       -1     capname がブール値機能項目でないとき

       0      端末記述から取り消されたか、欠落しているとき

       tigetnum ルーチンは次の値を返します。

       -2     capname が数値機能項目でないとき

       -1      端末記述から取り消されたか、欠落しているとき

       tigetstr ルーチンは次の値を返します。

       (char *)-1
              capname が文字列機能項目でないとき

       0      端末記述から取り消されたか、欠落しているとき


端末機能項目名

        これらのヌルで終わる配列は、定義済みの terminfo 変数の
       それぞれについて、短い terminfo 名 ("codes")、termcap 名、
       長い terminfo 名 ("fnames") を含んでいます。
              char *boolnames[], *boolcodes[], *boolfnames[]

              char *numnames[], *numcodes[], *numfnames[]

              char *strnames[], *strcodes[], *strfnames[]


戻り値

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

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

       X/Open はエラーの条件を何も定義していません。この実装では

            del_curterm
                 その端末引数がヌルのときにエラーを返します。

            putptputsを呼び出し、同じエラーコードを返します。

            restartterm
                 これに伴う setupterm 呼び出しがエラーを返したときに
                 エラーを返します。

            setupterm
                 十分なメモリを確保できなかったとき、または
                 初期ウインドウ (stdscr, curscr, newscr) を
                 作成できなかったときにエラーを返します。
                 他のエラー条件はすでに記しました。

            tputs
                 文字列引数がヌルのときエラーを返します。
                 入出力 (I/O) エラーは検出しません。X/Open は、
                 tputs は出力関数 putc の戻り値を無視すると
                 明記しています。
                 


移植性

        X/Open はvidattrvidputs はマクロであるかもしれないと
       注意しています。

        setterm 関数は X/Open に記述されておらず、
       ポータブルではないと考えなくてはなりません。
        他のすべての関数は X/Open に記述されている通りです。

        setupterm は配列 ttytype に端末名をコピーします。
        これは X/Open Curses の一部ではありませんが、一部の
       アプリケーションからそうみなされています。

        端末ドライバ、例えば MinGW port を使うように構成されている
       場合には

       o   setupterm は変数 TERM がないか空のとき、
           特別な値 "unknown" に変換します。

       o   setupterm は $TERM が "#win32con" またはその省略形で
           あるかどうかを調べることにより、Windows コンソール・
           ドライバを明示的に使うことを許しています。

        古いバージョンの ncurses は、initscr または newterm から 
       setupterm に渡されたファイル記述子はバッファ付き入出力を
       使用し、対応するストリームへ書き出すと仮定していました。
        (SystemV curses のように) 終了時に端末がブロック入出力モード
       のままになるという制限に加え、この仮定は問題の種でした。
       それは ncurses が SIGTSTP を受け取ったときにクリーンアップ
       するための信頼できる方法を許していなかったためです。
        現在のバージョンは ncurses が直接管理する出力バッファを
       使っています。
        このマニュアル・ページで説明されている一部の低レベル関数は
       標準出力へ書き込みます。
        それらはシグナルに対して安全ではありません。
        ncurses の高レベルルーチンは、より信頼できるバッファ機構を
       使う、これらの関数の代替バージョンを使っています。

        System V Release 4 では、set_curtermint 型の戻り値を持ち、
       OK または ERR を返します。
        ncurses では X/Open Curses の解釈を実装することを
       選択しました。

        System V Release 4 では、tputs の第 3 引数の型は 
       int (*putc)(char) です。

        X/Open Curses の少なくとも 1 つの実装 (Solaris) は、
       tputs から OK/ERR 以外の値を返します。
        それは文字列の長さを返し、エラーをチェックしません。

        X/Open Curses は tparm を可変引数リストではなく、引数の数を
       固定してプロトタイプ宣言しています。
        この実装では可変引数リストを使っていますが、固定の
       引数リストを使うように構成することもできます。
        ポータブル・アプリケーションは書式文字列 (訳注: str) の後に 
       9 個の引数を与えてください。埋めるにはゼロが最適です。

        Thomas E. Dickey の意見に応えて、X/Open Curses Issue 7 は
       2009年の中頃に tiparm 関数を提案しました。

        X/Open は mvcur を呼び出した後、curses の状態は実際の
       端末の状態と一致しないことがあり、アプリケーションで
       通常の curses 呼び出しを再開する前にウインドウのタッチ 
       (変更のマーク) と更新 (refresh) をしなければならないと
       注意しています。
        ncurses も System V Release 4 curses も、initscr または 
       newterm が割り当てた SCREEN データを使って mvcur を
       実装しています。
        mvcur は terminfo の関数として記述されてはいますが、
       実際には詳しく仕様化されていない curses の関数です。

        X/Open は mvcur に古い位置を与えなければならないと
       明記しています。
        この実装では古い座標として -1 を使うことを許しています。
        この場合、古い位置は不明となります。

        他の実装は機能項目名の配列を宣言していないことがあります。
        いくつかの実装は、これらを宣言せずに提供しています。
        X/Open はこれらを明記していません。

        拡張された端末機能項目名、例えば tic -x によって
       定義されたものは、ここで説明した配列の中に格納されません。


SEE ALSO 関連項目

       curses(3x),  curs_initscr(3x),  curs_kernel(3x),  
       curs_termcap(3x),  curs_variables(3x),  term_variables(3x), 
       putc(3),  terminfo(5)



                                                      curs_terminfo(3x)