ncursesライブラリの関数
ncursesライブラリに収録されている関数群を紹介しましょう。多彩な機能が網羅されています。
基本的な画面表示関数
表1のような関数が用意されています。
カーソル位置を移動して任意の位置から文字列を表示したり、文字や行を挿入するなどの機能があります。
scrollok関数とwscrl関数について補足しておきます。
標準入出力を使ってprintf関数などで文字列を出力した場合、文字列が画面の最下行に達すると、それ以降は画面が上にスクロールしていきます。これは、標準入出力がディスプレイもファイルもプリンタも同じ形式で連続的なデータを扱う仕様となっているためです。
しかしncursesライブラリの関数群には、このような制約はありません。文字列データは、単純にカーソル位置から順に出力されていきます。そのため、画面のスクロールが必要なときには、明示的にスクロールを指定しなければなりません。
まず
scrollok(stdscr, TRUE);
としてスクロール可能な状態にし、その後
wscrl(stdscr, <行数>);
という形でスクロールさせます。
表1:基本的な画面表示関数
move |
機能 |
カーソルを任意の位置(座標)に移動 |
宣言 |
int move(int new_y, int new_x); |
説明 |
引数
new_y:移動先y座標
new_x:異動先x座標
座標は、左端をx=0、最上行をy=0とし、右方向にxが増加、下方向にyが増加する第四象限座標系※で指定する。xの最大値は79、yの最大値は24 |
addch |
機能 |
カーソル位置に1文字表示 |
宣言 |
int addch(chtype char_to_add); |
説明 |
引数
char_to_add:表示する文字
chtype型は、Linuxではlong int型となる |
printw |
機能 |
カーソル位置から右方向に文字列を表示 |
宣言 |
int printw(char *format, ...); |
説明 |
引数
format:printf関数と同じ書式指定文字列。これに続いて、変数を列挙する |
mvprintw |
機能 |
指定した位置から右方向に文字列を表示 |
宣言 |
int printw(int x, int y, char *format, ...); |
説明 |
引数
x,y:出力を開始する座標
format:printf関数と同じ書式指定文字列。これに続いて、変数を列挙する。
move関数とprintw関数を組み合わせた関数 |
insch |
機能 |
カーソル位置に文字を挿入し、それより右の文字列を右に1文字分ずらす |
宣言 |
int insch(int char_to_insert); |
説明 |
引数
char_to_insert:挿入する文字
この場合の文字はint型 |
insertln |
機能 |
カーソル位置に空行を挿入し、それより下の行を下方向に1行分スクロールする |
宣言 |
int insertln(void); |
delch |
機能 |
カーソル位置の文字を削除し、それより右の文字列を左に1文字分ずらす |
宣言 |
int delch(void); |
deletln |
機能 |
カーソル位置の行を削除し、それより下の行を上に1行分スクロールする |
宣言 |
int deleteln(void); |
clear |
機能 |
画面全体を消去 |
宣言 |
int clear(void); |
scrolllok wscrl |
機能 |
画面のスクロール |
説明 |
scrolllok(stdscr, TRUE);
としてスクロール可能な状態にし、その後
wscrl(stdscr, <行数>);
という形で<行数>を指定してスクロールさせる |
yは絶対値
特殊な出力機能
表2のような関数が用意されています。
カーソル位置の文字や文字列を読み取ったり、文字の属性を設定したりできます。
文字属性に関しては表3を参照してください。
表2:特殊な出力機能
inch |
機能 |
カーソル位置に表示されている文字を読み取る |
宣言 |
chtype inch(void); |
説明 |
戻り値:読み取った1文字 |
innstr |
機能 |
カーソル位置から右の文字列を読み取る |
宣言 |
int innstr(char *string, int num); |
説明 |
引数
string:読み取った文字列を保存する配列へのポインタ
num:読み取る文字数 |
attron |
機能 |
文字列の属性を変更する |
宣言 |
int attron(chtype attribute); |
説明 |
引数
attribute:表3に示す記号定数で属性を指定
この関数を実行すると、それ以降の文字はすべて指定した属性となる |
attroff |
機能 |
attron関数で設定した文字属性を解除する |
宣言 |
int attroff(chtype attribute); |
機能 |
引数
attribute:解除したい属性。表3の記号定数で指定する。
注意:通常のコンソールモードではすべての属性が有効だが、X Window System上のX Termなどでは、点滅属性(A_BLINK)が無効となる |
表3:attron、attrof関数で文字属性を示す記号定数
記号定数 |
属性 |
A_BOLD |
太字 |
A_BLINK |
点滅 |
A_DIM |
薄字 |
A_REVERSE |
反転 |
A_UNDERLINE |
下線 |
カラー表示機能
表4のような関数が用意されています。
文字の色は前景色と背景色のペアを設定し、そのペア番号を使って指定します。
表4:カラー表示機能の関数
has_colors |
機能 |
端末がカラー表示可能かどうかを調べる |
宣言 |
bool has_colors(void); |
説明 |
戻り値
可能:TRUE
不可能:FALSE |
start_color |
機能 |
文字をカラー表示できるようにする |
宣言 |
int start_color(void); |
init_pair |
機能 |
カラーペア番号の定義 |
宣言 |
int init_pair(short pair_number, int foreground, int background); |
説明 |
引数
pair_number:ペア番号
foreground:前景色
background:背景色
表示する色を前景色(文字の色)と背景色との組み合わせ(カラーペア)で指定し、そのペアに番号を付けて利用する。
前景色と背景色は、表5に示す記号定数で指定する |
COLOR_PAIR |
機能 |
表示する文字の色をカラーペアで指定する |
宣言 |
int COLOR_PAIR(int pair_number); |
説明 |
引数
pair_number:init_pair関数で設定したカラーペア番号
この関数でカラーペアを指定した後、実際の色表示はattron関数で行う。
たとえばカラーペア番号3のペアを使いたいなら、以下のようにする
attron(COLOR_NUMBER(3)); |
表5:色を示す記号定数
記号定数 |
色 |
COLOR_BLACK |
黒 |
COLOR_RED |
赤 |
COLOR_BLUE |
青 |
COLOR_GREEN |
緑 |
COLOR_CYAN |
水色 |
COLOR_YELLOW |
黄 |
COLOR_MAGENTA |
紫 |
COLOR_WHITE |
白 |
基本的な入力関数
1文字や文字列の入力を行うための関数群です。カーソルキーや[Insert][Delete]などの特殊なキーの入力も行えます。
表6のような関数が用意されています。特殊なキーの判別に用いる記号定数については、表7を参照してください。
表6:基本入力関数
echo noecho |
機能 |
入力された文字を画面に表示(エコーバック)するかどうか設定する |
宣言 |
int echo(void);
int noecho(void); |
説明 |
echo関数を呼び出すと画面表示を行い、noecho関数を呼び出すと画面表示を行わなくなる。
標準では画面表示を行う状態となっている。
カーソルキーなどの入力を受け取る場合にnoecho関数を使用する |
scanw |
機能 |
書式に従って複数のデータを変数に受け取る |
宣言 |
int scanw(char *format, ...); |
説明 |
引数
format:scaf関数と同じ書式指定文字列。
これに続けて、入力されたデータを保存する変数を列挙する |
getstr getnstr |
機能 |
複数の文字列を受け取り、変数に格納する |
宣言 |
int getstr(char *buf);
int getnstr(char *buf, int maxlen); |
説明 |
引数
buf:文字列を保存するchar型配列へのポインタ
maxlen:入力する文字列の最大文字数 |
getch |
機能 |
押されたキーの1文字を返す |
宣言 |
int getch(void); |
説明 |
戻り値:入力された文字。
通常はエコー(画面への反映)が有効となっているため[Enter]キーは不要で、キーを押すとその文字が即座に戻り値となって返ってくる。
noecho関数を呼び出してエコーを無効にした場合は、キーを押した後に[Enter]キーを押す必要がある |
noecho cbreak keypad |
機能 |
特殊キーの入力 |
説明 |
カーソルキーやファンクションキーなど文字を持たない特殊キーの入力を受け取るには、まず以下のようにする。
noecho();
cbreak();
keypad(stdscr, TRUE);
これ以降、getch関数で特殊キーを受け取れるようになる。
特殊キーは、表7に示す記号定数で判別する。
この設定を行った後、元の通常の入力に戻すには、
echo();
nocbreak();
とする |
表7:特殊キーを示す記号定数
記号定数 |
キー |
KEY_UP |
↑ |
KEY_DOWN |
↓ |
KEY_LEFT |
← |
KEY_RIGHT |
→ |
KEY_BACKSPACE |
Back Space |
KEY_IC |
Insert |
KEY_DC |
Delete |
KEY_HOME |
Home |
KEY_END |
End |
KEY_NPAGE |
Page Down |
KEY_PPAGE |
Page Up |
KEY_F(1)~KEY_F(12) |
F1~F12 |
|
|
|