前へ | 次へ | 目次 | 索引 |
Curses Screen Management 関数およびマクロを使用するときに,端末画面の初期化と復元のために使用しなければならないコマンドがあります。また,Curses が依存する定義済み変数と定数もあります。 例 6-1 は Curses を使用してプログラムを設定する方法を示しています。
例 6-1 Curses プログラム |
---|
(1)#include <curses.h> (2)WINDOW *win1, *win2, *win3; main() { (3) initscr(); . . . endwin(); } |
例 6-1 の説明:
大部分の Curses ユーザはウィンドウの定義と変更を行う必要があります。 例 6-2 は, 1 つのウィンドウの定義とそのウィンドウへの書き込みの方法を示しています。
例 6-2 ウィンドウの操作 |
---|
#include <curses.h> WINDOW *win1, *win2, *win3; main() { initscr(); (1) win1 = newwin(24, 80, 0, 0); (2) mvwaddstr(win1, 2, 2, "HELLO"); . . . endwin(); } |
例 6-2 の説明:
ほとんどの Curses マクロは,デフォルト設定で stdscrを更新します。他のウィンドウを更新する Curses 関数は,マクロと同じ名前ですが,先頭に接頭語 "w" が付いています。たとえば, addstrマクロは, stdscrの現在のカーソルの位置に指定された文字列を追加します。 waddstr関数は,指定されたウィンドウの現在のカーソルの位置に指定された文字列を追加します。 |
ウィンドウを更新する場合は,端末画面の原点ではなく,ウィンドウの原点を基準にしてカーソルの位置を指定します。たとえば,ウィンドウの開始位置が (10,10) で,ウィンドウの開始位置に文字を追加する場合は,(10,10) ではなく,座標 (0,0) を指定します。
例 6-2 の HELLO という文字列は,画面を再表示するまで端末画面に表示されません。画面を再表示するには, wrefresh関数を使用します。 例 6-3 は,端末画面に win1の内容を表示する方法を示しています。
例 6-3 端末画面の再表示 |
---|
#include <curses.h> WINDOW *win1, *win2, *win3; main() { initscr(); win1 = newwin(22, 60, 0, 0); mvwaddstr(win1, 2, 2, "HELLO"); wrefresh(win1); . . . endwin(); } |
wrefresh関数は,端末画面で指定されたウィンドウの領域だけを更新します。このプログラムを実行すると,プログラムが
endwin関数を実行するまで, HELLO という文字列が端末画面に表示されます。
wrefresh関数は,端末画面上のウィンドウの中で,別のウィンドウに重なっていない部分だけを再表示します。
win1が別のウィンドウと重なっているときに,
win1の全部を端末画面に表示するには,
touchwin関数を呼び出します。
6.5 定義済み変数と定数
<curses.h>ヘッダ・ファイルには, Curses のインプリメントに役立つ変数と定数が定義されています ( 表 6-2 を参照 )。
名前 | 型 | 説明 |
---|---|---|
curscr | WINDOW * | 現在の画面のウィンドウ |
stdscr | WINDOW * | デフォルト・ウィンドウ |
LINES | int | 端末画面の行数 |
COLS | int | 端末画面のカラム数 |
ERR | --- | 異常終了したルーチンのフラグ (0) |
OK | --- | 正常終了したルーチンのフラグ (1) |
TRUE | --- | ブール値 TRUE フラグ (1) |
FALSE | --- | ブール値 FALSE フラグ (0) |
_BLINK | --- | setattr と clrattr のパラメータ |
_BOLD | --- | setattr と clrattr のパラメータ |
_REVERSE | --- | setattr と clrattr のパラメータ |
_UNDERLINE | --- | setattr と clrattr のパラメータ |
たとえば,定義済みマクロ ERR を使用して, Curses 関数の正常終了または異常終了を判定することができます。 例 6-4 はこのような判定を行う方法を示しています。
例 6-4 Curses の定義済み変数 |
---|
#include <curses.h> WINDOW *win1, *win2, *win3; main() { initscr(); win1 = newwin(10, 10, 1, 5); . . . if (mvwin(win1, 1, 10) == ERR) addstr("The MVWIN function failed."); . . . endwin(); } |
例 6-4 で,
mvwin関数が異常終了すると,プログラムは結果を示す文字列を
stdscrに追加します。 Curses の
mvwin関数はウィンドウの開始位置を移動します。
6.6 カーソルの移動
UNIX システム環境では, Curses 関数を使用して端末画面上でカーソルを移動できます。他のインプリメンテーションでは, Curses が move関数を使用してカーソルを移動することができ,ユーザが mvcur関数にカーソルの始点と終点を指定することもできます。この関数はカーソルを効率のよい方法で移動します。
HP C for OpenVMS Systems では,2 つの関数は機能的に同じであり,カーソルを移動する効率も同じです。
例 6-5 は, move関数と mvcur関数の使用方法を示しています。
例 6-5 カーソル移動関数 |
---|
#include <curses.h> main() { initscr(); . . . (1) clear(); (2) move(10, 10); (3) move(LINES/2, COLS/2); (4) mvcur(0, COLS-1, LINES-1, 0); . . . endwin(); } |
例 6-5 の説明:
次のプログラムの例は,多くの Curses マクロと関数の結果を示しています。プログラム・コードの各行の内容の理解に役立つように,各行の右側のコメントに説明が示されています。関数の詳細については,ソース・コード・リストの後の説明を参照してください。
例 6-6 は,1 つのユーザ定義ウィンドウと stdscrの定義および操作を示しています。
例 6-6 stdscr と,それに重なるウィンドウ |
---|
/* CHAP_6_STDSCR_OCCLUDE.C */ /* This program defines one window: win1. win1 is */ /* located towards the center of the default window */ /* stdscr. When writing to an occluding window (win1) */ /* that is later erased, the writing is erased as well. */ #include <curses.h> /* Include header file. */ WINDOW *win1; /* Define windows. */ main() { char str[80]; /* Variable declaration.*/ initscr(); /* Set up Curses. */ noecho(); /* Turn off echo. */ /* Create window. */ win1 = newwin(10, 20, 10, 10); box(stdscr, '|', '-'); /* Draw a box around stdscr. */ box(win1, '|', '-'); /* Draw a box around win1. */ refresh(); /* Display stdscr on screen. */ wrefresh(win1); /* Display win1 on screen. */ (1) getstr(str); /* Pause. Type a few words! */ mvaddstr(22, 1, str); (2) getch(); /* Add string to win1. */ mvwaddstr(win1, 5, 5, "Hello"); wrefresh(win1); /* Add win1 to terminal scr. */ getch(); /* Pause. Press Return. */ delwin(win1); /* Delete win1. */ (3) touchwin(stdscr); /* Refresh all of stdscr. */ getch(); /* Pause. Press Return. */ endwin(); /* Ends session. */ } |
例 6-6 の説明:
図 6-4 getch マクロの例
表 7-1 は, HP C Run-Time Library (RTL) の算術関数を示しています。各関数の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)』「リファレンス・セクション」を参照してください。
関数 | 説明 |
---|---|
abs | 整数の絶対値を返す。 |
acos | ラジアン単位の引数の逆余弦 (アークコサイン) を [0,pi] ラジアンの範囲で返す。 |
acosd (Alpha only) | ラジアン単位の引数の逆余弦 (アークコサイン) を [0,180] 度の範囲で返す。 |
acosh (Alpha only) | 引数の双曲線逆余弦 (アークコサイン) を返す。 |
asin | ラジアン単位の引数の逆正弦 (アークサイン) を [ - pi/2,pi/2] ラジアンの範囲で返す。 |
asind (Alpha only) | ラジアン単位の引数の逆正弦 (アークサイン) を [ -90,90 ] 度の範囲で返す。 |
asinh (Alpha only) | 引数の双曲線逆正弦 (アークサイン) を返す。 |
atan | ラジアン単位の引数の逆正接 (アークタンジェント) を [ - pi/2,pi/2] ラジアンの範囲で返す。 |
atand (Alpha only) | ラジアン単位の引数の逆正接 (アークタンジェント) を [ -90,90 ] 度の範囲で返す。 |
atan2 | y/ x (2 つのラジアン単位の引数) の逆正接 (アークタンジェント) を [ - pi,pi] ラジアンの範囲で返す。 |
atand2 (Alpha only) | y/ x (2 つのラジアン単位の引数) の逆正接 (アークタンジェント) を [ -180,180 ] 度の範囲で返す。 |
atanh (Alpha only) | ラジアン単位の引数の双曲線逆正接 (アークタンジェント) を返す。 |
cabs | 複素数の絶対値を sqrt ( x 2 + y 2) として返す。 |
cbrt (Alpha only) | 引数の四捨五入した立方根を返す。 |
ceil | 引数に等しいか,それ以上の最小の整数を返す。 |
copysign (Alpha only) | 最初の引数を 2 番目の引数と同じ符号で返す。 |
cos | ラジアン単位の引数の余弦 (コサイン) をラジアン単位で返す。 |
cosd (Alpha only) | ラジアン単位の引数の余弦 (コサイン) を度単位で返す。 |
cosh | 引数の双曲線余弦 (コサイン) を返す。 |
cot | ラジアン単位の引数の余接 (コタンジェント) をラジアン単位で返す。 |
cotd (Alpha only) | ラジアン単位の引数の余接 (コタンジェント) を度単位で返す。 |
drand48
,
erand48
,
jrand48 , lrand48 , mrand48 , nrand48 |
均一に分布した擬似乱数シーケンスを生成する。 48 ビットの負でない倍精度浮動小数点数値を返す。 |
erf (Alpha only) | 引数のエラー関数を返す。 |
erfc (Alpha only) | (1.0 - erf (x )) を返す。 |
exp | e を底とする引数のべき乗を返す。 |
expm1 (Alpha only) | exp (x ) - 1 を返す。 |
fabs | 浮動小数点数値の絶対値を返す。 |
finite (Alpha only) | 引数が有限の数値の場合は 1 を返し,無限の数値の場合は 0 を返す。 |
floor | 引数に等しいか,それより小さい最大の整数を返す。 |
fmod | 最初の引数を 2 番目の引数で除算した余りを浮動小数点数値として計算する。 |
fp_class (Alpha only) | IEEE 浮動小数点数値のクラスを判断し, <fp_class.h> ヘッダ・ファイルから定数を返す。 |
isnan (Alpha only) | NaN の判定をする。引数が NaN の場合は 1 を返し,それ以外の場合は 0 を返す。 |
j0, j1, jn (Alpha only) | 第 1 種ベッセル関数を計算する。 |
frexp | 浮動小数点数値の小数部と指数部を計算する。 |
hypot | 2 つの引数の 2 乗の合計の平方根を返す。 |
initstate | 乱数ジェネレータを初期化する。 |
labs | 整数の絶対値を long int として返す。 |
lcong48 | 48 ビットの均一に分布した擬似乱数シーケンスを初期化する。 |
lgamma (Alpha only) | ガンマ関数の対数を計算する。 |
llabs, qabs (Alpha only) | __int64 整数の絶対値を返す。 |
ldexp | 最初の引数に,2 を底とする 2 番目の引数のべき乗を乗算した値を返す。 |
ldiv, div | 引数を除算して商と余りを返す。 |
lldiv, qdiv (Alpha only) | 引数を除算して商と余りを返す。 |
log2 (Alpha only) ,log,log10 | 引数の対数を返す。 |
log1p (Alpha only) | ln(1+ x) を正確に計算する。 |
logb (Alpha only) | 基数に依存しない引数の指数を返す。 |
nextafter (Alpha only) | y の方向に,マシンで表現可能な x の次の数値を返す。 |
nint (Alpha only) | 引数に最も近い整数値を返す。 |
modf | 最初の引数の正の小数部を返し,2 番目の引数によってアドレスが指定されるオブジェクトに整数部を代入する。 |
pow | 最初の引数を底として,2 番目の引数のべき乗を返す。 |
rand, srand | 0〜 2 31-1 の範囲で擬似乱数を返す。 |
random , srandom | よりランダムなシーケンスで擬似乱数を生成する。 |
rint (Alpha only) | ユーザが指定した現在の IEEE 丸め方向に従って,引数を整数値に丸める。 |
scalb (Alpha only) | 浮動小数点数値の指数部を返す。 |
seed48 , srand48 | 48 ビットの乱数ジェネレータを初期化する。 |
setstate | 再起動して,乱数ジェネレータを変更する。 |
sin | ラジアン単位の引数の正弦 (サイン) をラジアン単位で返す。 |
sind (Alpha only) | ラジアン単位の引数の正弦 (サイン) を度単位で返す。 |
sinh | 引数の双曲線正弦 (サイン) を返す。 |
sqrt | 引数の平方根を返す。 |
tan | ラジアン単位の引数の正接 (タンジェント) をラジアン単位で返す。 |
tand (Alpha only) | ラジアン単位の引数の正接 (タンジェント) を度単位で返す。 |
tanh | 引数の双曲線正接 (タンジェント) を返す。 |
trunc (Alpha only) | 引数を整数値に切り捨てる。 |
unordered (Alpha only) | 引数のいずれか一方または両方が NaN の場合は 1 を返し,それ以外の場合は 0 を返す。 |
y0, y1, yn (Alpha only) | 第 2 種ベッセル関数を計算する。 |
前へ | 次へ | 目次 | 索引 |