Curses ライブラリー

curses ライブラリーは、 端末タイプに関係なく端末のディスプレイを操作するための関数のセットを提供します。 curses ライブラリーは、カラーをサポートします。 しかし、マルチバイト文字はサポートされていません。 curses ドキュメンテーションでの文字の参照はすべて 1 バイト文字を参照します。

本書では、curses ライブラリーを curses と呼びます。

curses プログラミングはウィンドウのデータ構造体を基礎としています。 この構造体を使用して、 端末のディスプレイ上のデータを操作することができます。 ユーザーは、端末のディスプレイ全体を 1 つの大きなウィンドウとして処理するように curses に指示することも、 ディスプレイ上に複数のウィンドウを作成することもできます。 ウィンドウのサイズは同じでなくてもよく、別のウィンドウにオーバーラップしてもかまいません。 一般的な curses アプリケーションには、 単一の大きなウィンドウと 1 つのサブウィンドウがあります。

端末のディスプレイ上の各ウィンドウは固有のウィンドウ・データ構造体を持っています。 この構造体は、ウィンドウのサイズおよびディスプレイ上の位置などの、 ウィンドウに関する状態情報を保持します。 curses はウィンドウ・データ構造体を使用して、 ユーザーの命令を実行するために必要な関連情報を入手します。

用語

curses を使用してプログラミングを行う場合には、 以下の用語を理解している必要があります。

用語 定義
現在の文字 論理カーソルが現在示している文字。
現在行 (current line) 論理カーソルが現在示している行。
curscr curses によって提供される仮想デフォルト・ウィンドウ。 curscr (現在のスクリーン) は、 端末の外部ディスプレイに現在表示されているものの内部表現です。 curscr を変更してはなりません。
ディスプレイ ワークステーションに接続されている物理的なディスプレイ。
論理カーソル 各ウィンドウ内のカーソル位置。 ウィンドウ・データ構造体は、その論理カーソルの位置をトラッキングします。
パッド パッドは、スクリーン・サイズの制限を受けないウィンドウです。
物理カーソル ディスプレイに表示されるカーソル。 ワークステーションは、このカーソルを使用して、 ディスプレイへの書き出しを行います。 物理カーソルはディスプレイごとに 1 つだけあります。
スクリーン (screen) ディスプレイ全体を占めるウィンドウ。 スクリーンと stdscr は同義です。
stdscr ディスプレイ全体を表す、curses によって提供される仮想デフォルト・ウィンドウ (標準スクリーン)。
ウィンドウ ディスプレイ上の C データ構造体およびそのデータ構造体のグラフィック表現を指すポインター。 ウィンドウは、 任意の時点でディスプレイのすべてまたは一部がどのように見えるかを表す 2 次元の配列として考えることができます。

命名規則

単一の curses サブルーチンは、 複数のバージョンを持つことができます。 複数のバージョンを持つ curses サブルーチンは、 個別のバージョンを識別する個別の命名規則に従います。 これらの規則は、標準 curses サブルーチンにプレフィックスを追加し、 該当のサブルーチンが呼び出されたときにそのサブルーチンに必要な引数または行われるアクションを識別します。 curses サブルーチン名の様々なバージョンは、以下のプレフィックスを使用します。

接頭部 説明
w ウィンドウ引数が必要なサブルーチンを識別します。
p パッド引数が必要なサブルーチンを識別します。
mv プログラムが提供する座標への移動を最初に実行するサブルーチンを識別します。

curses サブルーチンに複数のバージョンがあり、 なおかつそのサブルーチンの前に上記のいずれかのプレフィックスがない場合、curses デフォルト・ウィンドウ stdscr (標準スクリーン) が使用されます。 stdscr を使用する大多数のサブルーチンは、#define ステートメントを使用して /usr/include/curses.h ファイルに作成されているマクロです。 プリプロセッサーは、コンパイル時にこれらのステートメントを置換します。 結果として、これらのマクロはコンパイル済みのアセンブラー・コード、トレース、デバッグ・プログラム、 または curses ソース・コードには現れません。

curses サブルーチンが単一のバージョンしか持っていない場合には、stdscr を使用するとは限りません。 例えば、printw サブルーチンは文字列を stdscr に出力します。 wprintw サブルーチンは、window 引数を提供することによって、 文字列を特定のウィンドウに出力します。 mvprintw サブルーチンは、 指定された座標を stdscr に移動してから、printw サブルーチンと同じ機能を実行します。 同様に、mvwprintw サブルーチンは、 指定された座標を指定されたウィンドウに移動してから、wprintw サブルーチンと同じ機能を実行します。

curses プログラムの構造

一般的に、curses プログラムは以下のように進行します。

  1. curses を開始します。
  2. カラー・サポートを検査します (オプショナル)。
  3. カラーを開始します (オプショナル)。
  4. 1 つまたは複数のウィンドウを作成します。
  5. ウィンドウを操作します。
  6. 1 つまたは複数のウィンドウを破棄します。
  7. curses を停止します。

ステップの中には必須ではないものもあるので、 プログラムが上記の進行順序に正確に従う必要はありません。

戻り値

少数の例外を除いて、 すべての curses サブルーチンは整数値 ERR または整数値 OK を戻します。 この規則に従わないサブルーチンについては、 該当する場合に注を付けます。 ポインターを戻すサブルーチンは、エラーの場合、 常に null ポインターを戻します。