'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey                                *
.\" Copyright 1998-2014,2015 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_opts.3x,v 1.25 2020/02/02 23:34:34 tom Exp $
.TH form_field_opts 3X ""
.SH NAME
\fBset_field_opts\fP,
\fBfield_opts_on\fP,
\fBfield_opts_off\fP,
\fBfield_opts\fP \- set and get field options
.SH SYNOPSIS
\fB#include <form.h>\fR
.br
int set_field_opts(FIELD *field, Field_Options opts);
.br
int field_opts_on(FIELD *field, Field_Options opts);
.br
int field_opts_off(FIELD *field, Field_Options opts);
.br
Field_Options field_opts(const FIELD *field);
.br
.SH DESCRIPTION
The function \fBset_field_opts\fR sets all the given field's option bits (field
option bits may be logically-OR'ed together).
.PP
The function \fBfield_opts_on\fR turns on the given option bits, and leaves
others alone.
.PP
The function \fBfield_opts_off\fR turns off the given option bits, and leaves
others alone.
.PP
The function \fBfield_opts\fR returns the field's current option bits.
.PP
The following standard options are defined (all are on by default):
.TP 5
O_ACTIVE
The field is visited during processing.
If this option is off, the field will
not be reachable by navigation keys.
Please notice that an invisible field
appears to be inactive also.
.TP 5
O_AUTOSKIP
Skip to the next field when this one fills.
.TP 5
O_BLANK
The field is cleared whenever a character is entered at the first position.
.TP 5
O_EDIT
The field can be edited.
.TP 5
O_NULLOK
Allow a blank field.
.TP 5
O_PASSOK
Validate field only if modified by user.
.TP 5
O_PUBLIC
The field contents are displayed as data is entered.
.TP 5
O_STATIC
Field buffers are fixed to field's original size.
Turn this option off to create a dynamic field.
.TP 5
O_VISIBLE
The field is displayed.
If this option is off, display of the field is
suppressed.
.TP 5
O_WRAP
Words that do not fit on a line are wrapped to the next line.
Words are
blank-separated.
.PP
These extension options are defined (extensions are off by default):
.TP 5
O_DYNAMIC_JUSTIFY
Permit dynamic fields to be justified, like static fields.
.TP 5
O_NO_LEFT_STRIP
Preserve leading whitespace in the field buffer, which is normally discarded.
.TP 5
O_EDGE_INSERT_STAY
When inserting into a field up to the boundary position,
optionally delay the scrolling,
so that the last inserted character remains visible,
but advance the cursor to reflect the insertion.
This allows the form library to display the
inserted character in one-character fields
as well as allowing the library to maintain consistent state.
.TP 5
O_INPUT_FIELD
The \fBset_max_field\fP function checks for this extension,
which allows a dynamic field to shrink if the new
limit is smaller than the current field size.
.SH RETURN VALUE
Except for \fBfield_opts\fR, each routine returns one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_CURRENT
The field is the current field.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.SH SEE ALSO
\fBcurses\fR(3X),
\fBform\fR(3X).
\fBform_field_just\fR(3X).
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
