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

FreeBSD Manual Pages

  
 
  

home | help
form_driver(3X)			 Library calls		       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 wc);

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 beginning of field.
       REQ_BEG_LINE	  Move to 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 cursor.
       REQ_DOWN_CHAR	  Move down in field.
       REQ_DOWN_FIELD	  Move down to a field.
       REQ_END_FIELD	  Move to the end of 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 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	field.
       REQ_RIGHT_FIELD	  Move right to	a field.
       REQ_SCR_BCHAR	  Scroll field backward	1 character.
       REQ_SCR_BHPAGE	  Scroll field backward	1/2 page.
       REQ_SCR_BLINE	  Scroll field backward	1 line.
       REQ_SCR_BPAGE	  Scroll field backward	1 page.
       REQ_SCR_FCHAR	  Scroll field forward 1 character.
       REQ_SCR_FHPAGE	  Scroll field forward 1/2 page.
       REQ_SCR_FLINE	  Scroll field forward 1 line.
       REQ_SCR_FPAGE	  Scroll field forward 1 page.
       REQ_SCR_HBHALF	  Horizontal scroll field backward 1/2 line.
       REQ_SCR_HBLINE	  Horizontal scroll field backward 1 line.
       REQ_SCR_HFHALF	  Horizontal scroll field forward 1/2 line.
       REQ_SCR_HFLINE	  Horizontal scroll field forward 1 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 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.

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.

SEE ALSO
       curses(3X),   form(3X),	 form_fieldtype(3X),	form_field_buffer(3X),
       form_field_validation(3X), form_variables(3X), getch(3X)

ncurses	6.5			  2025-10-04		       form_driver(3X)

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

home | help