00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef FORM_H
00036 #define FORM_H
00037
00038 #include <curses.h>
00039 #include <eti.h>
00040
00041 #ifdef __cplusplus
00042 extern "C" {
00043 #endif
00044
00045 #ifndef FORM_PRIV_H
00046 typedef void *FIELD_CELL;
00047 #endif
00048
00049 #ifndef NCURSES_FIELD_INTERNALS
00050 #define NCURSES_FIELD_INTERNALS
00051 #endif
00052
00053 typedef int Form_Options;
00054 typedef int Field_Options;
00055
00056
00057
00058
00059
00060 typedef struct {
00061 short pmin;
00062 short pmax;
00063 short smin;
00064 short smax;
00065 } _PAGE;
00066
00067
00068
00069
00070
00071 typedef struct fieldnode {
00072 unsigned short status;
00073 short rows;
00074 short cols;
00075 short frow;
00076 short fcol;
00077 int drows;
00078 int dcols;
00079 int maxgrow;
00080 int nrow;
00081 short nbuf;
00082 short just;
00083 short page;
00084 short index;
00085 int pad;
00086 chtype fore;
00087 chtype back;
00088 Field_Options opts;
00089 struct fieldnode * snext;
00090 struct fieldnode * sprev;
00091 struct fieldnode * link;
00092 struct formnode * form;
00093 struct typenode * type;
00094 void * arg;
00095 FIELD_CELL * buf;
00096 void * usrptr;
00097
00098
00099
00100
00101
00102
00103
00104
00105 NCURSES_FIELD_INTERNALS
00106 } FIELD;
00107
00108
00109
00110
00111
00112 typedef struct typenode {
00113 unsigned short status;
00114 long ref;
00115 struct typenode * left;
00116 struct typenode * right;
00117
00118 void* (*makearg)(va_list *);
00119 void* (*copyarg)(const void *);
00120 void (*freearg)(void *);
00121
00122 bool (*fcheck)(FIELD *,const void *);
00123 bool (*ccheck)(int,const void *);
00124
00125 bool (*next)(FIELD *,const void *);
00126 bool (*prev)(FIELD *,const void *);
00127
00128 } FIELDTYPE;
00129
00130
00131
00132
00133
00134 typedef struct formnode {
00135 unsigned short status;
00136 short rows;
00137 short cols;
00138 int currow;
00139 int curcol;
00140 int toprow;
00141 int begincol;
00142 short maxfield;
00143 short maxpage;
00144 short curpage;
00145 Form_Options opts;
00146 WINDOW * win;
00147 WINDOW * sub;
00148 WINDOW * w;
00149 FIELD ** field;
00150 FIELD * current;
00151 _PAGE * page;
00152 void * usrptr;
00153
00154 void (*forminit)(struct formnode *);
00155 void (*formterm)(struct formnode *);
00156 void (*fieldinit)(struct formnode *);
00157 void (*fieldterm)(struct formnode *);
00158
00159 } FORM;
00160
00161 typedef void (*Form_Hook)(FORM *);
00162
00163
00164
00165
00166
00167
00168 #define NO_JUSTIFICATION (0)
00169 #define JUSTIFY_LEFT (1)
00170 #define JUSTIFY_CENTER (2)
00171 #define JUSTIFY_RIGHT (3)
00172
00173
00174 #define O_VISIBLE (0x0001U)
00175 #define O_ACTIVE (0x0002U)
00176 #define O_PUBLIC (0x0004U)
00177 #define O_EDIT (0x0008U)
00178 #define O_WRAP (0x0010U)
00179 #define O_BLANK (0x0020U)
00180 #define O_AUTOSKIP (0x0040U)
00181 #define O_NULLOK (0x0080U)
00182 #define O_PASSOK (0x0100U)
00183 #define O_STATIC (0x0200U)
00184
00185
00186 #define O_NL_OVERLOAD (0x0001U)
00187 #define O_BS_OVERLOAD (0x0002U)
00188
00189
00190 #define REQ_NEXT_PAGE (KEY_MAX + 1)
00191 #define REQ_PREV_PAGE (KEY_MAX + 2)
00192 #define REQ_FIRST_PAGE (KEY_MAX + 3)
00193 #define REQ_LAST_PAGE (KEY_MAX + 4)
00194
00195 #define REQ_NEXT_FIELD (KEY_MAX + 5)
00196 #define REQ_PREV_FIELD (KEY_MAX + 6)
00197 #define REQ_FIRST_FIELD (KEY_MAX + 7)
00198 #define REQ_LAST_FIELD (KEY_MAX + 8)
00199 #define REQ_SNEXT_FIELD (KEY_MAX + 9)
00200 #define REQ_SPREV_FIELD (KEY_MAX + 10)
00201 #define REQ_SFIRST_FIELD (KEY_MAX + 11)
00202 #define REQ_SLAST_FIELD (KEY_MAX + 12)
00203 #define REQ_LEFT_FIELD (KEY_MAX + 13)
00204 #define REQ_RIGHT_FIELD (KEY_MAX + 14)
00205 #define REQ_UP_FIELD (KEY_MAX + 15)
00206 #define REQ_DOWN_FIELD (KEY_MAX + 16)
00207
00208 #define REQ_NEXT_CHAR (KEY_MAX + 17)
00209 #define REQ_PREV_CHAR (KEY_MAX + 18)
00210 #define REQ_NEXT_LINE (KEY_MAX + 19)
00211 #define REQ_PREV_LINE (KEY_MAX + 20)
00212 #define REQ_NEXT_WORD (KEY_MAX + 21)
00213 #define REQ_PREV_WORD (KEY_MAX + 22)
00214 #define REQ_BEG_FIELD (KEY_MAX + 23)
00215 #define REQ_END_FIELD (KEY_MAX + 24)
00216 #define REQ_BEG_LINE (KEY_MAX + 25)
00217 #define REQ_END_LINE (KEY_MAX + 26)
00218 #define REQ_LEFT_CHAR (KEY_MAX + 27)
00219 #define REQ_RIGHT_CHAR (KEY_MAX + 28)
00220 #define REQ_UP_CHAR (KEY_MAX + 29)
00221 #define REQ_DOWN_CHAR (KEY_MAX + 30)
00222
00223 #define REQ_NEW_LINE (KEY_MAX + 31)
00224 #define REQ_INS_CHAR (KEY_MAX + 32)
00225 #define REQ_INS_LINE (KEY_MAX + 33)
00226 #define REQ_DEL_CHAR (KEY_MAX + 34)
00227 #define REQ_DEL_PREV (KEY_MAX + 35)
00228 #define REQ_DEL_LINE (KEY_MAX + 36)
00229 #define REQ_DEL_WORD (KEY_MAX + 37)
00230 #define REQ_CLR_EOL (KEY_MAX + 38)
00231 #define REQ_CLR_EOF (KEY_MAX + 39)
00232 #define REQ_CLR_FIELD (KEY_MAX + 40)
00233 #define REQ_OVL_MODE (KEY_MAX + 41)
00234 #define REQ_INS_MODE (KEY_MAX + 42)
00235 #define REQ_SCR_FLINE (KEY_MAX + 43)
00236 #define REQ_SCR_BLINE (KEY_MAX + 44)
00237 #define REQ_SCR_FPAGE (KEY_MAX + 45)
00238 #define REQ_SCR_BPAGE (KEY_MAX + 46)
00239 #define REQ_SCR_FHPAGE (KEY_MAX + 47)
00240 #define REQ_SCR_BHPAGE (KEY_MAX + 48)
00241 #define REQ_SCR_FCHAR (KEY_MAX + 49)
00242 #define REQ_SCR_BCHAR (KEY_MAX + 50)
00243 #define REQ_SCR_HFLINE (KEY_MAX + 51)
00244 #define REQ_SCR_HBLINE (KEY_MAX + 52)
00245 #define REQ_SCR_HFHALF (KEY_MAX + 53)
00246 #define REQ_SCR_HBHALF (KEY_MAX + 54)
00247
00248 #define REQ_VALIDATION (KEY_MAX + 55)
00249 #define REQ_NEXT_CHOICE (KEY_MAX + 56)
00250 #define REQ_PREV_CHOICE (KEY_MAX + 57)
00251
00252 #define MIN_FORM_COMMAND (KEY_MAX + 1)
00253 #define MAX_FORM_COMMAND (KEY_MAX + 57)
00254
00255 #if defined(MAX_COMMAND)
00256 # if (MAX_FORM_COMMAND > MAX_COMMAND)
00257 # error Something is wrong -- MAX_FORM_COMMAND is greater than MAX_COMMAND
00258 # elif (MAX_COMMAND != (KEY_MAX + 128))
00259 # error Something is wrong -- MAX_COMMAND is already inconsistently defined.
00260 # endif
00261 #else
00262 # define MAX_COMMAND (KEY_MAX + 128)
00263 #endif
00264
00265
00266
00267
00268 extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_ALPHA;
00269 extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_ALNUM;
00270 extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_ENUM;
00271 extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_INTEGER;
00272 extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_NUMERIC;
00273 extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_REGEXP;
00274
00275
00276
00277
00278
00279 extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_IPV4;
00280
00281
00282
00283
00284 extern NCURSES_EXPORT_VAR(FORM *) _nc_Default_Form;
00285 extern NCURSES_EXPORT_VAR(FIELD *) _nc_Default_Field;
00286
00287
00288
00289
00290
00291 extern NCURSES_EXPORT(FIELDTYPE *) new_fieldtype (
00292 bool (* const field_check)(FIELD *,const void *),
00293 bool (* const char_check)(int,const void *));
00294 extern NCURSES_EXPORT(FIELDTYPE *) link_fieldtype(
00295 FIELDTYPE *, FIELDTYPE *);
00296
00297 extern NCURSES_EXPORT(int) free_fieldtype (FIELDTYPE *);
00298 extern NCURSES_EXPORT(int) set_fieldtype_arg (FIELDTYPE *,
00299 void * (* const make_arg)(va_list *),
00300 void * (* const copy_arg)(const void *),
00301 void (* const free_arg)(void *));
00302 extern NCURSES_EXPORT(int) set_fieldtype_choice (FIELDTYPE *,
00303 bool (* const next_choice)(FIELD *,const void *),
00304 bool (* const prev_choice)(FIELD *,const void *));
00305
00306
00307
00308
00309 extern NCURSES_EXPORT(FIELD *) new_field (int,int,int,int,int,int);
00310 extern NCURSES_EXPORT(FIELD *) dup_field (FIELD *,int,int);
00311 extern NCURSES_EXPORT(FIELD *) link_field (FIELD *,int,int);
00312
00313 extern NCURSES_EXPORT(int) free_field (FIELD *);
00314 extern NCURSES_EXPORT(int) field_info (const FIELD *,int *,int *,int *,int *,int *,int *);
00315 extern NCURSES_EXPORT(int) dynamic_field_info (const FIELD *,int *,int *,int *);
00316 extern NCURSES_EXPORT(int) set_max_field ( FIELD *,int);
00317 extern NCURSES_EXPORT(int) move_field (FIELD *,int,int);
00318 extern NCURSES_EXPORT(int) set_field_type (FIELD *,FIELDTYPE *,...);
00319 extern NCURSES_EXPORT(int) set_new_page (FIELD *,bool);
00320 extern NCURSES_EXPORT(int) set_field_just (FIELD *,int);
00321 extern NCURSES_EXPORT(int) field_just (const FIELD *);
00322 extern NCURSES_EXPORT(int) set_field_fore (FIELD *,chtype);
00323 extern NCURSES_EXPORT(int) set_field_back (FIELD *,chtype);
00324 extern NCURSES_EXPORT(int) set_field_pad (FIELD *,int);
00325 extern NCURSES_EXPORT(int) field_pad (const FIELD *);
00326 extern NCURSES_EXPORT(int) set_field_buffer (FIELD *,int,const char *);
00327 extern NCURSES_EXPORT(int) set_field_status (FIELD *,bool);
00328 extern NCURSES_EXPORT(int) set_field_userptr (FIELD *, void *);
00329 extern NCURSES_EXPORT(int) set_field_opts (FIELD *,Field_Options);
00330 extern NCURSES_EXPORT(int) field_opts_on (FIELD *,Field_Options);
00331 extern NCURSES_EXPORT(int) field_opts_off (FIELD *,Field_Options);
00332
00333 extern NCURSES_EXPORT(chtype) field_fore (const FIELD *);
00334 extern NCURSES_EXPORT(chtype) field_back (const FIELD *);
00335
00336 extern NCURSES_EXPORT(bool) new_page (const FIELD *);
00337 extern NCURSES_EXPORT(bool) field_status (const FIELD *);
00338
00339 extern NCURSES_EXPORT(void *) field_arg (const FIELD *);
00340
00341 extern NCURSES_EXPORT(void *) field_userptr (const FIELD *);
00342
00343 extern NCURSES_EXPORT(FIELDTYPE *) field_type (const FIELD *);
00344
00345 extern NCURSES_EXPORT(char *) field_buffer (const FIELD *,int);
00346
00347 extern NCURSES_EXPORT(Field_Options) field_opts (const FIELD *);
00348
00349
00350
00351
00352
00353 extern NCURSES_EXPORT(FORM *) new_form (FIELD **);
00354
00355 extern NCURSES_EXPORT(FIELD **) form_fields (const FORM *);
00356 extern NCURSES_EXPORT(FIELD *) current_field (const FORM *);
00357
00358 extern NCURSES_EXPORT(WINDOW *) form_win (const FORM *);
00359 extern NCURSES_EXPORT(WINDOW *) form_sub (const FORM *);
00360
00361 extern NCURSES_EXPORT(Form_Hook) form_init (const FORM *);
00362 extern NCURSES_EXPORT(Form_Hook) form_term (const FORM *);
00363 extern NCURSES_EXPORT(Form_Hook) field_init (const FORM *);
00364 extern NCURSES_EXPORT(Form_Hook) field_term (const FORM *);
00365
00366 extern NCURSES_EXPORT(int) free_form (FORM *);
00367 extern NCURSES_EXPORT(int) set_form_fields (FORM *,FIELD **);
00368 extern NCURSES_EXPORT(int) field_count (const FORM *);
00369 extern NCURSES_EXPORT(int) set_form_win (FORM *,WINDOW *);
00370 extern NCURSES_EXPORT(int) set_form_sub (FORM *,WINDOW *);
00371 extern NCURSES_EXPORT(int) set_current_field (FORM *,FIELD *);
00372 extern NCURSES_EXPORT(int) field_index (const FIELD *);
00373 extern NCURSES_EXPORT(int) set_form_page (FORM *,int);
00374 extern NCURSES_EXPORT(int) form_page (const FORM *);
00375 extern NCURSES_EXPORT(int) scale_form (const FORM *,int *,int *);
00376 extern NCURSES_EXPORT(int) set_form_init (FORM *,Form_Hook);
00377 extern NCURSES_EXPORT(int) set_form_term (FORM *,Form_Hook);
00378 extern NCURSES_EXPORT(int) set_field_init (FORM *,Form_Hook);
00379 extern NCURSES_EXPORT(int) set_field_term (FORM *,Form_Hook);
00380 extern NCURSES_EXPORT(int) post_form (FORM *);
00381 extern NCURSES_EXPORT(int) unpost_form (FORM *);
00382 extern NCURSES_EXPORT(int) pos_form_cursor (FORM *);
00383 extern NCURSES_EXPORT(int) form_driver (FORM *,int);
00384 extern NCURSES_EXPORT(int) set_form_userptr (FORM *,void *);
00385 extern NCURSES_EXPORT(int) set_form_opts (FORM *,Form_Options);
00386 extern NCURSES_EXPORT(int) form_opts_on (FORM *,Form_Options);
00387 extern NCURSES_EXPORT(int) form_opts_off (FORM *,Form_Options);
00388 extern NCURSES_EXPORT(int) form_request_by_name (const char *);
00389
00390 extern NCURSES_EXPORT(const char *) form_request_name (int);
00391
00392 extern NCURSES_EXPORT(void *) form_userptr (const FORM *);
00393
00394 extern NCURSES_EXPORT(Form_Options) form_opts (const FORM *);
00395
00396 extern NCURSES_EXPORT(bool) data_ahead (const FORM *);
00397 extern NCURSES_EXPORT(bool) data_behind (const FORM *);
00398
00399 #ifdef __cplusplus
00400 }
00401 #endif
00402
00403 #endif