<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<!-- 
  * t
  ****************************************************************************
  * Copyright (c) 1998-2006,2008 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.                                                           *
  ****************************************************************************
  * @Id: form.3x,v 1.22 2008/10/11 20:48:11 tom Exp @
-->
<HTML>
<HEAD>
<TITLE>form 3x</TITLE>
<link rev=made href="mailto:bug-ncurses@gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</HEAD>
<BODY>
<H1>form 3x</H1>
<HR>
<PRE>
<!-- Manpage converted by man2html 3.0.1 -->
<STRONG><A HREF="form.3x.html">form(3x)</A></STRONG>                                                       <STRONG><A HREF="form.3x.html">form(3x)</A></STRONG>




</PRE>
<H2>NAME</H2><PRE>
       <STRONG>form</STRONG> - curses extension for programming forms


</PRE>
<H2>SYNOPSIS</H2><PRE>
       <STRONG>#include</STRONG> <STRONG>&lt;form.h&gt;</STRONG>


</PRE>
<H2>DESCRIPTION</H2><PRE>
       The  <STRONG>form</STRONG> library provides terminal-independent facilities
       for composing form screens  on  character-cell  terminals.
       The  library  includes:  field  routines, which create and
       modify form fields; and form routines, which group  fields
       into forms, display forms on the screen, and handle inter-
       action with the user.

       The <STRONG>form</STRONG> library uses the <STRONG>curses</STRONG> libraries.   To  use  the
       <STRONG>form</STRONG> library, link with the options <STRONG>-lform</STRONG> <STRONG>-lcurses</STRONG>.

       Your program should set up the locale, e.g.,

            <STRONG>setlocale(LC_ALL,</STRONG> <STRONG>"");</STRONG>

       so that input/output processing will work.

       A  curses  initialization  routine such as <STRONG>initscr</STRONG> must be
       called before using any of these functions.

   <STRONG>Current</STRONG> <STRONG>Default</STRONG> <STRONG>Values</STRONG> <STRONG>for</STRONG> <STRONG>Field</STRONG> <STRONG>Attributes</STRONG>
       The <STRONG>form</STRONG> library  maintains  a  default  value  for  field
       attributes.   You  can  get or set this default by calling
       the appropriate <STRONG>set_</STRONG> or  retrieval  routine  with  a  <STRONG>NULL</STRONG>
       field pointer.  Changing this default with a <STRONG>set_</STRONG> function
       affects future field creations, but does  not  change  the
       rendering of fields already created.

   <STRONG>Routine</STRONG> <STRONG>Name</STRONG> <STRONG>Index</STRONG>
       The  following  table lists each <STRONG>form</STRONG> routine and the name
       of the manual page on which it is described.

       <STRONG>curses</STRONG> Routine Name    Manual Page Name
       -------------------------------------------------
       current_field          <STRONG><A HREF="form_page.3x.html">form_page(3x)</A></STRONG>
       data_ahead             <STRONG><A HREF="form_data.3x.html">form_data(3x)</A></STRONG>
       data_behind            <STRONG><A HREF="form_data.3x.html">form_data(3x)</A></STRONG>
       dup_field              <STRONG><A HREF="form_field_new.3x.html">form_field_new(3x)</A></STRONG>
       dynamic_field_info     <STRONG><A HREF="form_field_info.3x.html">form_field_info(3x)</A></STRONG>
       field_arg              <STRONG><A HREF="form_field_validation.3x.html">form_field_validation(3x)</A></STRONG>
       field_back             <STRONG><A HREF="form_field_attributes.3x.html">form_field_attributes(3x)</A></STRONG>
       field_buffer           <STRONG><A HREF="form_field_buffer.3x.html">form_field_buffer(3x)</A></STRONG>
       field_count            <STRONG><A HREF="form_field.3x.html">form_field(3x)</A></STRONG>
       field_fore             <STRONG><A HREF="form_field_attributes.3x.html">form_field_attributes(3x)</A></STRONG>
       field_index            <STRONG><A HREF="form_page.3x.html">form_page(3x)</A></STRONG>
       field_info             <STRONG><A HREF="form_field_info.3x.html">form_field_info(3x)</A></STRONG>
       field_init             <STRONG><A HREF="form_hook.3x.html">form_hook(3x)</A></STRONG>
       field_just             <STRONG><A HREF="form_field_just.3x.html">form_field_just(3x)</A></STRONG>
       field_opts             <STRONG><A HREF="form_field_opts.3x.html">form_field_opts(3x)</A></STRONG>
       field_opts_off         <STRONG><A HREF="form_field_opts.3x.html">form_field_opts(3x)</A></STRONG>
       field_opts_on          <STRONG><A HREF="form_field_opts.3x.html">form_field_opts(3x)</A></STRONG>
       field_pad              <STRONG><A HREF="form_field_attributes.3x.html">form_field_attributes(3x)</A></STRONG>
       field_status           <STRONG><A HREF="form_field_buffer.3x.html">form_field_buffer(3x)</A></STRONG>
       field_term             <STRONG><A HREF="form_hook.3x.html">form_hook(3x)</A></STRONG>
       field_type             <STRONG><A HREF="form_field_validation.3x.html">form_field_validation(3x)</A></STRONG>

       field_userptr          <STRONG><A HREF="form_field_userptr.3x.html">form_field_userptr(3x)</A></STRONG>
       form_driver            <STRONG><A HREF="form_driver.3x.html">form_driver(3x)</A></STRONG>
       form_fields            <STRONG><A HREF="form_field.3x.html">form_field(3x)</A></STRONG>
       form_init              <STRONG><A HREF="form_hook.3x.html">form_hook(3x)</A></STRONG>
       form_opts              <STRONG><A HREF="form_opts.3x.html">form_opts(3x)</A></STRONG>
       form_opts_off          <STRONG><A HREF="form_opts.3x.html">form_opts(3x)</A></STRONG>
       form_opts_on           <STRONG><A HREF="form_opts.3x.html">form_opts(3x)</A></STRONG>
       form_page              <STRONG><A HREF="form_page.3x.html">form_page(3x)</A></STRONG>
       form_request_by_name   <STRONG><A HREF="form_requestname.3x.html">form_requestname(3x)</A></STRONG>
       form_request_name      <STRONG><A HREF="form_requestname.3x.html">form_requestname(3x)</A></STRONG>
       form_sub               <STRONG><A HREF="form_win.3x.html">form_win(3x)</A></STRONG>
       form_term              <STRONG><A HREF="form_hook.3x.html">form_hook(3x)</A></STRONG>
       form_userptr           <STRONG><A HREF="form_userptr.3x.html">form_userptr(3x)</A></STRONG>
       form_win               <STRONG><A HREF="form_win.3x.html">form_win(3x)</A></STRONG>
       free_field             <STRONG><A HREF="form_field_new.3x.html">form_field_new(3x)</A></STRONG>
       free_fieldtype         <STRONG><A HREF="form_fieldtype.3x.html">form_fieldtype(3x)</A></STRONG>
       free_form              <STRONG><A HREF="form_new.3x.html">form_new(3x)</A></STRONG>
       link_field             <STRONG><A HREF="form_field_new.3x.html">form_field_new(3x)</A></STRONG>
       link_fieldtype         <STRONG><A HREF="form_fieldtype.3x.html">form_fieldtype(3x)</A></STRONG>
       move_field             <STRONG><A HREF="form_field.3x.html">form_field(3x)</A></STRONG>
       new_field              <STRONG><A HREF="form_field_new.3x.html">form_field_new(3x)</A></STRONG>
       new_fieldtype          <STRONG><A HREF="form_fieldtype.3x.html">form_fieldtype(3x)</A></STRONG>
       new_form               <STRONG><A HREF="form_new.3x.html">form_new(3x)</A></STRONG>
       new_page               <STRONG><A HREF="form_new_page.3x.html">form_new_page(3x)</A></STRONG>
       pos_form_cursor        <STRONG><A HREF="form_cursor.3x.html">form_cursor(3x)</A></STRONG>
       post_form              <STRONG><A HREF="form_post.3x.html">form_post(3x)</A></STRONG>
       scale_form             <STRONG><A HREF="form_win.3x.html">form_win(3x)</A></STRONG>
       set_current_field      <STRONG><A HREF="form_page.3x.html">form_page(3x)</A></STRONG>
       set_field_back         <STRONG><A HREF="form_field_attributes.3x.html">form_field_attributes(3x)</A></STRONG>
       set_field_buffer       <STRONG><A HREF="form_field_buffer.3x.html">form_field_buffer(3x)</A></STRONG>
       set_field_fore         <STRONG><A HREF="form_field_attributes.3x.html">form_field_attributes(3x)</A></STRONG>
       set_field_init         <STRONG><A HREF="form_hook.3x.html">form_hook(3x)</A></STRONG>
       set_field_just         <STRONG><A HREF="form_field_just.3x.html">form_field_just(3x)</A></STRONG>
       set_field_opts         <STRONG><A HREF="form_field_opts.3x.html">form_field_opts(3x)</A></STRONG>
       set_field_pad          <STRONG><A HREF="form_field_attributes.3x.html">form_field_attributes(3x)</A></STRONG>
       set_field_status       <STRONG><A HREF="form_field_buffer.3x.html">form_field_buffer(3x)</A></STRONG>
       set_field_term         <STRONG><A HREF="form_hook.3x.html">form_hook(3x)</A></STRONG>
       set_field_type         <STRONG><A HREF="form_field_validation.3x.html">form_field_validation(3x)</A></STRONG>
       set_field_userptr      <STRONG><A HREF="form_field_userptr.3x.html">form_field_userptr(3x)</A></STRONG>
       set_fieldtype_arg      <STRONG><A HREF="form_fieldtype.3x.html">form_fieldtype(3x)</A></STRONG>
       set_fieldtype_choice   <STRONG><A HREF="form_fieldtype.3x.html">form_fieldtype(3x)</A></STRONG>
       set_form_fields        <STRONG><A HREF="form_field.3x.html">form_field(3x)</A></STRONG>
       set_form_init          <STRONG><A HREF="form_hook.3x.html">form_hook(3x)</A></STRONG>
       set_form_opts          <STRONG><A HREF="form_field_opts.3x.html">form_field_opts(3x)</A></STRONG>
       set_form_page          <STRONG><A HREF="form_page.3x.html">form_page(3x)</A></STRONG>
       set_form_sub           <STRONG><A HREF="form_win.3x.html">form_win(3x)</A></STRONG>
       set_form_term          <STRONG><A HREF="form_hook.3x.html">form_hook(3x)</A></STRONG>
       set_form_userptr       <STRONG><A HREF="form_userptr.3x.html">form_userptr(3x)</A></STRONG>
       set_form_win           <STRONG><A HREF="form_win.3x.html">form_win(3x)</A></STRONG>
       set_max_field          <STRONG><A HREF="form_field_buffer.3x.html">form_field_buffer(3x)</A></STRONG>
       set_new_page           <STRONG><A HREF="form_new_page.3x.html">form_new_page(3x)</A></STRONG>
       unpost_form            <STRONG><A HREF="form_post.3x.html">form_post(3x)</A></STRONG>


