EN JA
menu_driver(3X)
menu_driver(3X) menu_driver(3X)

名称

menu_driver - メニューシステムのコマンド処理ループ

書式

#include <menu.h>
 
int menu_driver(MENU *menu, int c);
 

解説

一旦メニューが記入された (表示された) ならば、 menu_driver によってそれへの流し込むファネル (漏斗) 入力イベントにするべきです。このルーチンは、3 つの主な入力ケースがあります。
-
入力は、form ナビゲーション要求です。ナビゲーション要求コードは、 wgetch によって返されたキーと文字コードと区別される、 <form.h> で定義された定数です。
-
入力は、印刷可能な文字です。 (256 未満の正でなければならない) 印刷可能な文字は、プログラムのロケール設定にしたがってチェックされます。
-
入力は、マウスイベントに関連している KEY_MOUSE 特殊キーです。

メニュードライバ要求は、次の通りです:

REQ_LEFT_ITEM
項目を左に移動します。
REQ_RIGHT_ITEM
項目を右に移動します。
REQ_UP_ITEM
項目を上に移動します。
REQ_DOWN_ITEM
項目を下に移動します。
REQ_SCR_ULINE
行をスクロールアップします。
REQ_SCR_DLINE
行をスクロールダウンします。
REQ_SCR_DPAGE
ページをスクロールダウンします。
REQ_SCR_UPAGE
ページをスクロールアップします。
REQ_FIRST_ITEM
最初の項目に移動します。
REQ_LAST_ITEM
最後の項目に移動します。
REQ_NEXT_ITEM
次の項目に移動します。
REQ_PREV_ITEM
前の項目に移動します。
REQ_TOGGLE_ITEM
項目を選択/非選択します。
REQ_CLEAR_PATTERN
メニューパターンバッファをクリアします。
REQ_BACK_PATTERN
パターンバッファから前の文字を削除します。
REQ_NEXT_MATCH
パターンマッチと一致する次の項目に移動します。
REQ_PREV_MATCH
パターンマッチと一致する前の項目に移動します。

2 つめの引数が印刷可能な文字である場合、コードは、パターンバッファに追加され、新しいパターンと一致する次の項目に移動するように試みます。そのようなマッチがない場合、 menu_driver は、 E_NO_MATCH を返し、バッファから追加された文字を削除します。

2 つめの引数が上記のあらかじめ定義された要求のうちの 1 つである場合、対応するアクションが実行されます。

マウス操作

2 つめの引数が KEY_MOUSE スペシャルキーである場合、関連するマウスイベントは、上記のあらかじめ定義されたリクエストのうちの 1 つに変換されます。現在のユーザのウィンドウのクリックだけは、 (例えば、メニュー表示領域またはデコレーションウィンドウの中) 操作されます。

利用者が、メニューの表示領域の上をクリックするなら:

REQ_SCR_ULINE が、シングルクリックで生成されます。
REQ_SCR_UPAGE が、ダブルクリックで生成されます。
REQ_FIRST_ITEM が、トリプルクリックで生成されます。

利用者が、メニューの表示領域の下をクリックするなら:

REQ_SCR_DLINE が、シングルクリックで生成されます。
REQ_SCR_DPAGE が、ダブルクリックで生成されます。
REQ_LAST_ITEM が、トリプルクリックで生成されます。

利用者が、メニューの表示領域の内側の項目をクリックするなら:

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

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

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

2 つめの引数が印刷可能なものでも上記のあらかじめ定義されたメニュー要求あるいは KEY_MOUSE のうちの 1 つでもない場合、ドライバは、それがアプリケーションに特有のコマンドで E_UNKNOWN_COMMAND を返す、と仮定します。アプリケーションに定義されたコマンドは、 MAX_COMMAND に関連する定義されるべきです。これは、あらかじめ定義された要求の最大の値です。

戻り値

menu_driver は、次のエラーコードの一つを返します:
E_OK
ルーチンが成功した。
E_SYSTEM_ERROR
システムエラーが生じた ( errno 参照)。
E_BAD_ARGUMENT
ルーチンは、正しくないか範囲外の引数を検知しました。
E_BAD_STATE
ルーチンは、初期化または終了の関数から呼ばれました。
E_NOT_POSTED
メニューは、記入されていません。
E_UNKNOWN_COMMAND
メニュードライバコードは、未知の要求コードを合いました。
E_NO_MATCH
文字は、一致しませんでした。
E_REQUEST_DENIED
メニュードライバは、要求を処理することができませんでした。

関連項目

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

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

移植性

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

作者

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