curs_initscr 3x

curs_initscr(3x)                                       curs_initscr(3x)




名前

       initscr, newterm, endwin, isendwin, set_term, delscreen
        - curses 画面の初期化と操作

書式

       #include <curses.h>

       WINDOW *initscr(void);
       int endwin(void);
       bool isendwin(void);
       SCREEN *newterm(char *type, FILE *outfd, FILE *infd);
       SCREEN *set_term(SCREEN *new);
       void delscreen(SCREEN* sp);


説明


initscr

        initscr は通常、プログラムを初期化するとき最初に呼び出す 
       curses ルーチンです。
        時々その前に呼び出す必要のある少数の特別なルーチンには 
       slk_init, filter, ripoffline, use_env があります。
        複数の端末を使うアプリケーションは、 initscr の前に 
       newterm を呼び出す場合があります。

        initscr のコードは端末のタイプを決定し、 curses の
       データ構造のすべてを初期化します。
        initscr はまた、画面をクリアするために最初の 
       refresh 呼び出しを行います。
        エラーが発生した場合、 initscr は適切なエラーメッセージを
       標準エラーに書き出して終了します。
       そうでない場合は、 stdscr へのポインタを返します。


newterm

        複数の端末へ出力するプログラムは、 initscr の代わりに
       端末ごとに newterm ルーチンを呼び出してください。
        端末が画面指向プログラムをサポートしない場合に
       行指向モードで実行し続けることができるように機能項目を
       検査する必要のあるプログラムも newterm を使うでしょう。
        newterm は端末ごとに一度ずつ呼び出さなければなりません。
        newterm はその端末への参照として保存されるべき 
       SCREEN * 型の変数を返します。(訳注: 変数でなく値)
        newterm の引数は

       o   $TERM (=環境変数 TERM ) の代わりに使われる端末のタイプ type

       o   端末に出力するためのファイルポインタ

       o   端末から入力するための別のファイルポインタ

       type 引数が NULL の場合、 $TERM が使われます。


endwin

        プログラムはまた、 curses を終了する前に使った端末
       それぞれに対して endwin を呼び出さなければなりません。
        もし同じ端末に対して newterm を 2 回以上呼び出した場合、
       最初に参照した端末に対して最後の endwin を呼び出さなければ
       なりません。

        プログラムは curses モードを終了するとき、
       または一時的に抜ける前にはいつも endwin を呼び出さなければ
       なりません。このルーチンは

       o   tty モードを復元し、

       o   カーソルを画面の左下隅に移動し、

       o   端末を適切なノンビジュアルモードに戻します。

        一時的に抜けたあとで refreshdoupdate を呼び出すと、
       プログラムはビジュアルモードに戻ります。


isendwin

        isendwin ルーチンは endwin が呼び出された後、 wrefresh が
       呼び出されていない場合に TRUE を、そうでない場合に FALSE を
       返します。


set_term

        set_term ルーチンは異なる端末間の切り替えに使います。
        端末参照 new が新しい現在端末になります。
        このルーチンは直前の端末を返します。
        set_termSCREEN ポインタを操作する唯一のルーチンです。
       他のすべてのルーチンは、現在端末にしか作用しません。


delscreen

        delscreen ルーチンは SCREEN データ構造に関連する記憶領域を
       開放します。
        endwin ルーチンはこれをしないので、特定の SCREEN が必要なく
       なったなら endwin の後で delscreen を呼び出してください。


戻り値

        endwin は失敗の場合に整数 ERR を、正常終了の場合に OK を
       返します。

        ポインタを返すルーチンは、エラーの場合つねに NULL を
       返します。

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

       o   endwin は端末が初期化されていない場合にエラーを返します。

       o   newterm は画面、または画面内のトップレベル・ウインドウ 
           curscr, newscr, stdscr に対するデータ構造の領域を
           確保できなかった場合にエラーを返します。

       o   set_term はエラーを返すことはありません。


注意

        initscrnewterm はマクロであるかもしれないことに
       注意してください。