</PRE>
<H2>RETURN VALUE</H2><PRE>
       Routines that return pointers return <STRONG>NULL</STRONG>  on  error,  and
       set  errno  to  the  corresponding  error-code returned by
       functions returning an integer.  Routines that  return  an
       integer return one of the following error codes:

       <STRONG>E_OK</STRONG> The routine succeeded.

       <STRONG>E_BAD_ARGUMENT</STRONG>
            Routine  detected  an incorrect or out-of-range argu-
            ment.

       <STRONG>E_BAD_STATE</STRONG>
            Routine was called from an initialization or termina-
            tion function.

       <STRONG>E_CONNECTED</STRONG>
            The field is already connected to a form.

       <STRONG>E_INVALID_FIELD</STRONG>
            Contents of a field are not valid.

       <STRONG>E_NOT_CONNECTED</STRONG>
            No fields are connected to the form.

       <STRONG>E_NOT_POSTED</STRONG>
            The form has not been posted.

       <STRONG>E_NO_ROOM</STRONG>
            Form is too large for its window.

       <STRONG>E_POSTED</STRONG>
            The form is already posted.

       <STRONG>E_REQUEST_DENIED</STRONG>
            The form driver could not process the request.

       <STRONG>E_SYSTEM_ERROR</STRONG>
            System error occurred (see <STRONG>errno</STRONG>).

       <STRONG>E_UNKNOWN_COMMAND</STRONG>
            The form driver code saw an unknown request code.


