1 2 /*************************************************************************** 3 * COPYRIGHT NOTICE * 4 **************************************************************************** 5 * ncurses is copyright (C) 1992-1995 * 6 * Zeyd M. Ben-Halim * 7 * zmbenhal@netcom.com * 8 * Eric S. Raymond * 9 * esr@snark.thyrsus.com * 10 * * 11 * Permission is hereby granted to reproduce and distribute ncurses * 12 * by any means and for any fee, whether alone or as part of a * 13 * larger distribution, in source or in binary form, PROVIDED * 14 * this notice is included with any such distribution, and is not * 15 * removed from any of its header files. Mention of ncurses in any * 16 * applications linked with it is highly appreciated. * 17 * * 18 * ncurses comes AS IS with no warranty, implied or expressed. * 19 * * 20 ***************************************************************************/ 21 22 #ifndef FORM_H 23 #define FORM_H 24 25 #include <curses.h> 26 #include <eti.h> 27 28 #ifdef __cplusplus 29 extern "C" { 30 #endif 31 32 typedef int Form_Options; 33 typedef int Field_Options; 34 35 /********** 36 * _PAGE * 37 **********/ 38 39 typedef struct { 40 short pmin; /* index of first field on page */ 41 short pmax; /* index of last field on page */ 42 short smin; /* index of top leftmost field on page */ 43 short smax; /* index of bottom rightmost field on page */ 44 } _PAGE; 45 46 /********** 47 * FIELD * 48 **********/ 49 50 typedef struct fieldnode { 51 unsigned short status; /* flags */ 52 short rows; /* size in rows */ 53 short cols; /* size in cols */ 54 short frow; /* first row */ 55 short fcol; /* first col */ 56 int drows; /* dynamic rows */ 57 int dcols; /* dynamic cols */ 58 int maxgrow; /* maximum field growth */ 59 int nrow; /* offscreen rows */ 60 short nbuf; /* additional buffers */ 61 short just; /* justification */ 62 short page; /* page on form */ 63 short index; /* into form -> field */ 64 int pad; /* pad character */ 65 chtype fore; /* foreground attribute */ 66 chtype back; /* background attribute */ 67 Field_Options opts; /* options */ 68 struct fieldnode * snext; /* sorted order pointer */ 69 struct fieldnode * sprev; /* sorted order pointer */ 70 struct fieldnode * link; /* linked field chain */ 71 struct formnode * form; /* containing form */ 72 struct typenode * type; /* field type */ 73 void * arg; /* argument for type */ 74 char * buf; /* field buffers */ 75 void * usrptr; /* user pointer */ 76 } FIELD; 77 78 /************** 79 * FIELDTYPE * 80 **************/ 81 82 typedef struct typenode { 83 unsigned short status; /* flags */ 84 long ref; /* reference count */ 85 struct typenode * left; /* ptr to operand for | */ 86 struct typenode * right; /* ptr to operand for | */ 87 88 void* (*makearg)(va_list *); /* make fieldtype arg */ 89 void* (*copyarg)(const void *); /* copy fieldtype arg */ 90 void (*freearg)(void *); /* free fieldtype arg */ 91 92 bool (*fcheck)(FIELD *,const void *); /* field validation */ 93 bool (*ccheck)(int,const void *); /* character validation */ 94 95 bool (*next)(FIELD *,const void *); /* enumerate next value */ 96 bool (*prev)(FIELD *,const void *); /* enumerate prev value */ 97 98 } FIELDTYPE; 99 100 /********* 101 * FORM * 102 *********/ 103 104 typedef struct formnode { 105 unsigned short status; /* flags */ 106 short rows; /* size in rows */ 107 short cols; /* size in cols */ 108 int currow; /* current row in field window*/ 109 int curcol; /* current col in field window*/ 110 int toprow; /* in scrollable field window */ 111 int begincol; /* in horiz. scrollable field */ 112 short maxfield; /* number of fields */ 113 short maxpage; /* number of pages */ 114 short curpage; /* index into page */ 115 Form_Options opts; /* options */ 116 WINDOW * win; /* window */ 117 WINDOW * sub; /* subwindow */ 118 WINDOW * w; /* window for current field */ 119 FIELD ** field; /* field [maxfield] */ 120 FIELD * current; /* current field */ 121 _PAGE * page; /* page [maxpage] */ 122 void * usrptr; /* user pointer */ 123 124 void (*forminit)(struct formnode *); 125 void (*formterm)(struct formnode *); 126 void (*fieldinit)(struct formnode *); 127 void (*fieldterm)(struct formnode *); 128 129 } FORM; 130 131 typedef void (*Form_Hook)(FORM *); 132 133 /*************************** 134 * miscellaneous #defines * 135 ***************************/ 136 137 /* field justification */ 138 #define NO_JUSTIFICATION (0) 139 #define JUSTIFY_LEFT (1) 140 #define JUSTIFY_CENTER (2) 141 #define JUSTIFY_RIGHT (3) 142 143 /* field options */ 144 #define O_VISIBLE (0x0001) 145 #define O_ACTIVE (0x0002) 146 #define O_PUBLIC (0x0004) 147 #define O_EDIT (0x0008) 148 #define O_WRAP (0x0010) 149 #define O_BLANK (0x0020) 150 #define O_AUTOSKIP (0x0040) 151 #define O_NULLOK (0x0080) 152 #define O_PASSOK (0x0100) 153 #define O_STATIC (0x0200) 154 155 /* form options */ 156 #define O_NL_OVERLOAD (0x0001) 157 #define O_BS_OVERLOAD (0x0002) 158 159 /* form driver commands */ 160 #define REQ_NEXT_PAGE (KEY_MAX + 1) /* move to next page */ 161 #define REQ_PREV_PAGE (KEY_MAX + 2) /* move to previous page */ 162 #define REQ_FIRST_PAGE (KEY_MAX + 3) /* move to first page */ 163 #define REQ_LAST_PAGE (KEY_MAX + 4) /* move to last page */ 164 165 #define REQ_NEXT_FIELD (KEY_MAX + 5) /* move to next field */ 166 #define REQ_PREV_FIELD (KEY_MAX + 6) /* move to previous field */ 167 #define REQ_FIRST_FIELD (KEY_MAX + 7) /* move to first field */ 168 #define REQ_LAST_FIELD (KEY_MAX + 8) /* move to last field */ 169 #define REQ_SNEXT_FIELD (KEY_MAX + 9) /* move to sorted next field */ 170 #define REQ_SPREV_FIELD (KEY_MAX + 10) /* move to sorted prev field */ 171 #define REQ_SFIRST_FIELD (KEY_MAX + 11) /* move to sorted first field */ 172 #define REQ_SLAST_FIELD (KEY_MAX + 12) /* move to sorted last field */ 173 #define REQ_LEFT_FIELD (KEY_MAX + 13) /* move to left to field */ 174 #define REQ_RIGHT_FIELD (KEY_MAX + 14) /* move to right to field */ 175 #define REQ_UP_FIELD (KEY_MAX + 15) /* move to up to field */ 176 #define REQ_DOWN_FIELD (KEY_MAX + 16) /* move to down to field */ 177 178 #define REQ_NEXT_CHAR (KEY_MAX + 17) /* move to next char in field */ 179 #define REQ_PREV_CHAR (KEY_MAX + 18) /* move to prev char in field */ 180 #define REQ_NEXT_LINE (KEY_MAX + 19) /* move to next line in field */ 181 #define REQ_PREV_LINE (KEY_MAX + 20) /* move to prev line in field */ 182 #define REQ_NEXT_WORD (KEY_MAX + 21) /* move to next word in field */ 183 #define REQ_PREV_WORD (KEY_MAX + 22) /* move to prev word in field */ 184 #define REQ_BEG_FIELD (KEY_MAX + 23) /* move to first char in field */ 185 #define REQ_END_FIELD (KEY_MAX + 24) /* move after last char in fld */ 186 #define REQ_BEG_LINE (KEY_MAX + 25) /* move to beginning of line */ 187 #define REQ_END_LINE (KEY_MAX + 26) /* move after last char in line */ 188 #define REQ_LEFT_CHAR (KEY_MAX + 27) /* move left in field */ 189 #define REQ_RIGHT_CHAR (KEY_MAX + 28) /* move right in field */ 190 #define REQ_UP_CHAR (KEY_MAX + 29) /* move up in field */ 191 #define REQ_DOWN_CHAR (KEY_MAX + 30) /* move down in field */ 192 193 #define REQ_NEW_LINE (KEY_MAX + 31) /* insert/overlay new line */ 194 #define REQ_INS_CHAR (KEY_MAX + 32) /* insert blank char at cursor */ 195 #define REQ_INS_LINE (KEY_MAX + 33) /* insert blank line at cursor */ 196 #define REQ_DEL_CHAR (KEY_MAX + 34) /* delete char at cursor */ 197 #define REQ_DEL_PREV (KEY_MAX + 35) /* delete char before cursor */ 198 #define REQ_DEL_LINE (KEY_MAX + 36) /* delete line at cursor */ 199 #define REQ_DEL_WORD (KEY_MAX + 37) /* delete line at cursor */ 200 #define REQ_CLR_EOL (KEY_MAX + 38) /* clear to end of line */ 201 #define REQ_CLR_EOF (KEY_MAX + 39) /* clear to end of field */ 202 #define REQ_CLR_FIELD (KEY_MAX + 40) /* clear entire field */ 203 #define REQ_OVL_MODE (KEY_MAX + 41) /* begin overlay mode */ 204 #define REQ_INS_MODE (KEY_MAX + 42) /* begin insert mode */ 205 #define REQ_SCR_FLINE (KEY_MAX + 43) /* scroll field forward a line */ 206 #define REQ_SCR_BLINE (KEY_MAX + 44) /* scroll field backward a line */ 207 #define REQ_SCR_FPAGE (KEY_MAX + 45) /* scroll field forward a page */ 208 #define REQ_SCR_BPAGE (KEY_MAX + 46) /* scroll field backward a page */ 209 #define REQ_SCR_FHPAGE (KEY_MAX + 47) /* scroll field forward half page */ 210 #define REQ_SCR_BHPAGE (KEY_MAX + 48) /* scroll field backward half page */ 211 #define REQ_SCR_FCHAR (KEY_MAX + 49) /* horizontal scroll char */ 212 #define REQ_SCR_BCHAR (KEY_MAX + 50) /* horizontal scroll char */ 213 #define REQ_SCR_HFLINE (KEY_MAX + 51) /* horizontal scroll line */ 214 #define REQ_SCR_HBLINE (KEY_MAX + 52) /* horizontal scroll line */ 215 #define REQ_SCR_HFHALF (KEY_MAX + 53) /* horizontal scroll half line */ 216 #define REQ_SCR_HBHALF (KEY_MAX + 54) /* horizontal scroll half line */ 217 218 #define REQ_VALIDATION (KEY_MAX + 55) /* validate field */ 219 #define REQ_NEXT_CHOICE (KEY_MAX + 56) /* display next field choice */ 220 #define REQ_PREV_CHOICE (KEY_MAX + 57) /* display prev field choice */ 221 222 #define MIN_FORM_COMMAND (KEY_MAX + 1) /* used by form_driver */ 223 #define MAX_FORM_COMMAND (KEY_MAX + 57) /* used by form_driver */ 224 225 #if defined(MAX_COMMAND) && (MAX_FORM_COMMAND > MAX_COMMAND) 226 #error Something is wrong -- MAX_FORM_COMMAND is greater than MAX_COMMAND 227 #endif 228 229 /************************* 230 * standard field types * 231 *************************/ 232 extern FIELDTYPE *TYPE_ALPHA, 233 *TYPE_ALNUM, 234 *TYPE_ENUM, 235 *TYPE_INTEGER, 236 *TYPE_NUMERIC, 237 *TYPE_REGEXP; 238 239 /*********************** 240 * Default objects * 241 ***********************/ 242 extern FORM *_nc_Default_Form; 243 extern FIELD *_nc_Default_Field; 244 245 246 /*********************** 247 * FIELDTYPE routines * 248 ***********************/ 249 extern FIELDTYPE 250 *new_fieldtype( 251 bool (* const field_check)(FIELD *,const void *), 252 bool (* const char_check)(int,const void *)), 253 *link_fieldtype(FIELDTYPE *,FIELDTYPE *); 254 255 extern int free_fieldtype(FIELDTYPE *), 256 set_fieldtype_arg(FIELDTYPE *, 257 void * (* const make_arg)(va_list *), 258 void * (* const copy_arg)(const void *), 259 void (* const free_arg)(void *)), 260 set_fieldtype_choice (FIELDTYPE *, 261 bool (* const next_choice)(FIELD *,const void *), 262 bool (* const prev_choice)(FIELD *,const void *)); 263 264 /******************* 265 * FIELD routines * 266 *******************/ 267 extern FIELD *new_field(int,int,int,int,int,int), 268 *dup_field(FIELD *,int,int), 269 *link_field(FIELD *,int,int); 270 271 extern int free_field(FIELD *), 272 field_info(const FIELD *,int *,int *,int *,int *,int *,int *), 273 dynamic_field_info(const FIELD *,int *,int *,int *), 274 set_max_field( FIELD *,int), 275 move_field(FIELD *,int,int), 276 set_field_type(FIELD *,FIELDTYPE *,...), 277 set_new_page(FIELD *,bool), 278 set_field_just(FIELD *,int), 279 field_just(const FIELD *), 280 set_field_fore(FIELD *,chtype), 281 set_field_back(FIELD *,chtype), 282 set_field_pad(FIELD *,int), 283 field_pad(const FIELD *), 284 set_field_buffer(FIELD *,int,const char *), 285 set_field_status(FIELD *,bool), 286 set_field_userptr(FIELD *,void *), 287 set_field_opts(FIELD *,Field_Options), 288 field_opts_on(FIELD *,Field_Options), 289 field_opts_off(FIELD *,Field_Options); 290 291 extern chtype field_fore(const FIELD *), 292 field_back(const FIELD *); 293 294 extern bool new_page(const FIELD *), 295 field_status(const FIELD *); 296 297 extern void *field_arg(const FIELD *), 298 *field_userptr(const FIELD *); 299 300 extern FIELDTYPE 301 *field_type(const FIELD *); 302 303 extern char* field_buffer(const FIELD *,int); 304 305 extern Field_Options 306 field_opts(const FIELD *); 307 308 /****************** 309 * FORM routines * 310 ******************/ 311 extern FORM *new_form(FIELD **); 312 313 extern FIELD **form_fields(const FORM *), 314 *current_field(const FORM *); 315 316 extern WINDOW *form_win(const FORM *), 317 *form_sub(const FORM *); 318 319 extern Form_Hook 320 form_init(const FORM *), 321 form_term(const FORM *), 322 field_init(const FORM *), 323 field_term(const FORM *); 324 325 extern int free_form(FORM *), 326 set_form_fields(FORM *,FIELD **), 327 field_count(const FORM *), 328 set_form_win(FORM *,WINDOW *), 329 set_form_sub(FORM *,WINDOW *), 330 set_current_field(FORM *,FIELD *), 331 field_index(const FIELD *), 332 set_form_page(FORM *,int), 333 form_page(const FORM *), 334 scale_form(const FORM *,int *,int *), 335 set_form_init(FORM *,Form_Hook), 336 set_form_term(FORM *,Form_Hook), 337 set_field_init(FORM *,Form_Hook), 338 set_field_term(FORM *,Form_Hook), 339 post_form(FORM *), 340 unpost_form(FORM *), 341 pos_form_cursor(FORM *), 342 form_driver(FORM *,int), 343 set_form_userptr(FORM *,void *), 344 set_form_opts(FORM *,Form_Options), 345 form_opts_on(FORM *,Form_Options), 346 form_opts_off(FORM *,Form_Options); 347 348 extern void *form_userptr(const FORM *); 349 350 extern Form_Options 351 form_opts(const FORM *); 352 353 extern bool data_ahead(const FORM *), 354 data_behind(const FORM *); 355 356 #ifdef __cplusplus 357 } 358 #endif 359 360 #endif /* FORM_H */ 361