Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2024-05-18 08:29:51

0001 /****************************************************************************
0002  * Copyright 2018-2019-2020,2021 Thomas E. Dickey                           *
0003  * Copyright 1998-2016,2017 Free Software Foundation, Inc.                  *
0004  *                                                                          *
0005  * Permission is hereby granted, free of charge, to any person obtaining a  *
0006  * copy of this software and associated documentation files (the            *
0007  * "Software"), to deal in the Software without restriction, including      *
0008  * without limitation the rights to use, copy, modify, merge, publish,      *
0009  * distribute, distribute with modifications, sublicense, and/or sell       *
0010  * copies of the Software, and to permit persons to whom the Software is    *
0011  * furnished to do so, subject to the following conditions:                 *
0012  *                                                                          *
0013  * The above copyright notice and this permission notice shall be included  *
0014  * in all copies or substantial portions of the Software.                   *
0015  *                                                                          *
0016  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
0017  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
0018  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
0019  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
0020  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
0021  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
0022  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
0023  *                                                                          *
0024  * Except as contained in this notice, the name(s) of the above copyright   *
0025  * holders shall not be used in advertising or otherwise to promote the     *
0026  * sale, use or other dealings in this Software without prior written       *
0027  * authorization.                                                           *
0028  ****************************************************************************/
0029 
0030 /****************************************************************************
0031  *   Author:  Juergen Pfeifer, 1995,1997                                    *
0032  ****************************************************************************/
0033 
0034 /* $Id: form.h,v 0.32 2021/06/17 21:26:02 tom Exp $ */
0035 
0036 #ifndef FORM_H
0037 #define FORM_H
0038 /* *INDENT-OFF*/
0039 
0040 #include <ncursesw/curses.h>
0041 #include <ncursesw/eti.h>
0042 
0043 #ifdef __cplusplus
0044   extern "C" {
0045 #endif
0046 
0047 #if defined(BUILDING_FORM)
0048 # define FORM_IMPEXP NCURSES_EXPORT_GENERAL_EXPORT
0049 #else
0050 # define FORM_IMPEXP NCURSES_EXPORT_GENERAL_IMPORT
0051 #endif
0052 
0053 #define FORM_WRAPPED_VAR(type,name) extern FORM_IMPEXP type NCURSES_PUBLIC_VAR(name)(void)
0054 
0055 #define FORM_EXPORT(type) FORM_IMPEXP type NCURSES_API
0056 #define FORM_EXPORT_VAR(type) FORM_IMPEXP type
0057 
0058 #ifndef FORM_PRIV_H
0059 typedef void *FIELD_CELL;
0060 #endif
0061 
0062 #ifndef NCURSES_FIELD_INTERNALS
0063 #define NCURSES_FIELD_INTERNALS /* nothing */
0064 #endif
0065 
0066 typedef int Form_Options;
0067 typedef int Field_Options;
0068 
0069     /**********
0070     *  _PAGE  *
0071     **********/
0072 
0073 typedef struct pagenode
0074 #if !NCURSES_OPAQUE_FORM
0075 {
0076   short pmin;       /* index of first field on page         */
0077   short pmax;       /* index of last field on page          */
0078   short smin;       /* index of top leftmost field on page      */
0079   short smax;       /* index of bottom rightmost field on page  */
0080 }
0081 #endif /* !NCURSES_OPAQUE_FORM */
0082 _PAGE;
0083 
0084     /**********
0085     *  FIELD  *
0086     **********/
0087 
0088 typedef struct fieldnode
0089 #if 1           /* not yet: !NCURSES_OPAQUE_FORM */
0090 {
0091   unsigned short    status;     /* flags            */
0092   short         rows;       /* size in rows         */
0093   short         cols;       /* size in cols         */
0094   short         frow;       /* first row            */
0095   short         fcol;       /* first col            */
0096   int           drows;      /* dynamic rows         */
0097   int           dcols;      /* dynamic cols         */
0098   int           maxgrow;    /* maximum field growth     */
0099   int           nrow;       /* off-screen rows      */
0100   short         nbuf;       /* additional buffers       */
0101   short         just;       /* justification        */
0102   short         page;       /* page on form         */
0103   short         index;      /* into form -> field       */
0104   int           pad;        /* pad character        */
0105   chtype        fore;       /* foreground attribute     */
0106   chtype        back;       /* background attribute     */
0107   Field_Options     opts;       /* options          */
0108   struct fieldnode *    snext;      /* sorted order pointer     */
0109   struct fieldnode *    sprev;      /* sorted order pointer     */
0110   struct fieldnode *    link;       /* linked field chain       */
0111   struct formnode * form;       /* containing form      */
0112   struct typenode * type;       /* field type           */
0113   void *        arg;        /* argument for type        */
0114   FIELD_CELL *      buf;        /* field buffers        */
0115   void *        usrptr;     /* user pointer         */
0116   /*
0117    * The wide-character configuration requires extra information.  Because
0118    * there are existing applications that manipulate the members of FIELD
0119    * directly, we cannot make the struct opaque, except by changing the ABI.
0120    * Offsets of members up to this point are the same in the narrow- and
0121    * wide-character configuration.  But note that the type of buf depends on
0122    * the configuration, and is made opaque for that reason.
0123    */
0124   NCURSES_FIELD_INTERNALS
0125 }
0126 #endif /* NCURSES_OPAQUE_FORM */
0127 FIELD;
0128 
0129 
0130     /*********
0131     *  FORM  *
0132     *********/
0133 
0134 typedef struct formnode
0135 #if 1           /* not yet: !NCURSES_OPAQUE_FORM */
0136 {
0137   unsigned short    status;     /* flags            */
0138   short         rows;       /* size in rows         */
0139   short         cols;       /* size in cols         */
0140   int           currow;     /* current row in field window  */
0141   int           curcol;     /* current col in field window  */
0142   int           toprow;     /* in scrollable field window   */
0143   int           begincol;   /* in horiz. scrollable field   */
0144   short         maxfield;   /* number of fields     */
0145   short         maxpage;    /* number of pages      */
0146   short         curpage;    /* index into page      */
0147   Form_Options      opts;       /* options          */
0148   WINDOW *      win;        /* window           */
0149   WINDOW *      sub;        /* subwindow            */
0150   WINDOW *      w;      /* window for current field */
0151   FIELD **      field;      /* field [maxfield]     */
0152   FIELD *       current;    /* current field        */
0153   _PAGE *       page;       /* page [maxpage]       */
0154   void *        usrptr;     /* user pointer         */
0155 
0156   void          (*forminit)(struct formnode *);
0157   void          (*formterm)(struct formnode *);
0158   void          (*fieldinit)(struct formnode *);
0159   void          (*fieldterm)(struct formnode *);
0160 
0161 }
0162 #endif /* !NCURSES_OPAQUE_FORM */
0163 FORM;
0164 
0165 
0166     /**************
0167     *  FIELDTYPE  *
0168     **************/
0169 
0170 typedef struct typenode
0171 #if !NCURSES_OPAQUE_FORM
0172 {
0173   unsigned short    status;         /* flags            */
0174   long          ref;            /* reference count      */
0175   struct typenode * left;           /* ptr to operand for |     */
0176   struct typenode * right;          /* ptr to operand for |     */
0177 
0178   void* (*makearg)(va_list *);          /* make fieldtype arg       */
0179   void* (*copyarg)(const void *);       /* copy fieldtype arg       */
0180   void  (*freearg)(void *);         /* free fieldtype arg       */
0181 
0182 #if NCURSES_INTEROP_FUNCS
0183   union {
0184     bool (*ofcheck)(FIELD *,const void *);  /* field validation     */
0185     bool (*gfcheck)(FORM*,FIELD *,const void*); /* generic field validation */
0186   } fieldcheck;
0187   union {
0188     bool (*occheck)(int,const void *);      /* character validation     */
0189     bool (*gccheck)(int,FORM*,
0190             FIELD*,const void*);        /* generic char validation  */
0191   } charcheck;
0192   union {
0193     bool (*onext)(FIELD *,const void *);        /* enumerate next value     */
0194     bool (*gnext)(FORM*,FIELD*,const void*);    /* generic enumerate next   */
0195   } enum_next;
0196   union {
0197     bool (*oprev)(FIELD *,const void *);    /* enumerate prev value     */
0198     bool (*gprev)(FORM*,FIELD*,const void*);    /* generic enumerate prev   */
0199   } enum_prev;
0200   void* (*genericarg)(void*);                   /* Alternate Arg method     */
0201 #else
0202   bool  (*fcheck)(FIELD *,const void *);    /* field validation */
0203   bool  (*ccheck)(int,const void *);        /* character validation */
0204 
0205   bool  (*next)(FIELD *,const void *);      /* enumerate next value */
0206   bool  (*prev)(FIELD *,const void *);      /* enumerate prev value */
0207 #endif
0208 }
0209 #endif /* !NCURSES_OPAQUE_FORM */
0210 FIELDTYPE;
0211 
0212 typedef void (*Form_Hook)(FORM *);
0213 
0214     /***************************
0215     *  miscellaneous #defines  *
0216     ***************************/
0217 
0218 /* field justification */
0219 #define NO_JUSTIFICATION    (0)
0220 #define JUSTIFY_LEFT        (1)
0221 #define JUSTIFY_CENTER      (2)
0222 #define JUSTIFY_RIGHT       (3)
0223 
0224 /* field options */
0225 #define O_VISIBLE       (0x0001U)
0226 #define O_ACTIVE        (0x0002U)
0227 #define O_PUBLIC        (0x0004U)
0228 #define O_EDIT          (0x0008U)
0229 #define O_WRAP          (0x0010U)
0230 #define O_BLANK         (0x0020U)
0231 #define O_AUTOSKIP      (0x0040U)
0232 #define O_NULLOK        (0x0080U)
0233 #define O_PASSOK        (0x0100U)
0234 #define O_STATIC        (0x0200U)
0235 #define O_DYNAMIC_JUSTIFY   (0x0400U)   /* ncurses extension    */
0236 #define O_NO_LEFT_STRIP     (0x0800U)   /* ncurses extension    */
0237 #define O_EDGE_INSERT_STAY      (0x1000U)   /* ncurses extension    */
0238 #define O_INPUT_LIMIT           (0x2000U)   /* ncurses extension    */
0239 
0240 /* form options */
0241 #define O_NL_OVERLOAD       (0x0001U)
0242 #define O_BS_OVERLOAD       (0x0002U)
0243 
0244 /* form driver commands */
0245 #define REQ_NEXT_PAGE    (KEY_MAX + 1)  /* move to next page        */
0246 #define REQ_PREV_PAGE    (KEY_MAX + 2)  /* move to previous page    */
0247 #define REQ_FIRST_PAGE   (KEY_MAX + 3)  /* move to first page       */
0248 #define REQ_LAST_PAGE    (KEY_MAX + 4)  /* move to last page        */
0249 
0250 #define REQ_NEXT_FIELD   (KEY_MAX + 5)  /* move to next field       */
0251 #define REQ_PREV_FIELD   (KEY_MAX + 6)  /* move to previous field   */
0252 #define REQ_FIRST_FIELD  (KEY_MAX + 7)  /* move to first field      */
0253 #define REQ_LAST_FIELD   (KEY_MAX + 8)  /* move to last field       */
0254 #define REQ_SNEXT_FIELD  (KEY_MAX + 9)  /* move to sorted next field    */
0255 #define REQ_SPREV_FIELD  (KEY_MAX + 10) /* move to sorted prev field    */
0256 #define REQ_SFIRST_FIELD (KEY_MAX + 11) /* move to sorted first field   */
0257 #define REQ_SLAST_FIELD  (KEY_MAX + 12) /* move to sorted last field    */
0258 #define REQ_LEFT_FIELD   (KEY_MAX + 13) /* move to left to field    */
0259 #define REQ_RIGHT_FIELD  (KEY_MAX + 14) /* move to right to field   */
0260 #define REQ_UP_FIELD     (KEY_MAX + 15) /* move to up to field      */
0261 #define REQ_DOWN_FIELD   (KEY_MAX + 16) /* move to down to field    */
0262 
0263 #define REQ_NEXT_CHAR    (KEY_MAX + 17) /* move to next char in field   */
0264 #define REQ_PREV_CHAR    (KEY_MAX + 18) /* move to prev char in field   */
0265 #define REQ_NEXT_LINE    (KEY_MAX + 19) /* move to next line in field   */
0266 #define REQ_PREV_LINE    (KEY_MAX + 20) /* move to prev line in field   */
0267 #define REQ_NEXT_WORD    (KEY_MAX + 21) /* move to next word in field   */
0268 #define REQ_PREV_WORD    (KEY_MAX + 22) /* move to prev word in field   */
0269 #define REQ_BEG_FIELD    (KEY_MAX + 23) /* move to first char in field  */
0270 #define REQ_END_FIELD    (KEY_MAX + 24) /* move after last char in fld  */
0271 #define REQ_BEG_LINE     (KEY_MAX + 25) /* move to beginning of line    */
0272 #define REQ_END_LINE     (KEY_MAX + 26) /* move after last char in line */
0273 #define REQ_LEFT_CHAR    (KEY_MAX + 27) /* move left in field       */
0274 #define REQ_RIGHT_CHAR   (KEY_MAX + 28) /* move right in field      */
0275 #define REQ_UP_CHAR  (KEY_MAX + 29) /* move up in field     */
0276 #define REQ_DOWN_CHAR    (KEY_MAX + 30) /* move down in field       */
0277 
0278 #define REQ_NEW_LINE     (KEY_MAX + 31) /* insert/overlay new line  */
0279 #define REQ_INS_CHAR     (KEY_MAX + 32) /* insert blank char at cursor  */
0280 #define REQ_INS_LINE     (KEY_MAX + 33) /* insert blank line at cursor  */
0281 #define REQ_DEL_CHAR     (KEY_MAX + 34) /* delete char at cursor    */
0282 #define REQ_DEL_PREV     (KEY_MAX + 35) /* delete char before cursor    */
0283 #define REQ_DEL_LINE     (KEY_MAX + 36) /* delete line at cursor    */
0284 #define REQ_DEL_WORD     (KEY_MAX + 37) /* delete word at cursor    */
0285 #define REQ_CLR_EOL  (KEY_MAX + 38) /* clear to end of line     */
0286 #define REQ_CLR_EOF  (KEY_MAX + 39) /* clear to end of field    */
0287 #define REQ_CLR_FIELD    (KEY_MAX + 40) /* clear entire field       */
0288 #define REQ_OVL_MODE     (KEY_MAX + 41) /* begin overlay mode       */
0289 #define REQ_INS_MODE     (KEY_MAX + 42) /* begin insert mode        */
0290 #define REQ_SCR_FLINE    (KEY_MAX + 43) /* scroll field forward a line  */
0291 #define REQ_SCR_BLINE    (KEY_MAX + 44) /* scroll field backward a line */
0292 #define REQ_SCR_FPAGE    (KEY_MAX + 45) /* scroll field forward a page  */
0293 #define REQ_SCR_BPAGE    (KEY_MAX + 46) /* scroll field backward a page */
0294 #define REQ_SCR_FHPAGE   (KEY_MAX + 47) /* scroll field forward  half page */
0295 #define REQ_SCR_BHPAGE   (KEY_MAX + 48) /* scroll field backward half page */
0296 #define REQ_SCR_FCHAR    (KEY_MAX + 49) /* horizontal scroll char   */
0297 #define REQ_SCR_BCHAR    (KEY_MAX + 50) /* horizontal scroll char   */
0298 #define REQ_SCR_HFLINE   (KEY_MAX + 51) /* horizontal scroll line   */
0299 #define REQ_SCR_HBLINE   (KEY_MAX + 52) /* horizontal scroll line   */
0300 #define REQ_SCR_HFHALF   (KEY_MAX + 53) /* horizontal scroll half line  */
0301 #define REQ_SCR_HBHALF   (KEY_MAX + 54) /* horizontal scroll half line  */
0302 
0303 #define REQ_VALIDATION   (KEY_MAX + 55) /* validate field       */
0304 #define REQ_NEXT_CHOICE  (KEY_MAX + 56) /* display next field choice    */
0305 #define REQ_PREV_CHOICE  (KEY_MAX + 57) /* display prev field choice    */
0306 
0307 #define MIN_FORM_COMMAND (KEY_MAX + 1)  /* used by form_driver      */
0308 #define MAX_FORM_COMMAND (KEY_MAX + 57) /* used by form_driver      */
0309 
0310 #if defined(MAX_COMMAND)
0311 #  if (MAX_FORM_COMMAND > MAX_COMMAND)
0312 #    error Something is wrong -- MAX_FORM_COMMAND is greater than MAX_COMMAND
0313 #  elif (MAX_COMMAND != (KEY_MAX + 128))
0314 #    error Something is wrong -- MAX_COMMAND is already inconsistently defined.
0315 #  endif
0316 #else
0317 #  define MAX_COMMAND (KEY_MAX + 128)
0318 #endif
0319 
0320     /*************************
0321     *  standard field types  *
0322     *************************/
0323 extern FORM_EXPORT_VAR(FIELDTYPE *) TYPE_ALPHA;
0324 extern FORM_EXPORT_VAR(FIELDTYPE *) TYPE_ALNUM;
0325 extern FORM_EXPORT_VAR(FIELDTYPE *) TYPE_ENUM;
0326 extern FORM_EXPORT_VAR(FIELDTYPE *) TYPE_INTEGER;
0327 extern FORM_EXPORT_VAR(FIELDTYPE *) TYPE_NUMERIC;
0328 extern FORM_EXPORT_VAR(FIELDTYPE *) TYPE_REGEXP;
0329 
0330     /************************************
0331     *  built-in additional field types  *
0332     *  They are not defined in SVr4     *
0333     ************************************/
0334 extern FORM_EXPORT_VAR(FIELDTYPE *) TYPE_IPV4;      /* Internet IP Version 4 address */
0335 
0336     /***********************
0337     *  FIELDTYPE routines  *
0338     ***********************/
0339 extern FORM_EXPORT(FIELDTYPE *) new_fieldtype (
0340             bool (* const field_check)(FIELD *,const void *),
0341             bool (* const char_check)(int,const void *));
0342 extern FORM_EXPORT(FIELDTYPE *) link_fieldtype(
0343             FIELDTYPE *, FIELDTYPE *);
0344 
0345 extern FORM_EXPORT(int) free_fieldtype (FIELDTYPE *);
0346 extern FORM_EXPORT(int) set_fieldtype_arg (FIELDTYPE *,
0347             void * (* const make_arg)(va_list *),
0348             void * (* const copy_arg)(const void *),
0349             void (* const free_arg)(void *));
0350 extern FORM_EXPORT(int)  set_fieldtype_choice (FIELDTYPE *,
0351             bool (* const next_choice)(FIELD *,const void *),
0352                 bool (* const prev_choice)(FIELD *,const void *));
0353 
0354     /*******************
0355     *  FIELD routines  *
0356     *******************/
0357 extern FORM_EXPORT(FIELD *) new_field (int,int,int,int,int,int);
0358 extern FORM_EXPORT(FIELD *) dup_field (FIELD *,int,int);
0359 extern FORM_EXPORT(FIELD *) link_field (FIELD *,int,int);
0360 
0361 extern FORM_EXPORT(int) free_field (FIELD *);
0362 extern FORM_EXPORT(int) field_info (const FIELD *,int *,int *,int *,int *,int *,int *);
0363 extern FORM_EXPORT(int) dynamic_field_info (const FIELD *,int *,int *,int *);
0364 extern FORM_EXPORT(int) set_max_field ( FIELD *,int);
0365 extern FORM_EXPORT(int) move_field (FIELD *,int,int);
0366 extern FORM_EXPORT(int) set_field_type (FIELD *,FIELDTYPE *,...);
0367 extern FORM_EXPORT(int) set_new_page (FIELD *,bool);
0368 extern FORM_EXPORT(int) set_field_just (FIELD *,int);
0369 extern FORM_EXPORT(int) field_just (const FIELD *);
0370 extern FORM_EXPORT(int) set_field_fore (FIELD *,chtype);
0371 extern FORM_EXPORT(int) set_field_back (FIELD *,chtype);
0372 extern FORM_EXPORT(int) set_field_pad (FIELD *,int);
0373 extern FORM_EXPORT(int) field_pad (const FIELD *);
0374 extern FORM_EXPORT(int) set_field_buffer (FIELD *,int,const char *);
0375 extern FORM_EXPORT(int) set_field_status (FIELD *,bool);
0376 extern FORM_EXPORT(int) set_field_userptr (FIELD *, void *);
0377 extern FORM_EXPORT(int) set_field_opts (FIELD *,Field_Options);
0378 extern FORM_EXPORT(int) field_opts_on (FIELD *,Field_Options);
0379 extern FORM_EXPORT(int) field_opts_off (FIELD *,Field_Options);
0380 
0381 extern FORM_EXPORT(chtype)  field_fore (const FIELD *);
0382 extern FORM_EXPORT(chtype)  field_back (const FIELD *);
0383 
0384 extern FORM_EXPORT(bool)    new_page (const FIELD *);
0385 extern FORM_EXPORT(bool)    field_status (const FIELD *);
0386 
0387 extern FORM_EXPORT(void *)  field_arg (const FIELD *);
0388 
0389 extern FORM_EXPORT(void *)  field_userptr (const FIELD *);
0390 
0391 extern FORM_EXPORT(FIELDTYPE *) field_type (const FIELD *);
0392 
0393 extern FORM_EXPORT(char *)  field_buffer (const FIELD *,int);
0394 
0395 extern FORM_EXPORT(Field_Options)   field_opts (const FIELD *);
0396 
0397     /******************
0398     *  FORM routines  *
0399     ******************/
0400 
0401 extern FORM_EXPORT(FORM *)  new_form (FIELD **);
0402 
0403 extern FORM_EXPORT(FIELD **)    form_fields (const FORM *);
0404 extern FORM_EXPORT(FIELD *) current_field (const FORM *);
0405 
0406 extern FORM_EXPORT(WINDOW *)    form_win (const FORM *);
0407 extern FORM_EXPORT(WINDOW *)    form_sub (const FORM *);
0408 
0409 extern FORM_EXPORT(Form_Hook)   form_init (const FORM *);
0410 extern FORM_EXPORT(Form_Hook)   form_term (const FORM *);
0411 extern FORM_EXPORT(Form_Hook)   field_init (const FORM *);
0412 extern FORM_EXPORT(Form_Hook)   field_term (const FORM *);
0413 
0414 extern FORM_EXPORT(int) free_form (FORM *);
0415 extern FORM_EXPORT(int) set_form_fields (FORM *,FIELD **);
0416 extern FORM_EXPORT(int) field_count (const FORM *);
0417 extern FORM_EXPORT(int) set_form_win (FORM *,WINDOW *);
0418 extern FORM_EXPORT(int) set_form_sub (FORM *,WINDOW *);
0419 extern FORM_EXPORT(int) set_current_field (FORM *,FIELD *);
0420 extern FORM_EXPORT(int) unfocus_current_field (FORM *);
0421 extern FORM_EXPORT(int) field_index (const FIELD *);
0422 extern FORM_EXPORT(int) set_form_page (FORM *,int);
0423 extern FORM_EXPORT(int) form_page (const FORM *);
0424 extern FORM_EXPORT(int) scale_form (const FORM *,int *,int *);
0425 extern FORM_EXPORT(int) set_form_init (FORM *,Form_Hook);
0426 extern FORM_EXPORT(int) set_form_term (FORM *,Form_Hook);
0427 extern FORM_EXPORT(int) set_field_init (FORM *,Form_Hook);
0428 extern FORM_EXPORT(int) set_field_term (FORM *,Form_Hook);
0429 extern FORM_EXPORT(int) post_form (FORM *);
0430 extern FORM_EXPORT(int) unpost_form (FORM *);
0431 extern FORM_EXPORT(int) pos_form_cursor (FORM *);
0432 extern FORM_EXPORT(int) form_driver (FORM *,int);
0433 # if NCURSES_WIDECHAR
0434 extern FORM_EXPORT(int) form_driver_w (FORM *,int,wchar_t);
0435 # endif
0436 extern FORM_EXPORT(int) set_form_userptr (FORM *,void *);
0437 extern FORM_EXPORT(int) set_form_opts (FORM *,Form_Options);
0438 extern FORM_EXPORT(int) form_opts_on (FORM *,Form_Options);
0439 extern FORM_EXPORT(int) form_opts_off (FORM *,Form_Options);
0440 extern FORM_EXPORT(int) form_request_by_name (const char *);
0441 
0442 extern FORM_EXPORT(const char *)    form_request_name (int);
0443 
0444 extern FORM_EXPORT(void *)  form_userptr (const FORM *);
0445 
0446 extern FORM_EXPORT(Form_Options)    form_opts (const FORM *);
0447 
0448 extern FORM_EXPORT(bool)    data_ahead (const FORM *);
0449 extern FORM_EXPORT(bool)    data_behind (const FORM *);
0450 
0451 #if NCURSES_SP_FUNCS
0452 extern FORM_EXPORT(FORM *)  NCURSES_SP_NAME(new_form) (SCREEN*, FIELD **);
0453 #endif
0454 
0455 #ifdef __cplusplus
0456   }
0457 #endif
0458 /* *INDENT-ON*/
0459 
0460 #endif /* FORM_H */