## NAME

           form_driver - command-processing loop of the form system

## SYNOPSIS

           #include <form.h>
           int form_driver(FORM *form, int c);

## DESCRIPTION

           Once a form has been posted (displayed), you should funnel
           input events to it through form_driver.  This routine  has
           two  major input cases; either the input is a form naviga-
           tion request or it's a  printable  ASCII  character.   The
           form driver requests are as follows:

           REQ_NEXT_PAGE
                Move to the next page.

           REQ_PREV_PAGE
                Move to the previous page.

           REQ_FIRST_PAGE
                Move to the first page.

           REQ_LAST_PAGE
                Move to the last field.

           REQ_NEXT_FIELD
                Move to the next field.

           REQ_PREV_FIELD
                Move to the previous field.

           REQ_FIRST_FIELD
                Move to the first field.

           REQ_LAST_FIELD
                Move to the last field.

           REQ_SNEXT_FIELD
                Move to the sorted next field.

           REQ_SPREV_FIELD
                Move to the sorted previous field.

           REQ_SFIRST_FIELD
                Move to the sorted first field.

           REQ_SLAST_FIELD
                Move to the sorted last field.

           REQ_LEFT_FIELD
                Move left to a field.

           REQ_RIGHT_FIELD
                Move right to a field.

           REQ_UP_FIELD
                Move up to a field.

           REQ_DOWN_FIELD
                Move down to a field.

           REQ_NEXT_CHAR
                Move to the next char.

           REQ_PREV_CHAR
                Move to the previous char.

           REQ_NEXT_LINE
                Move to the next line.

           REQ_PREV_LINE
                Move to the previous line.

           REQ_NEXT_WORD
                Move to the next word.

           REQ_PREV_WORD
                Move to the previous word.

           REQ_BEG_FIELD
                Move to the beginning of the field.

           REQ_END_FIELD
                Move to the end of the field.

           REQ_BEG_LINE
                Move to the beginning of the line.

           REQ_END_LINE
                Move to the end of the line.

           REQ_LEFT_CHAR
                Move left in the field.

           REQ_RIGHT_CHAR
                Move right in the field.

           REQ_UP_CHAR
                Move up in the field.

           REQ_DOWN_CHAR
                Move down in the field.

           REQ_NEW_LINE
                Insert or overlay a new line.

           REQ_INS_CHAR
                Insert a blank at the cursor.

           REQ_INS_LINE
                Insert a blank line at the cursor.

           REQ_DEL_CHAR
                Delete character at the cursor.

           REQ_DEL_PREV
                Delete character before the cursor.

           REQ_DEL_LINE
                Delete line at the cursor.

           REQ_DEL_WORD
                Delete blank-delimited word at the cursor.

           REQ_CLR_EOL
                Clear to end of line from cursor.

           REQ_CLR_EOF
                Clear to end of field from cursor.

           REQ_CLR_FIELD
                Clear the entire field.

           REQ_OVL_MODE
                Enter overlay mode.

           REQ_INS_MODE
                Enter insert mode.

           REQ_SCR_FLINE
                Scroll the field forward a line.

           REQ_SCR_BLINE
                Scroll the field backward a line.

           REQ_SCR_FPAGE
                Scroll the field forward a page.

           REQ_SCR_BPAGE
                Scroll the field backward a page.

           REQ_SCR_FHPAGE
                Scroll the field forward half a page.

           REQ_SCR_BHPAGE
                Scroll the field backward half a page.

           REQ_SCR_FCHAR
                Scroll the field forward a character.

           REQ_SCR_BCHAR
                Scroll the field backward a character.

           REQ_SCR_HFLINE
                Horizontal scroll the field forward a line.

           REQ_SCR_HBLINE
                Horizontal scroll the field backward a line.

           REQ_SCR_HFHALF
                Horizontal scroll the field forward half a line.

           REQ_SCR_HBHALF
                Horizontal scroll the field backward half a line.

           REQ_VALIDATION
                Validate field.

           REQ_NEXT_CHOICE
                Display next field choice.

           REQ_PREV_CHOICE
                Display previous field choice.

           If the second argument is a printable ASCII character, the
           driver places it in the current position  in  the  current
           field.   If  it is one of the forms requests listed above,
           that request is executed.

           If the second argument is neither printable ASCII nor  one
           of the above pre-defined form requests, the driver assumes
           it  is  an  application-specific   command   and   returns
           E_UNKNOWN_COMMAND.  Application-defined commands should be
           defined relative to  MAX_COMMAND,  the  maximum  value  of
           these pre-defined requests.

## RETURN VALUE

           form_driver return one of the following error codes:

           E_OK The routine succeeded.

           E_SYSTEM_ERROR
                System error occurred (see errno).

           E_BAD_ARGUMENT
                Routine  detected  an incorrect or out-of-range argu-
                ment.

           E_BAD_STATE
                Routine  was  called  from   an   initialization   or
                termination function.

           E_NOT_POSTED
                The form has not been posted.

           E_UNKNOWN_COMMAND
                The form driver code saw an unknown request code.

           E_INVALID_FIELD
                Contents of field is invalid.

           E_REQUEST_DENIED
                The form driver could not process the request.

## SEE ALSO

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

## NOTES

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

## PORTABILITY

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

## AUTHORS

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