</PRE>
<H2>SEE ALSO</H2><PRE>
       <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG> and related pages whose names begin "form_" for
       detailed descriptions of the entry points.


</PRE>
<H2>NOTES</H2><PRE>
       The header file <STRONG>&lt;form.h&gt;</STRONG> automatically includes the header
       files <STRONG>&lt;curses.h&gt;</STRONG> and <STRONG>&lt;eti.h&gt;</STRONG>.

       In  your  library  list,  libform.a should be before libn-
       curses.a; that is, you want to say `-lform -lncurses', not
       the  other  way  around (which would give you a link error
       using most linkers).


</PRE>
<H2>PORTABILITY</H2><PRE>
       These routines emulate the System V forms  library.   They
       were not supported on Version 7 or BSD versions.


</PRE>
<H2>AUTHORS</H2><PRE>
       Juergen  Pfeifer.  Manual pages and adaptation for ncurses
       by Eric S. Raymond.


</PRE>
<H2>SEE ALSO</H2><PRE>
       This describes <STRONG>ncurses</STRONG> version 5.6 (patch 20081011).



                                                               <STRONG><A HREF="form.3x.html">form(3x)</A></STRONG>
</PRE>
<HR>
<ADDRESS>
Man(1) output converted with
<a href="http://www.oac.uci.edu/indiv/ehood/man2html.html">man2html</a>
</ADDRESS>
</BODY>
</HTML>
