<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<!-- 
  ****************************************************************************
  * Copyright (c) 1998-2003,2006 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_field_validation.3x,v 1.16 2006/12/24 16:08:08 tom Exp @
-->
<HTML>
<HEAD>
<TITLE>form_field_validation 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_field_validation 3x</H1>
<HR>
<PRE>
<!-- Manpage converted by man2html 3.0.1 -->
<STRONG><A HREF="form_field_validation.3x.html">form_field_validation(3x)</A></STRONG>                     <STRONG><A HREF="form_field_validation.3x.html">form_field_validation(3x)</A></STRONG>




</PRE>
<H2>NAME</H2><PRE>
       <STRONG>form_field_validation</STRONG> - data type validation for fields


</PRE>
<H2>SYNOPSIS</H2><PRE>
       <STRONG>#include</STRONG> <STRONG>&lt;form.h&gt;</STRONG>
       int set_field_type(FIELD *field, FIELDTYPE *type, ...);
       FIELDTYPE *field_type(const FIELD *field);
       void *field_arg(const FIELD *field);

       FIELDTYPE *TYPE_ALNUM;
       FIELDTYPE *TYPE_ALPHA;
       FIELDTYPE *TYPE_ENUM;
       FIELDTYPE *TYPE_INTEGER;
       FIELDTYPE *TYPE_NUMERIC;
       FIELDTYPE *TYPE_REGEXP;
       FIELDTYPE *TYPE_IPV4;


</PRE>
<H2>DESCRIPTION</H2><PRE>
       The  function  <STRONG>set_field_type</STRONG>  declares  a data type for a
       given form field.  This is the type checked by  validation
       functions.  The predefined types are as follows:

       TYPE_ALNUM
            Alphanumeric  data.  Requires a third <STRONG>int</STRONG> argument, a
            minimum field width.

       TYPE_ALPHA
            Character data.  Requires a  third  <STRONG>int</STRONG>  argument,  a
            minimum field width.

       TYPE_ENUM
            Accept one of a specified set of strings.  Requires a
            third <STRONG>(char</STRONG> <STRONG>**)</STRONG> argument pointing to a string list; a
            fourth  <STRONG>int</STRONG> flag argument to enable case-sensitivity;
            and a fifth <STRONG>int</STRONG> flag argument  specifying  whether  a
            partial  match  must be a unique one (if this flag is
            off, a prefix matches the first of any  set  of  more
            than  one  list  elements  with  that prefix). Please
            notice that the string list is  not  copied,  only  a
            reference to it is stored in the field. So you should
            avoid using a list that lives in automatic  variables
            on the stack.

       TYPE_INTEGER
            Integer  data,  parsable  to  an  integer by <STRONG>atoi(3)</STRONG>.
            Requires a third <STRONG>int</STRONG> argument controlling the  preci-
            sion,  a  fourth  <STRONG>long</STRONG>  argument constraining minimum
            value, and a fifth <STRONG>long</STRONG> constraining  maximum  value.
            If  the  maximum  value  is less than or equal to the
            minimum value, the range is simply ignored. On return
            the field buffer is formatted according to the <STRONG>printf</STRONG>
            format  specification  ".*ld",  where  the   '*'   is
            replaced  by  the precision argument.  For details of
            the precision handling see <STRONG>printf's</STRONG> man-page.

       TYPE_NUMERIC
            Numeric  data  (may  have  a   decimal-point   part).
            Requires  a third <STRONG>int</STRONG> argument controlling the preci-
            sion, a fourth <STRONG>double</STRONG> argument  constraining  minimum
            value, and a fifth <STRONG>double</STRONG> constraining maximum value.
            If your system supports locales,  the  decimal  point
            character  to  be  used  must be the one specified by
            your locale.  If the maximum value is  less  than  or
            equal  to  the  minimum  value,  the  range is simply
            ignored. On return  the  field  buffer  is  formatted
            according  to  the <STRONG>printf</STRONG> format specification ".*f",
            where the '*' is replaced by the precision  argument.
            For  details  of  the precision handling see <STRONG>printf's</STRONG>
            man-page.

       TYPE_REGEXP
            Regular expression data.  Requires a regular  expres-
            sion  <STRONG>(char</STRONG>  <STRONG>*)</STRONG>  third argument; the data is valid if
            the regular expression matches it.   Regular  expres-
            sions  are  in  the  format  of  <STRONG>regcomp</STRONG> and <STRONG>regexec</STRONG>.
            Please notice that the regular expression must  match
            the  whole  field.  If  you have for example an eight
            character wide field, a regular expression "^[0-9]*$"
            always  means  that  you have to fill all eight posi-
            tions with digits. If you want to allow fewer digits,
            you  may  use  for example "^[0-9]* *$" which is good
            for trailing spaces (up to an  empty  field),  or  "^
            *[0-9]*  *$"  which  is good for leading and trailing
            spaces around the digits.

       TYPE_IPV4
            An Internet Protocol Version 4 address. This requires
            no  additional argument. It is checked whether or not
            the buffer has the form a.b.c.d, where  a,b,c  and  d
            are numbers between 0 and 255. Trailing blanks in the
            buffer are ignored. The address itself is  not  vali-
            dated. Please note that this is an ncurses extension.
            This field type may not be available in other  curses
            implementations.

       It  is  possible  to  set  up new programmer-defined field
       types.  See the <STRONG><A HREF="form_fieldtype.3x.html">form_fieldtype(3x)</A></STRONG> manual page.


</PRE>
<H2>RETURN VALUE</H2><PRE>
       The functions <STRONG>field_type</STRONG>  and  <STRONG>field_arg</STRONG>  return  <STRONG>NULL</STRONG>  on
       error. The function <STRONG>set_field_type</STRONG> returns one of the fol-
       lowing:

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

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


</PRE>
<H2>SEE ALSO</H2><PRE>
       <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>, <STRONG><A HREF="form.3x.html">form(3x)</A></STRONG>.


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


</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  new
       curses by Eric S. Raymond.



                                              <STRONG><A HREF="form_field_validation.3x.html">form_field_validation(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>