移植性

        これらの関数は XSI Curses standard, Issue 4 に記載されて
       います。
        2015 年現在の文書は X/Open Curses, Issue 7 です。


相違点

        X/Open はポータブル・アプリケーションは initscr を 
       2 回以上呼び出してはならないと指定しています。

       o   endwin の後で画面を復元するには refresh を使うので、
           ポータブルな initscr の使い方は 1 回のみです。
           ( curs_refresh(3x) 参照)

       o   この実装では endwin の後で initscr を使うことを
           許しています。

        curses の古いバージョン、例えば BSD 4.4 では、エラーが
       検出されたとき、 initscr は終了せずにヌルポインタを返します。
        XSI Curses で initscr の戻り値を検査するのは安全ですが
       冗長です。


環境変数 TERM の欠如

        変数 TERM が見つからないか空の場合、 initscr は、通常 
       generic (gn) 機能項目を持つ端末項目に対応する "unknown" 値を
       使います。
        収録項目 generic は setupterm で検出され 
       ( curs_terminfo(3x) 参照) 、全画面動作では使われません。
        他の実装では変数 TERM が見つからないか空の場合の扱いが
       異なることがあります。


シグナルハンドラ

        以下は X/Open Curses, section 3.1.1 から引用。

             initscr() が呼び出されたときに SIGINT, SIGQUIT, 
            SIGTSTP シグナルの処理方法 (disposition) が 
            SIG_DFL の場合、 Curses の実装によってはこれらシグナルの
            特別な取り扱いを与えることがある。…

             これらシグナルの特別な取り扱いは、実際上
            プロセスの寿命まで、またはプロセスがシグナルの処理方法を
            変更するまで続くことがある。

             どの Curses 関数もシグナルに関して安全であることを
            求められない…

        この実装は、例えば initscr または newterm による初期化の
       間にシグナルハンドラを設定します。
        これらのシグナルを扱わなければならないアプリケーションは
       ライブラリの初期化後に対応するハンドラを準備してください。

       SIGINT
            ハンドラは終了時に画面を一掃しようとします。
            通常は期待通りに動作しますが、いくつかの制限があります。

            o   SCREEN リストをたどることは安全ではありません。
                すべてのリスト処理はどのシグナルもブロックせずに
                行われるからです。

            o   REENTRANT を持つシステムを起動する際、 set_term は
                デッドロックその他の不都合を引き起こすかもしれない
                関数を使います。

            o   endwin は他の関数を呼び出し、その多くは 
                stdio その他の明らかに安全でないライブラリ関数を
                使います。

       SIGTERM
            SIGINT と同じハンドラを使い、同じ制限があります。
            X/Open Curses では考慮されていませんが、 (デバッグに
            使われる) SIGQUIT よりもこの用途により向いています。

       SIGTSTP
            ジョブ制御で使われる stop シグナルを扱います。
            プロセスを再開するとき、この実装は待機中の入力を 
            flushinput で捨て ( curs_util(3x) 参照) 、
            画面が完全に変更されたものとして再描画します。
            (訳注: flushinput ではなく flushinp )
            また、 def_shell_mode でセーブした端末モードを
            更新します。 ( curs_kernel(3x) 参照)
            

       SIGWINCH
            標準化の努力の中で当初は無視されていた、ウインドウの
            サイズ変更を扱います。
            このハンドラは、後に wgetch でテストされる 
            (シグナル安全な) 変数をセットします。
            ( curs_getch(3x) 参照)
            対応するウインドウで keypad が有効になっていれば、 
            wgetch はキー識別子 KEY_RESIZE を返します。
            同時に wgetchresizeterm を呼び出して
            標準画面 stdscr を調整し、 LINESCOLS のような
            他のデータを更新します。
            (訳注: resizeterm(3x) 参照)


関連項目

       curses(3x),   curs_kernel(3x),   curs_refresh(3x),
       curs_slk(3x),  curs_terminfo(3x),  curs_util(3x), 
       curs_variables(3x).



                                                       curs_initscr(3x)