---
name: "form_fieldtype"
section: "3x"
platform: "macos"
package: "ncurses"
version: "79"
release: "macOS 26.5"
platforms: ["linux", "macos"]
url: "https://new.carta.tech/form_fieldtype/3x"
---

# form\_fieldtype(3x)

define validation-field types

## NAME

**form\_fieldtype** - define validation-field types

## SYNOPSIS

**#include \<form.h\>**\
 FIELDTYPE \*new\_fieldtype(\
     bool (\* const field\_check)(FIELD \*, const void \*),\
     bool (\* const char\_check)(int, const void \*));\
 int free\_fieldtype(FIELDTYPE \*fieldtype);\
 int set\_fieldtype\_arg(\
     FIELDTYPE \*fieldtype,\
     void \*(\* const make\_arg)(va\_list \*),\
     void \*(\* const copy\_arg)(const void \*),\
     void  (\* const free\_arg)(void \*));\
 int set\_fieldtype\_choice(\
     FIELDTYPE \*fieldtype,\
     bool (\* const next\_choice)(FIELD \*, const void \*),\
     bool (\* const prev\_choice)(FIELD \*, const void \*));\
 FIELDTYPE \*link\_fieldtype(FIELDTYPE \*type1,\
                           FIELDTYPE \*type2);\

## DESCRIPTION

The function **new\_fieldtype** creates a new field type usable for data validation.  You supply it with *field\_check*, a predicate to check the validity of an entered data string whenever the user attempts to leave a field. The (FIELD \*) argument is passed in so the validation predicate can see the field's buffer, sizes and other attributes; the second argument is an argument-block structure, about which more below.

You also supply **new\_fieldtype** with *char\_check*, a function to validate input characters as they are entered; it will be passed the character to be checked and a pointer to an argument-block structure.

The function **free\_fieldtype** frees the space allocated for a given validation type.

The function **set\_fieldtype\_arg** associates three storage-management functions with a field type. The *make\_arg* function is automatically applied to the list of arguments you give **set\_field\_type** when attaching validation to a field; its job is to bundle these into an allocated argument-block object which can later be passed to validation predicated. The other two hook arguments should copy and free argument-block structures. They will be used by the forms-driver code. You must supply the *make\_arg* function, the other two are optional, you may supply NULL for them. In this case it is assumed that *make\_arg* does not allocate memory but simply loads the argument into a single scalar value.

The function **link\_fieldtype** creates a new field type from the two given types. They are connected by an logical 'OR'.

The form driver requests **REQ\_NEXT\_CHOICE** and **REQ\_PREV\_CHOICE** assume that the possible values of a field form an ordered set, and provide the forms user with a way to move through the set. The **set\_fieldtype\_choice** function allows forms programmers to define successor and predecessor functions for the field type. These functions take the field pointer and an argument-block structure as arguments.

## RETURN VALUE

The pointer-valued routines return NULL on error. They set errno according to their success:

- **E\_OK**

  The routine succeeded.

- **E\_BAD\_ARGUMENT**

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

- **E\_SYSTEM\_ERROR**

  System error occurred, e.g., malloc failure.

The integer-valued routines return one of the following codes on error:

- **E\_OK**

  The routine succeeded.

- **E\_BAD\_ARGUMENT**

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

- **E\_CONNECTED**

  The field is already connected to a form.

- **E\_CURRENT**

  The field is the current field.

- **E\_SYSTEM\_ERROR**

  System error occurred (see **errno**).

## SEE ALSO

**curses**(3X), **form**(3X).

## NOTES

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

All of the **(char \*)** arguments of these functions should actually be **(void \*)**.  The type has been left uncorrected for strict compatibility with System V.

## 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.
