curs_kernel(3x) curs_kernel(3x)
def_prog_mode, def_shell_mode, reset_prog_mode,
reset_shell_mode, resetty, savetty, getsyx, setsyx,
ripoffline, curs_set, napms - 低レベル curses ルーチン
#include <curses.h>
int def_prog_mode(void);
int def_shell_mode(void);
int reset_prog_mode(void);
int reset_shell_mode(void);
int resetty(void);
int savetty(void);
void getsyx(int y, int x);
void setsyx(int y, int x);
int ripoffline(int line, int (*init)(WINDOW *, int));
int curs_set(int visibility);
int napms(int ms);
これらのルーチンは curses の種々の機能への低レベルのアクセスを
提供します。
典型的にはライブラリ・ルーチンの内部で使われています。
def_prog_mode と def_shell_mode ルーチンは現在の端末モードを
「プログラム」状態 ( curses 内) として、または「シェル」状態
( curses 外) として、 reset_prog_mode と reset_shell_mode
ルーチンが使えるように保存します。
これは initscr によって自動的に行われます。
端末のコンテキストごとに newterm() が割り当てるこのような
保存領域が 1 つあります。
reset_prog_mode と reset_shell_mode ルーチンは端末を
「プログラム」状態 ( curses 内) として、または「シェル」状態
( curses 外) として復元します。
これらは endwin と、 endwin 後の doupdate によって自動的に
行われるので、通常これらを呼び出すことはありません。
savetty と resetty ルーチンは端末モードの状態の
保存と復元をします。
savetty は現在の状態をバッファに保存し、 resetty は最後に
savetty を呼び出した時点の状態に復元します。
getsyx ルーチンは現在の仮想画面のカーソルの座標を y と x の
中に返します。
leaveok が現在 TRUE ならば、 -1, -1 を返します。
ripoffline を使って画面の最上部から行が削除されたときは、
y と x はこれらの行を含みます。したがって、 y と x は
setsyx の引数としてのみ使うべきです。
setsyx ルーチンは仮想画面のカーソルを y, x に設定します。
y も x も -1 ならば、 leaveok をセットします。
getsyx と setsyx の 2 つのルーチンは、 curses のウインドウを
操作するがプログラムのカーソルの現在位置を変更したくない
ライブラリ・ルーチンが使うように設計されています。
(そのような) ライブラリ・ルーチンは、
はじめに getsyx を呼び出し、対象のウインドウを操作し、
対象のウインドウで wnoutrefresh を実行し、setsyx を呼び出し、
そして doupdate を呼び出します。
ripoffline ルーチンは、 slk_init [ curs_slk(3x) 参照] が
画面の寸法を縮小するために使うものと同じ拡張機能の利用方法を
提供します。
以下の初期化動作を準備するために、ripoffline は
initscr または newterm を呼び出す前に呼び出さなければ
なりません。
o line が正ならば、 stdscr の最上部から 1 行を削除します。
o line が負ならば、 最下部から 1 行を削除します。
initscr の内部で ripoffline のもたらす初期化が済むと、
(与えられた) init ルーチンを次の 2 つの引数とともに
呼び出します。
o 割り当てられた 1 行のウインドウへのウインドウ・ポインタ
o ウインドウ内の桁数を持つ整数
この初期化ルーチンの内部で、 ( <curses.h> で定義されている)
整数変数 LINES と COLS の正確性は保証されません。
また、 wrefresh も doupdate も呼び出してはいけません。
この初期化ルーチンの実行中、 wnoutrefresh を呼び出すことは
許されています。
ripoffline は initscr または newterm を呼び出す前に 5 回まで
呼び出すことができます。
curs_set ルーチンは、 visibility を 0, 1, 2 にすることにより、
カーソルの表示方法をそれぞれ不可視、通常表示、高視認性に
設定します。
端末が visibility で要求された表示方法をサポートしている場合、
直前の表示方法を返します。そうでない場合は ERR を返します。
napms を使うと ms ミリ秒間スリープします。
curs_set を除き、これらのルーチンは常に OK を返します。
curs_set は直前のカーソルの表示方法を返しますが、
要求された表示方法をサポートしていない場合は ERR を返します。
X/Open はエラーの条件を何も定義していません。この実装では
def_prog_mode, def_shell_mode, reset_prog_mode,
reset_shell_mode
端末が初期化されていない場合、または端末設定を得るための
I/O 呼び出しが失敗した場合にエラーを返します。
ripoffline
削除した行数の最大値が制限値 (NRIPS = 5) を超える場合に
エラーを返します。
getsyx はマクロなので、変数 y と x の前に & が必要ないことに
注意してください。
古い SVr4 のマニュアル・ページは curs_set の戻り値は
「現在のところ正しくない」と警告しています。
この実装では正しくなっていますが、他の実装で戻り値が
正しいと期待するのは賢明ではないでしょう。
ncurses と SVr4 の双方は、カーソルを通常表示以外、つまり
不可視か高視認性にするために curs_set を呼び出した場合、
endwin で curs_set を呼び出します。
元に戻そうとしても ncurses にはカーソル表示方法の初期状態を
決定する方法がありません。
setsyx と getsyx 関数は XSI Curses standard, Issue 4 に
記載されていません。
他のすべての関数は XSI Curses に記載されているとおりです。
SVr4 説明書は setsyx と getsyx の戻り値の型を int と
記載しています。
これらは戻り値の意味を明文化していないマクロなので、
この文書は誤解を招くものです。
curses(3x), curs_initscr(3x), curs_outopts(3x),
curs_refresh(3x), curs_scr_dump(3x), curs_slk(3x),
curs_variables(3x).
curs_kernel(3x)