/****************************************************************************
 * Copyright (c) 1998 Free Software Foundation, Inc.                        *
 *                                                                          *
 * Permission is hereby granted, free of charge, to any person obtaining a  *
 * copy of this software and associated documentation files (the            *
 * "Software"), to deal in the Software without restriction, including      *
 * without limitation the rights to use, copy, modify, merge, publish,      *
 * distribute, distribute with modifications, sublicense, and/or sell       *
 * copies of the Software, and to permit persons to whom the Software is    *
 * furnished to do so, subject to the following conditions:                 *
 *                                                                          *
 * The above copyright notice and this permission notice shall be included  *
 * in all copies or substantial portions of the Software.                   *
 *                                                                          *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
 * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
 * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
 *                                                                          *
 * Except as contained in this notice, the name(s) of the above copyright   *
 * holders shall not be used in advertising or otherwise to promote the     *
 * sale, use or other dealings in this Software without prior written       *
 * authorization.                                                           *
 ****************************************************************************/

/****************************************************************************
 *   Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997            *
 ****************************************************************************/

#ifndef FORM_H
#define FORM_H

#if defined(__sun__) && defined(__GNUC__)
 #define _MSE_INT_H
#endif

#include <cmFormConfigure.h>

/* figure out which curses.h to include */
# if defined(CURSES_HAVE_NCURSES_H)
#  include <ncurses.h>
# elif defined(CURSES_HAVE_NCURSES_NCURSES_H)
#  include <ncurses/ncurses.h>
# elif defined(CURSES_HAVE_NCURSES_CURSES_H)
#  include <ncurses/curses.h>
# else
#  include <curses.h>
# endif

#include <eti.h>
#include <stdarg.h>

