root/usr/src/lib/libeti/form/inc/form.h
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*      Copyright (c) 1988 AT&T */
/*        All Rights Reserved   */


#ifndef _FORM_H
#define _FORM_H

#include <curses.h>
#include <eti.h>

#ifdef  __cplusplus
extern "C" {
#endif

/*
 * FIELDTYPE
 */

typedef struct typenode {

        int                     status;         /* flags                */
        int                     ref;            /* reference count      */
        struct typenode *       left;           /* ptr to operand for | */
        struct typenode *       right;          /* ptr to operand for | */
        PTF_charP               makearg;        /* make fieldtype arg   */
        PTF_charP               copyarg;        /* copy fieldtype arg   */
        PTF_void                freearg;        /* free fieldtype arg   */
        PTF_int                 fcheck;         /* field validation     */
        PTF_int                 ccheck;         /* character validation */
        PTF_int                 next;           /* enumerate next value */
        PTF_int                 prev;           /* enumerate prev value */
}
        FIELDTYPE;

/*
 * _PAGE
 */

typedef struct {

        int                     pmin;           /* first field on page  */
        int                     pmax;           /* last field on page   */
        int                     smin;           /* top leftmost field   */
        int                     smax;           /* bottom rightmost     */
}
        _PAGE;

/*
 * FIELD
 */

typedef struct fieldnode {

        int                     status;         /* flags                */
        int                     rows;           /* size in rows         */
        int                     cols;           /* size in cols         */
        int                     frow;           /* first row            */
        int                     fcol;           /* first col            */
        int                     drows;          /* dynamic rows         */
        int                     dcols;          /* dynamic cols         */
        int                     maxgrow;        /* maximum field growth */
        int                     nrow;           /* offscreen rows       */
        int                     nbuf;           /* additional buffers   */
        int                     just;           /* justification        */
        int                     page;           /* page on form         */
        int                     index;          /* into form -> field   */
        int                     pad;            /* pad character        */
        chtype                  fore;           /* foreground attribute */
        chtype                  back;           /* background attribute */
        OPTIONS                 opts;           /* options              */
        struct fieldnode *      snext;          /* sorted order pointer */
        struct fieldnode *      sprev;          /* sorted order pointer */
        struct fieldnode *      link;           /* linked field chain   */
        struct formnode *       form;           /* containing form      */
        FIELDTYPE *             type;           /* field type           */
        char *                  arg;            /* argument for type    */
        char *                  buf;            /* field buffers        */
        char *                  usrptr;         /* user pointer         */
}
        FIELD;

/*
 * FORM
 */

typedef struct formnode {

        int                     status;         /* flags                */
        int                     rows;           /* size in rows         */
        int                     cols;           /* size in cols         */
        int                     currow;         /* current row          */
        int                     curcol;         /* current col          */
        int                     toprow;         /* in vertically        */
                                                /* scrollable field     */
        int                     begincol;       /* in horizontally      */
                                                /* scrollable field     */
        int                     maxfield;       /* number of fields     */
        int                     maxpage;        /* number of pages      */
        int                     curpage;        /* index into page      */
        OPTIONS                 opts;           /* options              */
        WINDOW *                win;            /* window               */
        WINDOW *                sub;            /* subwindow            */
        WINDOW *                w;              /* window               */
        FIELD **                field;          /* field [maxfield]     */
        FIELD *                 current;        /* current field        */
        _PAGE *                 page;           /* page [maxpage]       */
        char *                  usrptr;         /* user pointer         */
        PTF_void                forminit;       /* user function        */
        PTF_void                formterm;       /* user function        */
        PTF_void                fieldinit;      /* user function        */
        PTF_void                fieldterm;      /* user function        */
}
        FORM;

/*
 * miscellaneous #defines
 */

/*
 *      field justification
 */
#define NO_JUSTIFICATION        0
#define JUSTIFY_LEFT            1
#define JUSTIFY_CENTER          2
#define JUSTIFY_RIGHT           3
/*
 *      field options
 */
#define O_VISIBLE               0x0001
#define O_ACTIVE                0x0002
#define O_PUBLIC                0x0004
#define O_EDIT                  0x0008
#define O_WRAP                  0x0010
#define O_BLANK                 0x0020
#define O_AUTOSKIP              0x0040
#define O_NULLOK                0x0080
#define O_PASSOK                0x0100
#define O_STATIC                0x0200
/*
 *      form options
 */
#define O_NL_OVERLOAD           0x0001
#define O_BS_OVERLOAD           0x0002
/*
 *      form driver commands
 */
#define REQ_NEXT_PAGE   (KEY_MAX + 1)   /* move to next page            */
#define REQ_PREV_PAGE   (KEY_MAX + 2)   /* move to previous page        */
#define REQ_FIRST_PAGE  (KEY_MAX + 3)   /* move to first page           */
#define REQ_LAST_PAGE   (KEY_MAX + 4)   /* move to last page            */

#define REQ_NEXT_FIELD  (KEY_MAX + 5)   /* move to next field           */
#define REQ_PREV_FIELD  (KEY_MAX + 6)   /* move to previous field       */
#define REQ_FIRST_FIELD (KEY_MAX + 7)   /* move to first field          */
#define REQ_LAST_FIELD  (KEY_MAX + 8)   /* move to last field           */
#define REQ_SNEXT_FIELD (KEY_MAX + 9)   /* move to sorted next field    */
#define REQ_SPREV_FIELD (KEY_MAX + 10)  /* move to sorted prev field    */
#define REQ_SFIRST_FIELD (KEY_MAX + 11) /* move to sorted first field   */
#define REQ_SLAST_FIELD (KEY_MAX + 12)  /* move to sorted last field    */
#define REQ_LEFT_FIELD  (KEY_MAX + 13)  /* move to left to field        */
#define REQ_RIGHT_FIELD (KEY_MAX + 14)  /* move to right to field       */
#define REQ_UP_FIELD    (KEY_MAX + 15)  /* move to up to field          */
#define REQ_DOWN_FIELD  (KEY_MAX + 16)  /* move to down to field        */

#define REQ_NEXT_CHAR   (KEY_MAX + 17)  /* move to next char in field   */
#define REQ_PREV_CHAR   (KEY_MAX + 18)  /* move to prev char in field   */
#define REQ_NEXT_LINE   (KEY_MAX + 19)  /* move to next line in field   */
#define REQ_PREV_LINE   (KEY_MAX + 20)  /* move to prev line in field   */
#define REQ_NEXT_WORD   (KEY_MAX + 21)  /* move to next word in field   */
#define REQ_PREV_WORD   (KEY_MAX + 22)  /* move to prev word in field   */
#define REQ_BEG_FIELD   (KEY_MAX + 23)  /* move to first char in field  */
#define REQ_END_FIELD   (KEY_MAX + 24)  /* move after last char in fld  */
#define REQ_BEG_LINE    (KEY_MAX + 25)  /* move to beginning of line    */
#define REQ_END_LINE    (KEY_MAX + 26)  /* move after last char in line */
#define REQ_LEFT_CHAR   (KEY_MAX + 27)  /* move left in field           */
#define REQ_RIGHT_CHAR  (KEY_MAX + 28)  /* move right in field          */
#define REQ_UP_CHAR     (KEY_MAX + 29)  /* move up in field             */
#define REQ_DOWN_CHAR   (KEY_MAX + 30)  /* move down in field           */

#define REQ_NEW_LINE    (KEY_MAX + 31)  /* insert/overlay new line      */
#define REQ_INS_CHAR    (KEY_MAX + 32)  /* insert blank char at cursor  */
#define REQ_INS_LINE    (KEY_MAX + 33)  /* insert blank line at cursor  */
#define REQ_DEL_CHAR    (KEY_MAX + 34)  /* delete char at cursor        */
#define REQ_DEL_PREV    (KEY_MAX + 35)  /* delete char before cursor    */
#define REQ_DEL_LINE    (KEY_MAX + 36)  /* delete line at cursor        */
#define REQ_DEL_WORD    (KEY_MAX + 37)  /* delete line at cursor        */
#define REQ_CLR_EOL     (KEY_MAX + 38)  /* clear to end of line         */
#define REQ_CLR_EOF     (KEY_MAX + 39)  /* clear to end of field        */
#define REQ_CLR_FIELD   (KEY_MAX + 40)  /* clear entire field           */
#define REQ_OVL_MODE    (KEY_MAX + 41)  /* begin overlay mode           */
#define REQ_INS_MODE    (KEY_MAX + 42)  /* begin insert mode            */

#define REQ_SCR_FLINE   (KEY_MAX + 43)  /* scroll field forward a line  */
#define REQ_SCR_BLINE   (KEY_MAX + 44)  /* scroll field backward a line */
#define REQ_SCR_FPAGE   (KEY_MAX + 45)  /* scroll field forward a page  */
#define REQ_SCR_BPAGE   (KEY_MAX + 46)  /* scroll field backward a page */
#define REQ_SCR_FHPAGE  (KEY_MAX + 47)  /* scroll field forward half page */
#define REQ_SCR_BHPAGE  (KEY_MAX + 48)  /* scroll field backward half page */

#define REQ_SCR_FCHAR   (KEY_MAX + 49)  /* horizontal scroll char */
#define REQ_SCR_BCHAR   (KEY_MAX + 50)  /* horizontal scroll char */
#define REQ_SCR_HFLINE  (KEY_MAX + 51)  /* horizontal scroll line */
#define REQ_SCR_HBLINE  (KEY_MAX + 52)  /* horizontal scroll line */
#define REQ_SCR_HFHALF  (KEY_MAX + 53)  /* horizontal scroll half line */
#define REQ_SCR_HBHALF  (KEY_MAX + 54)  /* horizontal scroll half line */

#define REQ_VALIDATION  (KEY_MAX + 55)  /* validate field               */
#define REQ_NEXT_CHOICE (KEY_MAX + 56)  /* display next field choice    */
#define REQ_PREV_CHOICE (KEY_MAX + 57)  /* display prev field choice    */

#define MIN_FORM_COMMAND (KEY_MAX + 1)  /* used by form_driver          */
#define MAX_FORM_COMMAND (KEY_MAX + 57) /* used by form_driver          */

/*
 *  standard field types
 */

extern FIELDTYPE *      TYPE_ALPHA;
extern FIELDTYPE *      TYPE_ALNUM;
extern FIELDTYPE *      TYPE_ENUM;
extern FIELDTYPE *      TYPE_INTEGER;
extern FIELDTYPE *      TYPE_NUMERIC;
extern FIELDTYPE *      TYPE_REGEXP;

/*
 *  default objects
 */

extern FORM *           _DEFAULT_FORM;
extern FIELD *          _DEFAULT_FIELD;

#ifdef __STDC__

/*
 *  FIELDTYPE routines
 */

extern FIELDTYPE *      new_fieldtype(PTF_int, PTF_int);
extern FIELDTYPE *      link_fieldtype(FIELDTYPE *, FIELDTYPE *);
extern int              free_fieldtype(FIELDTYPE *);
extern int              set_fieldtype_arg(FIELDTYPE *, PTF_charP,
                                            PTF_charP, PTF_void);
extern int              set_fieldtype_choice(FIELDTYPE *, PTF_int, PTF_int);

/*
 *  FIELD routines
 */

extern FIELD *          new_field(int, int, int, int, int, int);
extern FIELD *          dup_field(FIELD *, int, int);
extern FIELD *          link_field(FIELD *, int, int);
extern int              free_field(FIELD *);
extern int              field_info(FIELD *, int *, int *, int *, int *,
                            int *, int *);
extern int              dynamic_field_info(FIELD *, int *, int *, int *);
extern int              set_max_field(FIELD *, int);
extern int              move_field(FIELD *, int, int);
extern int              set_field_type(FIELD *, FIELDTYPE *, ...);
extern FIELDTYPE *      field_type(FIELD *);
extern char *           field_arg(FIELD *);
extern int              set_new_page(FIELD *, int);
extern int              new_page(FIELD *);
extern int              set_field_just(FIELD *, int);
extern int              field_just(FIELD *);
extern int              set_field_fore(FIELD *, chtype);
extern chtype           field_fore(FIELD *);
extern int              set_field_back(FIELD *, chtype);
extern chtype           field_back(FIELD *);
extern int              set_field_pad(FIELD *, int);
extern int              field_pad(FIELD *);
extern int              set_field_buffer(FIELD *, int, char *);
extern char *           field_buffer(FIELD *, int);
extern int              set_field_status(FIELD *, int);
extern int              field_status(FIELD *);
extern int              set_field_userptr(FIELD *, char *);
extern char *           field_userptr(FIELD *);
extern int              set_field_opts(FIELD *, OPTIONS);
extern OPTIONS          field_opts(FIELD *);
extern int              field_opts_on(FIELD *, OPTIONS);
extern int              field_opts_off(FIELD *, OPTIONS);
extern int              field_index(FIELD *);

/*
 *  FORM routines
 */

extern FORM *           new_form(FIELD **);
extern int              free_form(FORM *);
extern int              set_form_fields(FORM *, FIELD **);
extern FIELD **         form_fields(FORM *);
extern int              field_count(FORM *);
extern int              set_form_win(FORM *, WINDOW *);
extern WINDOW *         form_win(FORM *);
extern int              set_form_sub(FORM *, WINDOW *);
extern WINDOW *         form_sub(FORM *);
extern int              set_current_field(FORM *, FIELD *);
extern FIELD *          current_field(FORM *);
extern int              set_form_page(FORM *, int);
extern int              form_page(FORM *);
extern int              scale_form(FORM *, int *, int *);
extern int              set_form_init(FORM *, PTF_void);
extern PTF_void         form_init(FORM *);
extern int              set_form_term(FORM *, PTF_void);
extern PTF_void         form_term(FORM *);
extern int              set_field_init(FORM *, PTF_void);
extern PTF_void         field_init(FORM *);
extern int              set_field_term(FORM *, PTF_void);
extern PTF_void         field_term(FORM *);
extern int              post_form(FORM *);
extern int              unpost_form(FORM *);
extern int              pos_form_cursor(FORM *);
extern int              form_driver(FORM *, int);
extern int              set_form_userptr(FORM *, char *);
extern char *           form_userptr(FORM *);
extern int              set_form_opts(FORM *, OPTIONS);
extern OPTIONS          form_opts(FORM *);
extern int              form_opts_on(FORM *, OPTIONS);
extern int              form_opts_off(FORM *, OPTIONS);
extern int              data_ahead(FORM *);
extern int              data_behind(FORM *);

#else   /* old style extern's */

/*
 *  FIELDTYPE routines
 */

extern FIELDTYPE *      new_fieldtype();
extern FIELDTYPE *      link_fieldtype();
extern int              free_fieldtype();
extern int              set_fieldtype_arg();
extern int              set_fieldtype_choice();

/*
 *  FIELD routines
 */

extern FIELD *          new_field();
extern FIELD *          dup_field();
extern FIELD *          link_field();
extern int              free_field();
extern int              field_info();
extern int              dynamic_field_info();
extern int              set_max_field();
extern int              move_field();
extern int              set_field_type();
extern FIELDTYPE *      field_type();
extern char *           field_arg();
extern int              set_new_page();
extern int              new_page();
extern int              set_field_just();
extern int              field_just();
extern int              set_field_fore();
extern chtype           field_fore();
extern int              set_field_back();
extern chtype           field_back();
extern int              set_field_pad();
extern int              field_pad();
extern int              set_field_buffer();
extern char *           field_buffer();
extern int              set_field_status();
extern int              field_status();
extern int              set_field_userptr();
extern char *           field_userptr();
extern int              set_field_opts();
extern OPTIONS          field_opts();
extern int              field_opts_on();
extern int              field_opts_off();
extern int              field_index();

/*
 *  FORM routines
 */

extern FORM *           new_form();
extern int              free_form();
extern int              set_form_fields();
extern FIELD **         form_fields();
extern int              field_count();
extern int              set_form_win();
extern WINDOW *         form_win();
extern int              set_form_sub();
extern WINDOW *         form_sub();
extern int              set_current_field();
extern FIELD *          current_field();
extern int              set_form_page();
extern int              form_page();
extern int              scale_form();
extern int              set_form_init();
extern PTF_void         form_init();
extern int              set_form_term();
extern PTF_void         form_term();
extern int              set_field_init();
extern PTF_void         field_init();
extern int              set_field_term();
extern PTF_void         field_term();
extern int              post_form();
extern int              unpost_form();
extern int              pos_form_cursor();
extern int              form_driver();
extern int              set_form_userptr();
extern char *           form_userptr();
extern int              set_form_opts();
extern OPTIONS          form_opts();
extern int              form_opts_on();
extern int              form_opts_off();
extern int              data_ahead();
extern int              data_behind();

#endif  /* __STDC__ */

#ifdef  __cplusplus
}
#endif

#endif  /* _FORM_H */