キーボード入力
termiosやterminfoでやったことと同様のキーボード入力制御ができる.
キーボードから入力された文字入力を読みとるには以下の関数がある.
- int getch(void);
- 入力文字を(1文字)取得.
- int getstr(char *str);
- 入力文字列を取得.
- int getnstr(char *str, int n);
- 入力文字列(n文字まで)を取得.
- int scanw(char *fmt [, arg] ...);
- curses版scanf.
カノニカルモードと非カノニカルモードに対応するものがcursesにもあって,それがcooked modeとcbreak modeである.cooked modeだと入力はリターンを押すまでプログラムには渡されない.そしてcbreak modeだとキーを押すと即座にプログラムから利用できる.cbreak modeと非カノニカルモードとの違いは,非カノニカルモードはリターンを押すまで入力を編集できるが,cbreakでは編集できないという点だろうか.cooked modeにするには,
int nocbreak(void);を呼び出す.逆にcbreak modeにするには
int cbreak(void);を呼び出す.関数名的にはcookedが標準でcbreakであるか否かを設定するような雰囲気だが,実際にはデフォルトがcooked modeかどうかは保証されないので,どちらかを明示的に呼び出す必要がある.
ここではgetch,getnstrを使用してcbreakモードとnocbreakモードの違いを見てみるサンプルを2つ作成してみた.まずgetchを使用するサンプル.
そしてgetnstrを使用するサンプル.
シグナルなどを生成する特殊文字を扱えなくするには
int raw(void);を呼ぶ.逆に扱えるようにするには
int noraw(void);を呼び出す.
入力をエコーしないようにするには
int noecho(void);逆にエコーするようにするには
int echo(void);を呼び出す.
以上にあげた以外にもhalf-delayモードにしたり,タイムアウト時間を設定したりする関数があるようだが,キリがない(というかちょっと飽きた)ので,man参照.

