---
name: "form_new"
section: "3form"
platform: "linux"
package: "ncurses-doc"
version: "5.9+20140913-1+deb8u3"
release: "Debian 8 (Jessie)"
platforms: ["linux"]
url: "https://new.carta.tech/new/3form"
---

# form\_new(3form)

create and destroy forms

Part of [new(3form)](/new/3form.md).

## NAME

**form\_new** - create and destroy forms

## SYNOPSIS

**#include \<form.h\>**\
 FORM \*new\_form(FIELD \*\*fields);\
 int free\_form(FORM \*form);\

## DESCRIPTION

The function **new\_form** creates a new form connected to a specified field pointer array (which must be **NULL**-terminated).

The function **free\_form** disconnects *form* from its field array and frees the storage allocated for the form.

## RETURN VALUE

The function **new\_form** returns **NULL** on error. It sets errno according to the function's success:

- **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\_SYSTEM\_ERROR**

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

The function **free\_form** returns one of the following:

- **E\_OK**

  The routine succeeded.

- **E\_BAD\_ARGUMENT**

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

- **E\_POSTED**

  The form has already been posted.

## SEE ALSO

**ncurses**(3NCURSES), **form**(3FORM).

## NOTES

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

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