form_fieldtype(3X) | form_fieldtype(3X) |
名称
form_fieldtype - 検証フィールドタイプを定義する書式
#include <form.h>bool (* const field_check)(FIELD *, const void *),
bool (* const char_check)(int, const void *));
FIELDTYPE *fieldtype,
void *(* const make_arg)(va_list *),
void *(* const copy_arg)(const void *),
void (* const free_arg)(void *));
FIELDTYPE *fieldtype,
bool (* const next_choice)(FIELD *, const void *),
bool (* const prev_choice)(FIELD *, const void *));
FIELDTYPE *type2);
解説
関数 new_fieldtype はデータ検証のための便利な新しいフィールドタイプを作成します。それに、ユーザがフィールドを去る試みをするときはいつでも、入力されたデータ文字列の有効性をチェックする述語である、 field_check を供給します、検証述語がフィールドのバッファ、サイズおよび他の属性を見ることができるように、 (FIELD *) 引数は渡されます。 2 つめの引数は引数ブロック構造体です、それに関しては後述します。さらに、 new_fieldtype にそれらが入力されるとともに入力文字を有効にする関数である、 char_check を供給します。それには、チェックされる文字と引数ブロック構造体のポインタが渡されます。
関数 free_fieldtype は、与えられた検証タイプに割り付けられたスペースを解放します。
関数 set_fieldtype_arg は、フィールドタイプに 3 つのストレージ管理関数を関連させます。 mak_arg 関数は、フィールドの検証を付ける場合、与えられた set_field_type を引数のリストに自動的に適用されます。その仕事は、前提とされた検証に後で渡すことができる割り付けられた引数ブロックオブジェクトの中へこれらを束ねることです。他の 2 つのホック引数は引数ブロック構造体をコピーし解放するべきです。それらは、form ドライバコードによって使用されるでしょう。 mak_arg 関数を供給しなければなりません、他の 2 つはオプションです、それらに NULL を供給することもできます。この場合、 mak_arg はメモリを割り付けないが、単一のスカラー価に単に引数をロードすることが、仮定されます。
関数 link_fieldtype は、2 つの与えられたタイプから新しいフィールドタイプを作成します。それらは、論理的 'OR' によって結合されます。
form ドライバは、順序づけられたセットのフィールド form の可能な値を仮定する REQ_NEXT_CHOICE と REQ_PREV_CHOICE を要求します。そして、セットを通して移動する方法を持った form ユーザを提供します。 set_fieldtype_choice 関数は、form プログラマがフィールドタイプのためのサクセッサ (後継者) とプレデセッサ (前任者) 関数を定義することを可能にします。これらの関数は引数としてフィールドポインタおよび引数ブロック構造体をとります。
戻り値
ポインタ値のルーチンはエラーの場合 NULL を返します。それらは、成功したかどうかに従って、errno を設定します:- E_OK
- ルーチンが成功した。
- E_BAD_ARGUMENT
- ルーチンは正しくないか範囲外の引数を検知しました。
- E_SYSTEM_ERROR
- システムエラーが生じた、例えば、malloc の失敗。
整数値のルーチンはエラーの場合次のコードの 1 つを返します:
- E_OK
- ルーチンが成功した。
- E_BAD_ARGUMENT
- ルーチンは正しくないか範囲外の引数を検知しました。
- E_CONNECTED
- フィールドは、既に form に接続されています。
- E_CURRENT
- フィールドは、現在のフィールドです。
- E_SYSTEM_ERROR
- システムエラーが生じた ( errno 参照)。
関連項目
curses(3X), form(3X)注
ヘッダファイル <form.h> は、自動的にヘッダファイル <curses.h> を含んでいます。これらの関数の (char *) 引数はすべて実際は、 (void *) であるべきです。タイプの System V との厳密な互換性は未訂正のままです。