World!!!'''initscr()''':端末を初期化(一部の実装では画面をクリア)する。cursesライブラリを使う際には必ず最初に呼ぶこと。'''refresh()''':画面を更新する。printw()などで行った画面の変更はrefresh()を呼んだ時に始めて実際の画面に反映される。^J背景にある考え方としては、プログラマが画面上の複数の箇所を変更してから画面を更新するというやり方を可能にするため。'''endwin()''':最後にendwin()を呼ばないと、プログラムの終了後に端末の振る舞いがおかしくなるかもしれない。初期化'''raw()'''と'''cbreak()''':通常、端末のドライバではユーザーが復帰・改行を入力するまでバッファされるが、多くのプログラムではユーザーがキーを押した瞬間に得られたほうが都合が良い。した要求を満たすため、raw()とcbreak()は行単位でのバッファリングを無効にする。^J両者の違いは制御文字(Ctrl-CとかCtrl-Z)の扱いで、raw()モードではそれらの制御文字は直接プログラムに渡されるのに対し、cbreak()モードでは、端末のドライバによって解釈される(シグナルが発生する)。'''echo()'''と'''noecho()''':エコー(入力された文字の画面表示)を制御する。noecho()を呼ぶとエコーがオフになる。'''keypad()''':F1,F2,矢印キーのようなファンクションキーの読み取りを可能にする。'''halfdelay()''':タイムアウト付きのcbreak()モード(?)。×10秒入力が無ければエラーを返す。Example入力されたキーを表示する。WindowについてWindowっていう概念があります。初期化したときにはstdscrっていう名前のデフォルトWindowが作られて、簡単な作業ならこの1枚のWindowを使えば十分です。cursesではWindowを複数作って特定のWindowに対して操作を行うことができます。その場合、頭に'w'がついた関数を使いましょう。refresh();という処理は、こんな風になります。wrefresh(win);通常、'w'なしの関数はWindowとしてstdscrを指定した'w'付きの関数のマクロになってます。3種類の関数があります。類の関数群addch()系での属性(文字飾り?)の指定には2つの方法がある。文字と希望する属性マクロのORをとる:'''ncurses.h'''に記述されている属性マクロを使ってaddch()を次のような感じで呼ぶ。A_UNDERLINE);属性指定関数を使う:'''attrset()''','''attron()''','''attroff()'''のような関数を使う。cursesは文字ベースのグラフィック用の特殊な文字を提供していて、テーブルや水平・垂直線などを描くこともできます。それらの特殊文字については、ncurses.hの中のACS_で始まるマクロを探してください(以下、そのマクロ)。ACS_PLUS'''mvaddch()''':与えられた位置にカーソルを移動して文字を出力する。類の関数群'''printw()'''と'''wprintw()''':printf()と一緒'''mvprintw()'''と'''mvwprintw()''':move()付きのprintw()'''vwprintw()''':vprintf()のように、個数不定の引数を受け取って表示する。類の関数群addstr()は文字列をWindowに表示するための関数で、文字列について、一文字ずつaddch()を呼ぶのと同じです。'''mvwaddstr()'''の4つの関数があります。'''mvwaddnstr()'''もあります。入力関数ユーザーからの入力用にも3種類の関数があります。端末から1文字読み込むための関数ですが、注意点として、使う前に'''cbreak()'''をあらかじめ呼んでおかないと、ユーザーがリターンキー(かEOF)を入力するまで待ちに入ってしまいます。ひとつ、良く組み合わせて使われる関数は、ユーザーの入力した文字の画面表示を無効にする'''noecho()'''です。'''scanw()'''類の関数'''scanw()'''と'''mvscanw()''':読み取るべき行が'''getstr()'''(後述)によって与えられる場合、この関数の使い方はsscanf()に似ています。端末から文字列を取得する場合に使う関数群です。'''mvwgetstr()'''とかはバッファオーバーフローの危険性があるので使ってはいけない。'''mvwgetnstr()'''は、最大n文字までしか読み込まない(ことにより、オーバーフローを防ぐ)関数群。n文字以上の入力しようとするとbeepが発生して無視される(curs_getstr(3X))。br)''':枠線を引く。文字で、0を指定するとデフォルトの枠線文字を使う。'''wborder()'''でWindow指定も可。この関数は''''w'付き命名規則を無視'''している。'''whline()'''でWindow指定。'''wvline()'''でWindow指定。'''mvwhline()'''でWindow指定。'''mvwvline()'''でWindow指定。b)''':色ペアの定義。&b)''':指定された色の内容を取得する。&b)''':指定された色ペアの内容を取得する。キーボード入力'''getch()'''で入力されたキーを取得し、処理する。x)''':指定されたWindowが子Windowの場合、その子Windowの親Windowからの相対座標を取得するマクロ。子Windowで無い場合はy,xに-1がセットされる。x)''':指定されたWindowの始点の座標を取得するマクロ。x)''':指定されたWindowのサイズを取得するマクロ。その他の機能'''curs_set(n)''':カーソルの表示状態を切り替える。一時的にcursesモードを抜ける'''def_prog_mode()'''を呼び出して現在の端末のモードを保存し、'''endwin()'''を呼ぶとcursesモードを一時的に抜けることができる。一度抜けたcursesモードに戻るには、'''reset_prog_mode()'''を呼び出し、'''refresh();'''で画面を再描画する。ライブラリncursesはWindowの重なりの処理は行わないので、Panelライブラリを使う。基本的な流れPanelに貼り付けるWindowを'''newwin()'''を使って作成する。ライブラリメニューを作成するための拡張。基本的な流れcursesを初期化する'''new_item()'''を使って新しいアイテムを作成する。アイテムの名前と解説を指定できる。'''new_menu()'''を関連付けるアイテムと共に呼び出して、メニューを作成する。'''menu_post()'''でメニューを貼り付け、画面をrefreshする。ユーザーの入力をループを使って処理し、'''menu_driver()'''を使ってメニューを更新する。'''menu_unpost()'''を使ってメニューの掲示をやめる。'''free_menu()'''でメニューに割り当てられたメモリ領域を開放する。'''free_item()'''でアイテムに割り当てられたメモリ領域を開放する。cursesを終了する。menu_driver()'''menu_driver()'''関数は以下の形式で呼び出す。'''c'''には、次のリクエストを指定する。パターンバッファにその文字を加え、一致する次のアイテムに移動する。^J一致するアイテムが無い場合E_NO_MATCHを返す。メニューの体裁を最大rows行cols段にする。第1引数にヌルポインタを渡すと、デフォルトの値を設定する。set_menu_opts()メニューのオプションを指定する。optsには以下の値を指定する。ORを使って複数を同時に指定することも可能。attr)''':メニュー内の選択されたアイテムの属性を指定する。attr)''':メニュー内の非選択状態のアイテムの属性を指定する。attr)''':メニュー内の選択不可能なアイテムの属性を指定する。ライブラリフォームを作成する拡張。基本的な流れcursesを初期化する'''new_field()'''を使って入力欄を作成する。ここで高さや幅、フォームの座標を指定できる'''new_form()'''を関連付ける入力欄を指定して呼び出し、フォームを作成する。'''form_post()'''でフォームを貼り付け、画面を更新する。ループを使ってユーザーの入力を処理し、'''form_driver()'''を使ってフォームを更新する。'''form_unpost()'''を使ってフォームの掲示をやめる。offscreenは、指定された行数分の隠れたバッファを準備し、スクロールを使った入力を可能とする。文字(?)の入力が可能となる。nbuffersは、入力欄と同じサイズのバッファを指定された個数準備する。ようだが手元の環境では大きな値を指定するとfree_field()が以下のようなあやしい警告を出すので、非常に危険な匂いがする。**fields''');''':new_field()を使って作成された入力欄へのポインタの配列を受け取り、フォームを作成する。入力欄の型の指定と検証デフォルトでは入力欄は任意の入力を受け取るが、'''set_field_type()'''関数を使って入力値の型を宣言すると、入力値のチェックができるようになる。...''');''':fieldは型を宣言する入力欄へのポインタ。typeは入力欄の型。型によって第3引数以下が必要になる。''TYPE_ALNUM'':英数字。第3引数に最小の文字数を指定する。''TYPE_ALPHA'':英字。第3引数に最小の文字数を指定する。''TYPE_ENUM'':指定された文字列のセット。型の)受け付ける文字列のリストを指定する。4番目のint型のフラグは大文字小文字を区別するかどうかを指定する。5番目のフラグでは、入力の部分マッチがユニークであるべきかどうかを指定する(このフラグがオフなら複数の要素が前方一致検索によってマッチする)。文字列のリストはコピーされないので、'''自動変数を使ってはならない'''。''TYPE_INTEGER'':atoi(3)でパーズ可能な整数。第3引数には精度(printfでの".#ld"相当)、4,5引数には最小値と最大値を指定する。最大値が最小値以下なら範囲指定は無視される。''TYPE_NUMERIC'':(小数部付きの)数字。第3引数には精度(printfでの".#f"相当)、4,5引数にはdouble型の最小値と最大値を指定する。最大値が最小値以下なら範囲指定は無視される。''TYPE_REGEXP'':正規表現。*型の)正規表現を指定する。正規表現についてはregcomp(3X)およびregexec(3X)を参照。注意点として、正規表現は入力全体とマッチしなければならない。''TYPE_IPV4'':IPv4アドレス。disconnected)の移動。justmode''');''':行端ぞろえの指定。attr''');''':入力欄の前景(文字)の属性を指定する。*field''');''':入力欄の前景の属性を取得する。attr''');''':入力欄の背景の属性を指定する。*field''');''':入力欄の背景の属性を取得する。pad''');''':入力欄の穴埋め(未入力部分の)文字を指定する。*field''');''':入力欄の穴埋め文字を取得する。opts''');''':入力欄のオプションをセットする。指定可能なオプションは下表参照。opts''');''':入力欄に指定されたオプションを追加する。指定可能なオプションは下表参照。opts''');''':入力欄から指定されたオプションを取り除く。指定可能なオプションは下表参照。オフの場合、表示が抑制される。入力欄を変更可能にする。オフの場合、移動キー操作でこの入力欄にはいけなくなる。入力されたデータをそのまま表示する。オフにすると表示されなくなるのでパスワード入力欄等で利用する。入力欄を編集可能にする。オフにすると単語の境界に関係なく行末で折り返す。入力欄の先頭で文字が入力されるとまず全体をクリアする。入力欄が全部埋まった時に次の欄に移動する。入力欄のバッファサイズを初期サイズに固定する。オフにすると動的に割り当てる。評価を常に行うか、入力欄が修正されたときにのみ行うか。