home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / ncurses-1.9.9e-bin.lha / include / form.h < prev    next >
C/C++ Source or Header  |  1996-10-12  |  15KB  |  361 lines

  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.