EN JA
form_driver(3X)
form_driver(3X) form_driver(3X)

名称

form_driver - form システムのコマンド処理ループ

書式

#include <form.h>
 
int form_driver(FORM *form, int c);
 

解説

一旦 form が記入された (表示された) ならば、 form_driver によってそれへの流し込むファネル (漏斗) 入力イベントにするべきです。このルーチンは、3 つの主な入力ケースがあります。
-
入力は、form ナビゲーション要求です。ナビゲーション要求コードは、 wgetch によって返されたキーと文字コードと区別される、 <form.h> で定義された定数です。
-
入力は、印刷可能な文字です。 (256 未満の正でなければならない) 印刷可能な文字は、プログラムのロケール設定にしたがってチェックされます。
-
入力は、マウスイベントに関連している KEY_MOUSE 特殊キーです。
REQ_NEXT_PAGE
次のページに移動します。
REQ_PREV_PAGE
前のページに移動します。
REQ_FIRST_PAGE
最初のページに移動します。
REQ_LAST_PAGE
最後のフィールドに移動します。
 
REQ_NEXT_FIELD
次のフィールドに移動します。
REQ_PREV_FIELD
前のフィールドに移動します。
REQ_FIRST_FIELD
最前のフィールドに移動します。
REQ_LAST_FIELD
最後のフィールドに移動します。
REQ_SNEXT_FIELD
ソートされた次のフィールドに移動します。
REQ_SPREV_FIELD
ソートされた前のフィールドに移動します。
REQ_SFIRST_FIELD
ソートされた最初のフィールドに移動します。
REQ_SLAST_FIELD
ソートされた最後のフィールドに移動します。
REQ_LEFT_FIELD
フィールドを左に移動します。
REQ_RIGHT_FIELD
フィールドを右に移動します。
REQ_UP_FIELD
フィールドを上に移動します。
REQ_DOWN_FIELD
フィールドを下に移動します。
 
REQ_NEXT_CHAR
次の文字に移動します。
REQ_PREV_CHAR
前の文字に移動します。
REQ_NEXT_LINE
次の行に移動します。
REQ_PREV_LINE
前の行に移動します。
REQ_NEXT_WORD
次の語に移動します。
REQ_PREV_WORD
前の語に移動します。
REQ_BEG_FIELD
フィールドの始めに移動します。
REQ_END_FIELD
フィールドの終りに移動します。
REQ_BEG_LINE
行の始めに移動します。
REQ_END_LINE
行の終りに移動します。
REQ_LEFT_CHAR
フィールドの左に移動します。
REQ_RIGHT_CHAR
フィールドの右に移動します。
REQ_UP_CHAR
フィールドの上に移動します。
REQ_DOWN_CHAR
フィールドの下に移動します。
 
REQ_NEW_LINE
新しい行を挿入するかオーバレイします。
REQ_INS_CHAR
カーソルにブランク (空白) を挿入します。
REQ_INS_LINE
カーソルに空行を挿入します。
REQ_DEL_CHAR
カーソルの文字を削除します。
REQ_DEL_PREV
カーソルの前の文字を削除します。
REQ_DEL_LINE
カーソルの行を削除します。
REQ_DEL_WORD
カーソルのブランク (空白) で区切られた語を削除します。
REQ_CLR_EOL
カーソルから行の終りまでクリアします。
REQ_CLR_EOF
カーソルからフィールドの終りまでクリアします。
REQ_CLR_FIELD
すべてのフィールドをクリアします。
REQ_OVL_MODE
オーバレイモードに入ります。
REQ_INS_MODE
挿入モードに入ります。
 
REQ_SCR_FLINE
フィールドを前に 1 行スクロールします。
REQ_SCR_BLINE
フィールドを後に 1 行スクロールします。
REQ_SCR_FPAGE
フィールドを前に 1 ページスクロールします。
REQ_SCR_BPAGE
フィールドを後に 1 ページスクロールします。
REQ_SCR_FHPAGE
フィールドを前に半ページスクロールします。
REQ_SCR_BHPAGE
フィールドを後に半ページスクロールします。
 
