Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
form_driver(3X)						       form_driver(3X)

NAME
       form_driver, form_driver_w - command-processing loop of the form	system

SYNOPSIS
       #include	<form.h>

       int form_driver(FORM *form, int c);
       int form_driver_w(FORM *form, int c, wchar_t wch);

DESCRIPTION
   form_driver
       Once a form has been posted (displayed),	you should funnel input	events
       to it through form_driver.  This	routine	has three major	input cases:

          The	input  is a form navigation request.  Navigation request codes
	   are constants defined in <form.h>, which are	distinct from the key-
	   and character codes returned	by wgetch(3X).

          The input is	a printable character.	 Printable  characters	(which
	   must	 be positive, less than	256) are checked according to the pro-
	   gram's locale settings.

          The input is	the KEY_MOUSE special key  associated  with  an	 mouse
	   event.

   form_driver_w
       This extension simplifies the use of the	forms library using wide char-
       acters.	The input is either a key code (a request) or a	wide character
       returned	 by  get_wch(3X).   The	type must be passed as well, to	enable
       the library to determine	whether	the parameter is a wide	character or a
       request.

   Form-driver requests
       The form	driver requests	are as follows:
       Name		  Description
       ---------------------------------------------------------------------
       REQ_BEG_FIELD	  Move to the beginning	of the field.
       REQ_BEG_LINE	  Move to the beginning	of the line.
       REQ_CLR_EOF	  Clear	to end of field	from cursor.
       REQ_CLR_EOL	  Clear	to end of line from cursor.
       REQ_CLR_FIELD	  Clear	the entire field.
       REQ_DEL_CHAR	  Delete character at the cursor.
       REQ_DEL_LINE	  Delete line at the cursor.
       REQ_DEL_PREV	  Delete character before the cursor.
       REQ_DEL_WORD	  Delete blank-delimited word at the cursor.
       REQ_DOWN_CHAR	  Move down in the field.
       REQ_DOWN_FIELD	  Move down to a field.
       REQ_END_FIELD	  Move to the end of the field.
       REQ_END_LINE	  Move to the end of the line.
       REQ_FIRST_FIELD	  Move to the first field.
       REQ_FIRST_PAGE	  Move to the first page.
       REQ_INS_CHAR	  Insert a blank at the	cursor.
       REQ_INS_LINE	  Insert a blank line at the cursor.
       REQ_INS_MODE	  Enter	insert mode.
       REQ_LAST_FIELD	  Move to the last field.
       REQ_LAST_PAGE	  Move to the last field.
       REQ_LEFT_CHAR	  Move left in the field.
       REQ_LEFT_FIELD	  Move left to a field.
       REQ_NEW_LINE	  Insert or overlay a new line.
       REQ_NEXT_CHAR	  Move to the next char.
       REQ_NEXT_CHOICE	  Display next field choice.
       REQ_NEXT_FIELD	  Move to the next field.
       REQ_NEXT_LINE	  Move to the next line.
       REQ_NEXT_PAGE	  Move to the next page.
       REQ_NEXT_PAGE	  Move to the next page.
       REQ_NEXT_WORD	  Move to the next word.
       REQ_OVL_MODE	  Enter	overlay	mode.
       REQ_PREV_CHAR	  Move to the previous char.
       REQ_PREV_CHOICE	  Display previous field choice.
       REQ_PREV_FIELD	  Move to the previous field.
       REQ_PREV_LINE	  Move to the previous line.
       REQ_PREV_PAGE	  Move to the previous page.
       REQ_PREV_WORD	  Move to the previous word.
       REQ_RIGHT_CHAR	  Move right in	the field.
       REQ_RIGHT_FIELD	  Move right to	a field.
       REQ_SCR_BCHAR	  Scroll the field backward a character.
       REQ_SCR_BHPAGE	  Scroll the field backward half a page.
       REQ_SCR_BLINE	  Scroll the field backward a line.
       REQ_SCR_BPAGE	  Scroll the field backward a page.
       REQ_SCR_FCHAR	  Scroll the field forward a character.
       REQ_SCR_FHPAGE	  Scroll the field forward half	a page.
       REQ_SCR_FLINE	  Scroll the field forward a line.
       REQ_SCR_FPAGE	  Scroll the field forward a page.
       REQ_SCR_HBHALF	  Horizontal scroll the	field backward half 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_HFLINE	  Horizontal scroll the	field forward a	line.
       REQ_SFIRST_FIELD	  Move to the sorted first field.
       REQ_SLAST_FIELD	  Move to the sorted last field.
       REQ_SNEXT_FIELD	  Move to the sorted next field.
       REQ_SPREV_FIELD	  Move to the sorted previous field.
       REQ_UP_CHAR	  Move up in the field.
       REQ_UP_FIELD	  Move up to a field.
       REQ_VALIDATION	  Validate field.

       If the second argument is a printable 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.

   Field validation
       The form	library	makes updates  to  the	window	associated  with  form
       fields rather than directly to the field	buffers.

       The  form  driver  provides  low-level control over updates to the form
       fields.	The form driver	also provides for validating  modified	fields
       to  ensure  that	 the contents meet whatever constraints	an application
       may attach using	set_field_type.

       You can validate	a  field  without  making  any	changes	 to  it	 using
       REQ_VALIDATION.	The form driver	also validates a field in these	cases:

          a call to set_current_field attempts	to move	to a different field.

          a  call to set_current_page attempts	to move	to a different page of
	   the form.

          a request attempts to move to a different field.

          a request attempts to move to a different page of the form.

       In each case, the move fails if the field is invalid.

       If the modified field is	valid, the form	 driver	 copies	 the  modified
       data from the window associated with the	field to the field buffer.

   Mouse handling
       If  the	second	argument  is the KEY_MOUSE special key,	the associated
       mouse event is translated into one of the above	pre-defined  requests.
       Currently only clicks in	the user window	(e.g., inside the form display
       area or the decoration window) are handled.

       If you click above the display region of	the form:

	  a REQ_PREV_FIELD is generated	for a single click,

	  a REQ_PREV_PAGE is generated for a double-click and

	  a REQ_FIRST_FIELD is generated for a triple-click.

       If you click below the display region of	the form:

	  a REQ_NEXT_FIELD is generated	for a single click,

	  a REQ_NEXT_PAGE is generated for a double-click and

	  a REQ_LAST_FIELD is generated	for a triple-click.

       If you click at an field	inside the display area	of the form:

	     the form cursor is positioned to that field.

	     If  you  double-click  a field, the form cursor is positioned to
	      that field and E_UNKNOWN_COMMAND is returned.  This return value
	      makes sense, because a double click usually means	that an	field-
	      specific action should be	returned.  It is exactly  the  purpose
	      of this return value to signal that an application specific com-
	      mand should be executed.

	     If  a  translation  into a request was done, form_driver returns
	      the result of this request.

       If you clicked outside the user window or the mouse event could not  be
       translated into a form request an E_REQUEST_DENIED is returned.

   Application-defined commands
       If  the	second argument	is neither printable 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 returns one of the following	error codes:

       E_OK The	routine	succeeded.

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

       E_BAD_STATE
	    Routine was	called from an initialization or termination function.

       E_NOT_POSTED
	    The	form has not been posted.

       E_INVALID_FIELD
	    Contents of	field is invalid.

       E_NOT_CONNECTED
	    No fields are connected to the form.

       E_REQUEST_DENIED
	    The	form driver could not process the request.

       E_SYSTEM_ERROR
	    System error occurred (see errno(3)).

       E_UNKNOWN_COMMAND
	    The	form driver code saw an	unknown	request	code.

SEE ALSO
       curses(3X),   form(3X),	 form_fieldtype(3X),	form_field_buffer(3X),
       form_field_validation(3X), form_variables(3X), getch(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  sup-
       ported on Version 7 or BSD versions.

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

							       form_driver(3X)

NAME | SYNOPSIS | DESCRIPTION | RETURN VALUE | SEE ALSO | NOTES | PORTABILITY | AUTHORS

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=form_driver&sektion=3&manpath=FreeBSD+14.1-RELEASE+and+Ports>

home | help