ncursesの使い方


デバッグ用に今の状況を表示させたいのだけれど、 単に表示するだけだと流れていってしまうし、良く分からない。 という状況があった。

X-Windowに表示させるのも良いのだけれど、マシンパワーを無駄に使ってしまう。 それよりは、ターミナルに表示させた方が無駄が少なかろうと、 CRT操作ライブラリはないかと探してみたところ、 linuxではncursesが良いだろうという結論になった。 触ってみた感じでは、X-Windowとプログラム法は同じ感じでした。

他のページでも繰り返していますが、あくまで備忘録です。 全面的に信用しないでください。


1.基本

initscr()」で画面操作が始まり、「endwin()」で終わる。 「mvprintw(x, y, format[,arg] )」で変更内容をきめ、 「refresh()」で変更を画面に反映させる。 mvprintwの書式はprintfと同じ。 その例が下のようになる。

例:

int main(void)
{
  int i;

  initscr();
  for(i=0; i<5 ; i++){
    mvprintw(20-i%20, 5, "d", i);
    sleep(1);
    refresh();
  }
  endwin();
  return 0;
}

復習

initscr()
画面操作を開始
endwin()
画面操作終了
mvprintw(x, y, format[,arg] )
右向きがx方向、下向がy方向の座標として、左上を(0,0)とする。 printfと同じ書式で文字をプリントする(正確にはすぐには変更されない)。
refresh()
画面を最新の状況にする。 X-Windowでのrefreshと同じような感じ(だと思う)。


2.キー入力を受け付ける

keypad(stdscr, TRUE);という指定をしておけば getstr()という関数で文字列を受け取ることができる。 使い方はgets()とほとんど同じ。

例:

int main(void)
{
  char str[10];

  initscr();

  keypad(stdscr, TRUE);
  while(getstr(str))
    ;
  mvprintf(10, 5, "%s", str);
  refresh();  
  sleep(1);
  endwin();  
}

復習

keypad(WINDOW *win, bool bf)
*winは、標準的な場合は「stdscr」を使う。 これで足りない場合はnewwinであたらしいwindowを作成する。
bfがTRUEの場合、キー入力を受け付け、FALSEの場合、キー入力を受け付けな い。
getstr(char *str)
リターンが来るまでを、strポインタにいれる。


参考にしたもの
$ man ncurses
s