These low-level routines must be called by programs that have to
deal directly with the terminfo
database to handle certain
terminal capabilities, such as programming function keys. For
all other functionality, curses
routines are more suitable and
their use is recommended.
None of these functions use (or are aware of) multibyte character
strings such as UTF-8:
• capability names use the POSIX portable character set
• capability string values have no associated encoding; they
are strings of 8-bit characters.
Initialization
Initially, setupterm
should be called. The high-level curses
functions initscr
and newterm
call setupterm
to initialize the
low-level set of terminal-dependent variables [listed in
terminfo(5)].
Applications can use the terminal capabilities either directly
(via header definitions), or by special functions. The header
files curses.h
and term.h
should be included (in this order) to
get the definitions for these strings, numbers, and flags.
The terminfo
variables lines
and columns
are initialized by
setupterm
as follows:
• If use_env(FALSE)
has been called, values for lines
and
columns
specified in terminfo
are used.
• Otherwise, if the environment variables LINES
and COLUMNS
exist, their values are used. If these environment variables
do not exist and the program is running in a window, the
current window size is used. Otherwise, if the environment
variables do not exist, the values for lines
and columns
specified in the terminfo
database are used.
Parameterized strings should be passed through tparm
to
instantiate them. All terminfo
strings (including the output of
tparm
) should be printed with tputs
or putp
. Call
reset_shell_mode
to restore the tty modes before exiting [see
curs_kernel
(3X)].
Programs which use cursor addressing should
• output enter_ca_mode
upon startup and
• output exit_ca_mode
before exiting.
Programs which execute shell subprocesses should
• call reset_shell_mode
and output exit_ca_mode
before the
shell is called and
• output enter_ca_mode
and call reset_prog_mode
after returning
from the shell.
The setupterm
routine reads in the terminfo
database,
initializing the terminfo
structures, but does not set up the
output virtualization structures used by curses
. These are its
parameters:
term is the terminal type, a character string. If term is
null, the environment variable TERM
is used.
filedes
is the file descriptor used for all output.
errret
points to an optional location where an error status can
be returned to the caller. If errret is not null, then
setupterm
returns OK
or ERR
and stores a status value in
the integer pointed to by errret. A return value of OK
combined with status of 1
in errret is normal.
If ERR
is returned, examine errret:
1
means that the terminal is hardcopy, cannot be used
for curses applications.
setupterm
determines if the entry is a hardcopy type
by checking the hc
(hardcopy
) capability.
0
means that the terminal could not be found, or that
it is a generic type, having too little information
for curses applications to run.
setupterm
determines if the entry is a generic type
by checking the gn
(generic
) capability.
-1
means that the terminfo
database could not be found.
If errret is null, setupterm
prints an error message upon
finding an error and exits. Thus, the simplest call is:
setupterm((char *)0, 1, (int *)0);
,
which uses all the defaults and sends the output to
stdout
.
The Terminal State
The setupterm
routine stores its information about the terminal
in a TERMINAL
structure pointed to by the global variable
cur_term
. If it detects an error, or decides that the terminal
is unsuitable (hardcopy or generic), it discards this
information, making it not available to applications.
If setupterm
is called repeatedly for the same terminal type, it
will reuse the information. It maintains only one copy of a
given terminal's capabilities in memory. If it is called for
different terminal types, setupterm
allocates new storage for
each set of terminal capabilities.
The set_curterm
routine sets cur_term
to nterm, and makes all of
the terminfo
boolean, numeric, and string variables use the
values from nterm. It returns the old value of cur_term
.
The del_curterm
routine frees the space pointed to by oterm and
makes it available for further use. If oterm is the same as
cur_term
, references to any of the terminfo
boolean, numeric, and
string variables thereafter may refer to invalid memory locations
until another setupterm
has been called.
The restartterm
routine is similar to setupterm
and initscr
,
except that it is called after restoring memory to a previous
state (for example, when reloading a game saved as a core image
dump). restartterm
assumes that the windows and the input and
output options are the same as when memory was saved, but the
terminal type and baud rate may be different. Accordingly,
restartterm
saves various tty state bits, calls setupterm
, and
then restores the bits.
Formatting Output
The tparm
routine instantiates the string str with parameters pi.
A pointer is returned to the result of str with the parameters
applied. Application developers should keep in mind these quirks
of the interface:
• Although tparm
's actual parameters may be integers or
strings, the prototype expects long
(integer) values.
• Aside from the set_attributes
(sgr
) capability, most terminal
capabilities require no more than one or two parameters.
• Padding information is ignored by tparm
; it is interpreted by
tputs
.
• The capability string is null-terminated. Use '\200' where
an ASCII NUL is needed in the output.
tiparm
is a newer form of tparm
which uses <stdarg.h> rather than
a fixed-parameter list. Its numeric parameters are integers
(int) rather than longs.
Output Functions
The tputs
routine applies padding information (i.e., by
interpreting marker embedded in the terminfo capability such as
'$<5>' as 5 milliseconds) to the string str and outputs it:
• The str parameter must be a terminfo string variable or the
return value from tparm
, tiparm
, tgetstr
, or tgoto
.
The tgetstr
and tgoto
functions are part of the termcap
interface, which happens to share this function name with the
terminfo interface.
• affcnt is the number of lines affected, or 1 if not
applicable.
• putc is a putchar
-like routine to which the characters are
passed, one at a time.
The putp
routine calls tputs(
str, 1, putchar)
. The output of
putp
always goes to stdout
, rather than the filedes specified in
setupterm
.
The vidputs
routine displays the string on the terminal in the
video attribute mode attrs, which is any combination of the
attributes listed in curses
(3X). The characters are passed to
the putchar
-like routine putc.
The vidattr
routine is like the vidputs
routine, except that it
outputs through putchar
.
The vid_attr
and vid_puts
routines correspond to vidattr and
vidputs, respectively. They use a set of arguments for
representing the video attributes plus color, i.e.,
• attrs of type attr_t
for the attributes and
• pair of type short
for the color-pair number.
The vid_attr
and vid_puts
routines are designed to use the
attribute constants with the WA_ prefix.
X/Open Curses reserves the opts argument for future use, saying
that applications must provide a null pointer for that argument.
As an extension, this implementation allows opts to be used as a
pointer to int
, which overrides the pair (short
) argument.
The mvcur
routine provides low-level cursor motion. It takes
effect immediately (rather than at the next refresh).
While putp
and mvcur
are low-level functions which do not use the
high-level curses state, they are declared in <curses.h>
because
SystemV did this (see HISTORY
).
Terminal Capability Functions
The tigetflag
, tigetnum
and tigetstr
routines return the value of
the capability corresponding to the terminfo
capname passed to
them, such as xenl
. The capname for each capability is given in
the table column entitled capname code in the capabilities
section of terminfo(5).
These routines return special values to denote errors.
The tigetflag
routine returns
-1
if capname is not a boolean capability, or
0
if it is canceled or absent from the terminal description.
The tigetnum
routine returns
-2
if capname is not a numeric capability, or
-1
if it is canceled or absent from the terminal description.
The tigetstr
routine returns
(char *)-1
if capname is not a string capability, or
0
if it is canceled or absent from the terminal description.
Terminal Capability Names
These null-terminated arrays contain
• the short terminfo names ('codes'),
• the termcap
names ('names'), and
• the long terminfo names ('fnames')
for each of the predefined terminfo
variables:
const char *boolnames[]
, *boolcodes[]
, *boolfnames[]
const char *numnames[]
, *numcodes[]
, *numfnames[]
const char *strnames[]
, *strcodes[]
, *strfnames[]