#ifdef __cplusplus
  extern "C" {
#endif

typedef int Form_Options;
typedef int Field_Options;

        /**********
        *  _PAGE  *
        **********/

typedef struct {
  short pmin;     /* index of first field on page            */
  short pmax;     /* index of last field on page             */
  short smin;     /* index of top leftmost field on page     */
  short smax;     /* index of bottom rightmost field on page */
} _PAGE;

        /**********
        *  FIELD  *
        **********/

typedef struct fieldnode {
  unsigned short        status;   /* flags                      */
  short                 rows;     /* size in rows               */
  short                 cols;     /* size in cols               */
  short                 frow;     /* first row                  */
  short                 fcol;     /* first col                  */
  int                   drows;    /* dynamic rows               */
  int                   dcols;    /* dynamic cols               */
  int                   maxgrow;  /* maximum field growth       */
  int                   nrow;     /* offscreen rows             */
  short                 nbuf;     /* additional buffers         */
  short                 just;     /* justification              */
  short                 page;     /* page on form               */
  short                 index;    /* into form -> field         */
  int                   pad;      /* pad character              */
  chtype                fore;     /* foreground attribute       */
  chtype                back;     /* background attribute       */
  Field_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            */
  struct typenode *     type;     /* field type                 */
  void *                arg;      /* argument for type          */
  char *                buf;      /* field buffers              */
  void *                usrptr;   /* user pointer               */
} FIELD;

        /**************
        *  FIELDTYPE  *
        **************/

typedef struct typenode {
  unsigned short        status;                /* flags                */
  long                  ref;                   /* reference count      */
  struct typenode *     left;                  /* ptr to operand for | */
  struct typenode *     right;                 /* ptr to operand for | */

  void* (*makearg)(va_list *);                 /* make fieldtype arg   */
  void* (*copyarg)(const void *);              /* copy fieldtype arg   */
  void  (*freearg)(void *);                    /* free fieldtype arg   */

  bool  (*fcheck)(FIELD *,const void *);       /* field validation     */
  bool  (*ccheck)(int,const void *);           /* character validation */

  bool  (*next)(FIELD *,const void *);         /* enumerate next value */
  bool  (*prev)(FIELD *,const void *);         /* enumerate prev value */

} FIELDTYPE;

        /*********
        *  FORM  *
        *********/

typedef struct formnode {
  unsigned short        status;   /* flags                      */
  short                 rows;     /* size in rows               */
  short                 cols;     /* size in cols               */
  int                   currow;   /* current row in field window*/
  int                   curcol;   /* current col in field window*/
  int                   toprow;   /* in scrollable field window */
  int                   begincol; /* in horiz. scrollable field */
  short                 maxfield; /* number of fields           */
  short                 maxpage;  /* number of pages            */
  short                 curpage;  /* index into page            */
  Form_Options          opts;     /* options                    */
  WINDOW *              win;      /* window                     */
  WINDOW *              sub;      /* subwindow                  */
  WINDOW *              w;        /* window for current field   */
  FIELD **              field;    /* field [maxfield]           */
  FIELD *               current;  /* current field              */
  _PAGE *               page;     /* page [maxpage]             */
  void *                usrptr;   /* user pointer               */

  void                  (*forminit)(struct formnode *);
  void                  (*formterm)(struct formnode *);
  void                  (*fieldinit)(struct formnode *);
  void                  (*fieldterm)(struct formnode *);

} FORM;

typedef void (*Form_Hook)(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          */

#if defined(MAX_COMMAND)
#  if (MAX_FORM_COMMAND > MAX_COMMAND)
#    error Something is wrong -- MAX_FORM_COMMAND is greater than MAX_COMMAND
#  elif (MAX_COMMAND != (KEY_MAX + 128))
#    error Something is wrong -- MAX_COMMAND is already inconsistently defined.
#  endif
#else
#  define MAX_COMMAND (KEY_MAX + 128)
#endif

        /*************************
        *  standard field types  *
        *************************/
extern FIELDTYPE *TYPE_ALPHA,
                 *TYPE_ALNUM,
                 *TYPE_ENUM,
                 *TYPE_INTEGER,
                 *TYPE_NUMERIC,
                 *TYPE_REGEXP;

        /************************************
        *  built-in additional field types  *
        *  They are not defined in SVr4     *
        ************************************/
extern FIELDTYPE *TYPE_IPV4;      /* Internet IP Version 4 address */

        /*********************** 
        *   Default objects    *
        ***********************/ 
extern FORM  *_nc_Default_Form;
extern FIELD *_nc_Default_Field;


        /***********************
        *  FIELDTYPE routines  *
        ***********************/
extern FIELDTYPE 
                *new_fieldtype(
                    bool (* const field_check)(FIELD *,const void *),
                    bool (* const char_check)(int,const void *)),
                *link_fieldtype(FIELDTYPE *,FIELDTYPE *);

extern int      free_fieldtype(FIELDTYPE *),
                set_fieldtype_choice (FIELDTYPE *,
                    bool (* const next_choice)(FIELD *,const void *),
                    bool (* const prev_choice)(FIELD *,const void *));

        /*******************
        *  FIELD routines  *
        *******************/
extern FIELD    *new_field(int,int,int,int,int,int),
                *dup_field(FIELD *,int,int),
                *link_field(FIELD *,int,int);

extern int      free_field(FIELD *),
                field_info(const FIELD *,int *,int *,int *,int *,int *,int *),
                dynamic_field_info(const FIELD *,int *,int *,int *),
                set_max_field( FIELD *,int),
                move_field(FIELD *,int,int),
                set_field_type(FIELD *,FIELDTYPE *,...),
                set_new_page(FIELD *,bool),
                set_field_just(FIELD *,int),
                field_just(const FIELD *),
                set_field_fore(FIELD *,chtype),
                set_field_back(FIELD *,chtype),
                set_field_pad(FIELD *,int),
                field_pad(const FIELD *),
                set_field_buffer(FIELD *,int,const char *),
                set_field_status(FIELD *,bool),
                set_field_userptr(FIELD *, void *),
                set_field_opts(FIELD *,Field_Options),
                field_opts_on(FIELD *,Field_Options),
                field_opts_off(FIELD *,Field_Options);

extern chtype   field_fore(const FIELD *),
                field_back(const FIELD *);

extern bool     new_page(const FIELD *),
                field_status(const FIELD *);

extern void     *field_arg(const FIELD *);

extern void     *field_userptr(const FIELD *);

extern FIELDTYPE
                *field_type(const FIELD *);

extern char*    field_buffer(const FIELD *,int);

extern Field_Options  
                field_opts(const FIELD *);

        /******************
        *  FORM routines  *
        ******************/
extern FORM     *new_form(FIELD **);

extern FIELD    **form_fields(const FORM *),
                *current_field(const FORM *);

extern WINDOW   *form_win(const FORM *),
                *form_sub(const FORM *);

extern Form_Hook
                form_init(const FORM *),
                form_term(const FORM *),
                field_init(const FORM *),
                field_term(const FORM *);

extern int      free_form(FORM *),
                set_form_fields(FORM *,FIELD **),
                field_count(const FORM *),
                set_form_win(FORM *,WINDOW *),
                set_form_sub(FORM *,WINDOW *),
                set_current_field(FORM *,FIELD *),
                field_index(const FIELD *),
                set_form_page(FORM *,int),
                form_page(const FORM *),
                scale_form(const FORM *,int *,int *),
                set_form_init(FORM *,Form_Hook),
                set_form_term(FORM *,Form_Hook),
                set_field_init(FORM *,Form_Hook),
                set_field_term(FORM *,Form_Hook),
                post_form(FORM *),
                unpost_form(FORM *),
                pos_form_cursor(FORM *),
                form_driver(FORM *,int),
                set_form_userptr(FORM *,void *),
                set_form_opts(FORM *,Form_Options),
                form_opts_on(FORM *,Form_Options),
                form_opts_off(FORM *,Form_Options),
                form_request_by_name(const char *);

extern const char
                *form_request_name(int);

extern void     *form_userptr(const FORM *);

extern Form_Options
                form_opts(const FORM *);

extern bool     data_ahead(const FORM *),
                data_behind(const FORM *);

#ifdef __cplusplus
  }
#endif

#endif  /* FORM_H */
