ncurses - CRT screen handling and optimization package |
#include <ncurses.h> |
ncurses ライブラリルーチンでは、端末に依存しない方法で、それなりに最適 化してキャラクタ画面を更新できます。 ncurses ルーチンは、System V Release 4 UNIX の curses(3) ライブラリをエ ミュレートしますが、ソース形式で自由に再分配できます。 System V Release 4 UNIX の curses との違いについては、それぞれのマニュアルページのバグセ クションで説明します。違いは少ししかなく、 ncurses が発展するにつれ、違 いは少なくなります。 このルーチンを使用しているプログラムは、-lncurses オプション、または(生 成 された場合は) -ldcurses や -lpcurses などのデバッグライブラリの 1 つ を使用してリンクする必要があります。 dcurses ライブラリは、curses ア ク ショ ン を記述したトレースログを生成します。 pcurses ライブラリは、プロ ファイル化をサポートしています。 ncurses パッケージでは、画面全体、ウィンドウ、パッドの操作、ウィンド ウ と パッドへの出力、端末入力の読込み、端末、ncurses 入力と出力のオプショ ンの制御、環境クエリルーチン、カラー操作、ソフトラベ ル キー の 使 用、 terminfo 機能、低レベル ncurses ルーチンへのアクセスがサポートされてい ます。 ルーチンを初期化するには、ルーチン initscr か newterm を呼び出 し て か ら、 ウィ ン ドウと画面を処理するその他のルーチンを使用する必要がありま す。終了前には、ルーチン endwin を呼び出してください。エコーせずに 1 回 に 1 キャラクタずつ入力するには (インタラクティブで画面主導のほとんどの プログラムで必要)、以下のシーケンスを使用します。 initscr(); cbreak(); noecho(); ほとんどのプログラムでは、以下のシーケンスも使用します。 nonl(); intrflush(stdscr,FALSE); keypad(stdscr,TRUE); ncurses プログラムを実行する前には、端末のタブストップを設定し、定義 さ れ ていれば初期化文字列を出力する必要があります。これは、シェル環境変数 TERM をエクスポートした後でコマンド tput init を実行すれば行なえま す。 [詳細については、terminfo(5) を参照してください。] ncurses ライブラリでは、CRT 画面の全体か一部を表すキャラクタの 2 次元配 列とみなせる、windows というデータ構造を操作できます。デフォルトウィ ン ド ウは stdscr というもので、サイズは端末画面のサイズになっています。そ の他のウィンドウは、newwin で作成できます。 ウィンドウは、WINDOW * のように宣言した変数で参照します。このデータ構造 は、 マ ニュ ア ル セ クション 3 のページで解説しているルーチン (名前が 「curs_」で始まるもの)で操作します。このうち最も基本的なルー チ ン は、 move と addchです。このルーチンの一般的なバージョンは、名前が w で始ま ります。このバージョンではウィンドウを指定できます。 w で始まらないルー チンは stdscr に影響します。 ルーチンを使用してウィンドウを操作した後では refresh が呼び出され、ユー ザの CRT 画面を stdscr のように表示する指示が ncurses に出さ れ ま す。 ウィ ン ドウのキャラクタのタイプは実際には chtype (キャラクタと属性デー タ)なので、キャラクタのその他の情報もそれぞれのキャラクタとともに保存で きます。 パッ ドという特殊なウィンドウも操作できます。パッドは画面のサイズに制限 されないウィンドウで、パッドの内容は完全に表示する必要がありません。 詳 細については curs_pad(3) を参照してください。 キャ ラクタの画面への描画の他に、ビデオ属性とカラーもサポートされている ので、下線、リバースビデオ、カラーなどのモードで、このような表示拡張 機 能 をサポートしている端末にキャラクタを表示できます。ライン描画キャラク タを出力するように指定することもできます。 ncurses は、入力時にエスケー プシーケンスを送信する矢印キーとファンクションキーを 1 つの値に変換でき ます。ビデオ属性、ライン描画キャ ラ ク タ、 入 力 値 で は、A_REVERSE、 ACS_HLINE、KEY_LEFT のような、<ncurses.h> に定義された名前が使用されま す。 環境変数 LINES と COLUMNS を設定した場合、またはウィンドウ環境でプロ グ ラムを実行している場合、terminfo で読み込まれた情報は、環境の行とカラム の情報で上書きされます。これは、画面のサイズを変更できる、 AT&T 630 レ イヤなどで実行しているプログラムに影響します。 環 境 変 数 TERMINFO を定義すると、ncurses を使用しているプログラムは、 ローカルの端末定義をチェックしてから標準の場所にチェックインします。 た とえば TERM を att4424 に設定すると、コンパイルされた端末定義は以下の場 所で見つかります。 @TERMINFO@/a/att4424 (a は、大きなディレクトリの作成を避けるた め に att4424 の 最 初 の文字をコピーしたものです。) しかし TERMINFO を $HOME/myterms に設定すると、ncursesは以下の場所を最初にチェックします。 $HOME/myterms/a/att4424 チェックが失敗に終わると、次に以下をチェックします。 @TERMINFO@/a/att4424 こ れは、試験用定義を開発している場合、または @TERMINFO@ の書込み権がな い場合に便利です。 整数変数 LINES と COLS は、<ncurses.h>に定義されています。この整数変 数 に は、initscr が画面のサイズに従って値を入力します。定数 TRUE と FALSE の値は、それぞれ 1 と 0 になっています。 ncurses ルーチンは、WINDOW * 変数 curscr も定義します。この変数は、ごみ を 含む画面のクリアや再描画など、特定の低レベル操作で使用します。curscr は、少数のルーチンでしか使用されないでしょう。 |
ルーチン名と引数名 |
多くの ncurses ルーチンには複数のバージョンがあります。 w で始まる ルー チンにはウィンドウ引数が必要です。 p で始まるルーチンにはパッド引数が必 要です。接頭語がないルーチンは、一般的に stdscr を使用します。 mv で始まるルーチンでは、移動先の y 座標と x 座標がなければ、適切なアク ションを実行できません。ルーチンが mv で始まるということは、move が呼び 出されてから別のルーチンが呼び出されるということです。 y 座標はウィンド ウの行を、x 座標はカラムを常に表します。左上は (1,1) ではなく常に (0,0) です。 mvw で始まるルーチンには、ウィンドウ引数と x 座標と y 座標が必要で す。 ウィンドウ引数を指定してから座標を指定してください。 どのケースでも、win は影響を受けるウィンドウで、 pad は影響を受けるパッ ドです。win と pad は、常に WINDOW 型のポインタです。 オプション設定ルーチンでは、値が TRUE か FALSE になっている論理フ ラ グ bf が 必要です。 bf の型は常に bool です。変数 ch と attrs の型は常に chtype です。型 WINDOW, SCREEN, bool, chtype は、 <ncurses.h> で定義 さ れています。 TERMINAL 型は、<term.h> で定義されています。その他すべての 引数は整数です。 |
ルーチン名インデックス |
以下の表は、各 ncurses ルーチン、およびその解説が載っているマニュ ア ル ページの名前をまとめたものです。 ncurses ルーチン名 マニュアルページ名 ___________________________________________ addch curs_addch(3) addchnstr curs_addchstr(3) addchstr curs_addchstr(3) addnstr curs_addstr(3) addstr curs_addstr(3) attroff curs_attr(3) attron curs_attr(3) attrset curs_attr(3) baudrate curs_termattrs(3) beep curs_beep(3) bkgd curs_bkgd(3) bkgdset curs_bkgd(3) border curs_border(3) box curs_border(3) can_change_color curs_color(3) cbreak curs_inopts(3) clear curs_clear(3) clearok curs_outopts(3) clrtobot curs_clear(3) clrtoeol curs_clear(3) color_content curs_color(3) copywin curs_overlay(3) curs_set curs_kernel(3) def_prog_mode curs_kernel(3) def_shell_mode curs_kernel(3) del_curterm curs_terminfo(5) delay_output curs_util(3) delch curs_delch(3) deleteln curs_deleteln(3) delscreen curs_initscr(3) delwin curs_window(3) derwin curs_window(3) doupdate curs_refresh(3) dupwin curs_window(3) echo curs_inopts(3) echochar curs_addch(3) endwin curs_initscr(3) erase curs_clear(3) erasechar curs_termattrs(3) filter curs_util(3) flash curs_beep(3) flushinp curs_util(3) getbegyx curs_getyx(3) getch curs_getch(3) getmaxyx curs_getyx(3) getparyx curs_getyx(3) getstr curs_getstr(3) getsyx curs_kernel(3) getwin curs_util(3) getyx curs_getyx(3) halfdelay curs_inopts(3) has_colors curs_color(3) has_ic curs_termattrs(3) has_il curs_termattrs(3) hline curs_border(3) idcok curs_outopts(3) idlok curs_outopts(3) immedok curs_outopts(3) inch curs_inch(3) inchnstr curs_inchstr(3) inchstr curs_inchstr(3) init_color curs_color(3) init_pair curs_color(3) initscr curs_initscr(3) innstr curs_instr(3) insch curs_insch(3) insdelln curs_deleteln(3) insertln curs_deleteln(3) insnstr curs_insstr(3) insstr curs_insstr(3) instr curs_instr(3) intrflush curs_inopts(3) is_linetouched curs_touch(3) is_wintouched curs_touch(3) isendwin curs_initscr(3) keyname curs_util(3) keypad curs_inopts(3) killchar curs_termattrs(3) leaveok curs_outopts(3) longname curs_termattrs(3) meta curs_inopts(3) move curs_move(3) mvaddch curs_addch(3) mvaddchnstr curs_addchstr(3) mvaddchstr curs_addchstr(3) mvaddnstr curs_addstr(3) mvaddstr curs_addstr(3) mvcur curs_terminfo(5) mvdelch curs_delch(3) mvderwin curs_window(3) mvgetch curs_getch(3) mvgetstr curs_getstr(3) mvinch curs_inch(3) mvinchnstr curs_inchstr(3) mvinchstr curs_inchstr(3) mvinnstr curs_instr(3) mvinsch curs_insch(3) mvinsnstr curs_insstr(3) mvinsstr curs_insstr(3) mvinstr curs_instr(3) mvprintw curs_printw(3) mvscanw curs_scanw(3) mvwaddch curs_addch(3) mvwaddchnstr curs_addchstr(3) mvwaddchstr curs_addchstr(3) mvwaddnstr curs_addstr(3) mvwaddstr curs_addstr(3) mvwdelch curs_delch(3) mvwgetch curs_getch(3) mvwgetstr curs_getstr(3) mvwin curs_window(3) mvwinch curs_inch(3) mvwinchnstr curs_inchstr(3) mvwinchstr curs_inchstr(3) mvwinnstr curs_instr(3) mvwinsch curs_insch(3) mvwinsnstr curs_insstr(3) mvwinsstr curs_insstr(3) mvwinstr curs_instr(3) mvwprintw curs_printw(3) mvwscanw curs_scanw(3) napms curs_kernel(3) newpad curs_pad(3) newterm curs_initscr(3) newwin curs_window(3) nl curs_outopts(3) nocbreak curs_inopts(3) nodelay curs_inopts(3) noecho curs_inopts(3) nonl curs_outopts(3) noqiflush curs_inopts(3) noraw curs_inopts(3) notimeout curs_inopts(3) overlay curs_overlay(3) overwrite curs_overlay(3) pair_content curs_color(3) pechochar curs_pad(3) pnoutrefresh curs_pad(3) prefresh curs_pad(3) printw curs_printw(3) putp curs_terminfo(5) putwin curs_util(3) qiflush curs_inopts(3) raw curs_inopts(3) redrawwin curs_refresh(3) refresh curs_refresh(3) reset_prog_mode curs_kernel(3) reset_shell_mode curs_kernel(3) resetty curs_kernel(3) restartterm curs_terminfo(5) ripoffline curs_kernel(3) savetty curs_kernel(3) scanw curs_scanw(3) scr_dump curs_scr_dmp(3) scr_init curs_scr_dmp(3) scr_restore curs_scr_dmp(3) scr_set curs_scr_dmp(3) scrl curs_scroll(3) scroll curs_scroll(3) scrollok curs_outopts(3) set_curterm curs_terminfo(5) set_term curs_initscr(3) setscrreg curs_outopts(3) setsyx curs_kernel(3) setterm curs_terminfo(5) setupterm curs_terminfo(5) slk_attroff curs_slk(3) slk_attron curs_slk(3) slk_attrset curs_slk(3) slk_clear curs_slk(3) slk_init curs_slk(3) slk_label curs_slk(3) slk_noutrefresh curs_slk(3) slk_refresh curs_slk(3) slk_restore curs_slk(3) slk_set curs_slk(3) slk_touch curs_slk(3) standend curs_attr(3) standout curs_attr(3) start_color curs_color(3) subpad curs_pad(3) subwin curs_window(3) syncok curs_window(3) termattrs curs_termattrs(3) termname curs_termattrs(3) tigetflag curs_terminfo(5) tigetnum curs_terminfo(5) tigetstr curs_terminfo(5) timeout curs_inopts(3) touchline curs_touch(3) touchwin curs_touch(3) tparm curs_terminfo(5) tputs curs_terminfo(5) typeahead curs_inopts(3) unctrl curs_util(3) ungetch curs_getch(3) untouchwin curs_touch(3) use_env curs_util(3) vidattr curs_terminfo(5) vidputs curs_terminfo(5) vline curs_border(3) vwprintw curs_printw(3) vwscanw curs_scanw(3) waddch curs_addch(3) waddchnstr curs_addchstr(3) waddchstr curs_addchstr(3) waddnstr curs_addstr(3) waddstr curs_addstr(3) wattroff curs_attr(3) wattron curs_attr(3) wattrset curs_attr(3) wbkgd curs_bkgd(3) wbkgdset curs_bkgd(3) wborder curs_border(3) wclear curs_clear(3) wclrtobot curs_clear(3) wclrtoeol curs_clear(3) wcursyncup curs_window(3) wdelch curs_delch(3) wdeleteln curs_deleteln(3) wechochar curs_addch(3) werase curs_clear(3) wgetch curs_getch(3) wgetnstr curs_getstr(3) wgetstr curs_getstr(3) whline curs_border(3) winch curs_inch(3) winchnstr curs_inchstr(3) winchstr curs_inchstr(3) winnstr curs_instr(3) winsch curs_insch(3) winsdelln curs_deleteln(3) winsertln curs_deleteln(3) winsnstr curs_insstr(3) winsstr curs_insstr(3) winstr curs_instr(3) wmove curs_move(3) wnoutrefresh curs_refresh(3) wprintw curs_printw(3) wredrawln curs_refresh(3) wrefresh curs_refresh(3) wscanw curs_scanw(3) wscrl curs_scroll(3) wsetscrreg curs_outopts(3) wstandend curs_attr(3) wstandout curs_attr(3) wsyncdown curs_window(3) wsyncup curs_window(3) wtimeout curs_inopts(3) wtouchln curs_touch(3) wvline curs_border(3) |
ルー チンの解説で特記されていなければ、整数を戻すルーチンは、エラーが発 生した場合は ERR を戻し、問題がない場合は ERR 以外の整数値を戻します。 setscrreg, wsetscrreg, getyx, getbegyx, getmaxyx 以外のすべてのマ ク ロ は、w バー ジョ ン の 値 を 戻 します。 setscrreg, wsetscrreg, getyx, getbegyx, getmaxyx の戻り値は定義されていません。(すなわち、割り当て ス テートメントの右側では使用しないでください。) ポインタを戻すルーチンは、エラーが発生すると NULL を戻します。 |
ルー チンの詳細については、terminfo(5)、および名前が「curs_」で始まるセ クション 3 のページを参照してください。 |
ヘッダファイル <ncurses.h> を取り込むと、ヘッダファイル <stdio.h> と <unctrl.h> が自動的に取り込まれます。 |