# form_fieldtype 3x

    form_fieldtype(3x)                                          form_fieldtype(3x)

## NAME

           form_fieldtype - define validation-field types

## SYNOPSIS

           #include <form.h>
           FIELDTYPE *new_fieldtype(
               bool (* const field_check)(FIELD *, const void *),
               bool (* const char_check)(int, const void *));
           int free_fieldtype(FIELDTYPE *fieldtype);
           int set_fieldtype_arg(
               FIELDTYPE *fieldtype,
               void *(* const make_arg)(va_list *),
               void *(* const copy_arg)(const void *),
               void  (* const free_arg)(void *));
           int set_fieldtype_choice(
               FIELDTYPE *fieldtype,
               bool (* const next_choice)(FIELD *, const void *),
               bool (* const prev_choice)(FIELD *, const void *));
           FIELDTYPE *link_fieldtype(FIELDTYPE *type1,
                                     FIELDTYPE *type2);

## DESCRIPTION

           The  function  new_fieldtype  creates  a new field type usable for data
           validation.  You supply it with field_check, a predicate to  check  the
           validity  of an entered data string whenever the user attempts to leave
           a field.  The (FIELD *) argument is passed in so the validation  predi-
           cate can see the field's buffer, sizes and other attributes; the second
           argument is an argument-block structure, about which more below.

           You also supply new_fieldtype with char_check, a function  to  validate
           input  characters  as they are entered; it will be passed the character
           to be checked and a pointer to an argument-block structure.

           The function free_fieldtype frees the space allocated for a given vali-
           dation type.

           The  function  set_fieldtype_arg  associates  three  storage-management
           functions with a field type.  The make_arg  function  is  automatically
           applied to the list of arguments you give set_field_type when attaching
           validation to a field; its job is to bundle  these  into  an  allocated
           argument-block  object  which  can later be passed to validation predi-
           cated.  The other two hook arguments should  copy  and  free  argument-
           block  structures.   They  will  be used by the forms-driver code.  You
           must supply the make_arg function, the other two are optional, you  may
           supply  NULL  for  them.  In this case it is assumed that make_arg does
           not allocate memory but simply loads the argument into a single  scalar
           value.

           The function link_fieldtype creates a new field type from the two given
           types.  They are connected by an logical 'OR'.

           The form driver requests  REQ_NEXT_CHOICE  and  REQ_PREV_CHOICE  assume
           that  the  possible  values of a field form an ordered set, and provide
           the forms user with a way to move  through  the  set.   The  set_field-
           type_choice  function  allows forms programmers to define successor and
           predecessor functions for the field type.   These  functions  take  the
           field pointer and an argument-block structure as arguments.

## RETURN VALUE

           The  pointer-valued  routines  return  NULL  on  error.  They set errno
           according to their success:

           E_OK The routine succeeded.

           E_BAD_ARGUMENT
                Routine detected an incorrect or out-of-range argument.

           E_SYSTEM_ERROR
                System error occurred, e.g., malloc failure.

           The integer-valued routines return one of the following codes on error:

           E_OK The routine succeeded.

           E_BAD_ARGUMENT
                Routine detected an incorrect or out-of-range argument.

           E_CONNECTED
                The field is already connected to a form.

           E_CURRENT
                The field is the current field.

           E_SYSTEM_ERROR
                System error occurred (see errno).

## SEE ALSO

           curses(3x), form(3x).

## NOTES

           The  header  file  <form.h>  automatically  includes  the  header  file
           <curses.h>.

           All  of  the  (char  *) arguments of these functions should actually be
           (void *).  The type has been left uncorrected for strict  compatibility
           with System V.

## PORTABILITY

           These  routines emulate the System V forms library.  They were not sup-
           ported on Version 7 or BSD versions.

## AUTHORS

           Juergen Pfeifer.  Manual pages and adaptation for new curses by Eric S.
           Raymond.

                                                                form_fieldtype(3x)