REQ_SCR_FCHAR
フィールドを前に 1 文字スクロールします。
REQ_SCR_BCHAR
フィールドを後に 1 文字スクロールします。
REQ_SCR_HFLINE
フィールドを前に 1 行水平スクロールします。
REQ_SCR_HBLINE
フィールドを後に 1 行水平スクロールします。
REQ_SCR_HFHALF
フィールドを前に半行水平スクロールします。
REQ_SCR_HBHALF
フィールドを後に半行水平スクロールします。
 
REQ_VALIDATION
フィールドを確認します。
REQ_NEXT_CHOICE
次の選択されたフィールドを表示します。
REQ_PREV_CHOICE
前の選択されたフィールドを表示します。

2 つめの引数が印刷可能な文字である場合、ドライバは、現在のフィールドで現在の位置にそれを置きます。それが上にリストされた form リクエストのうちの 1 つである場合、そのリクエストが実行されます。

マウス操作

2 番目の引数が KEY_MOUSE 特別キーであるなら、関連マウスイベントは、上記の事前に定義された要求の 1 つに変換されます。現在のユーザのウィンドウのクリックだけは、 (例えば、フォーム表示領域またはデコレーションウィンドウの中) 操作されます。

利用者が、フォームの表示領域の上をクリックするなら:

REQ_PREV_FIELD が、シングルクリックで生成されます。
REQ_PREV_PAGE が、ダブルクリックで生成されます。
REQ_FIRST_FIELD が、トリプルクリックで生成されます。

利用者が、フォームの表示領域の下をクリックするなら:

REQ_NEXT_FIELD が、シングルクリックで生成されます。
REQ_NEXT_PAGE が、ダブルクリックで生成されます。
REQ_LAST_FIELD が、トリプルクリックで生成されます。

利用者が、フォームの表示領域の内側のフィールドをクリックするなら:

-
フォームカーソルは、そのフィールドに置かれます。
-
利用者がフィールドをダブルクリックするなら、フォームカーソルは、そのフィールドに置かれ、 E_UNKNOWN_COMMAND が返されます。ダブルクリックは、通常フィールド特有の動作が返されるべきであることを意味するので、この返り値は、意味があります。アプリケーション特有のコマンドが実行されるべきであることをシグナルすることがまさにこの返り値の目的です。
-
要求への変換が行われたなら、 form_driver は、この要求の結果を返します。

ユーザのウィンドウの外側がクリックされたか、またはマウスイベントがフォーム要求に変換できなかったなら、 E_REQUEST_DENIED が返されます。

アプリケーション定義コマンド

2 つめの引数が印刷可能なものでも上記のあらかじめ定義された from リクエストのうちの 1 つでもない場合、ドライバは、それがアプリケーションに特有のコマンドで E_UNKNOWN_COMMAND を返すと仮定されます。アプリケーションで定義されたコマンドは、それらのあらかじめ定義されたリクエストの最大の値である、 MAX_COMMAND と比べて定義されるべきです。

戻り値

form_driver は、次のエラーコードの 1 つを返します:
E_OK
ルーチンが成功した。
E_BAD_ARGUMENT
ルーチンは、正しくないか範囲外の引数を検知しました。
E_BAD_STATE
ルーチンは、初期化または終了の関数から呼ばれました。
E_NOT_POSTED
form は、記入されていません。
E_INVALID_FIELD
フィールドの内容は、有効ではありません。
E_REQUEST_DENIED
form ドライバは、要求を処理することができませんでした。
E_SYSTEM_ERROR
システムエラーが生じた ( errno 参照)。
E_UNKNOWN_COMMAND
form ドライバコードは、未知の要求コードを合いました。

関連項目

curses(3X), form(3X), wgetch(3X).

ヘッダファイル <form.h> は、自動的にヘッダファイル <curses.h> を含んでいます。

移植性

これらのルーチンは、System V メニューライブラリをエミュレートします。それらは、Version 7 または BSD バージョンではサポートされませんでした。

作者

Juergen Pfeifer。マニュアルページと新しい curses の適応は、Eric S. Raymond。