'\" t
.\" DO NOT EDIT THIS FILE BY HAND!
.\" It is generated from terminfo.head,  ./../include/Caps ./../include/Caps-ncurses, and terminfo.tail.
.\"
.\" Note: this must be run through tbl before nroff.
.\" The magic cookie on the first line triggers this under some man programs.
.\"***************************************************************************
.\" Copyright 2018-2023,2024 Thomas E. Dickey                                *
.\" Copyright 1998-2016,2017 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: terminfo.head,v 1.65 2024/04/20 21:14:00 tom Exp $
.TH terminfo 5 2024-04-20 "ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@" "File formats"
.ie \n(.g \{\
.ds `` \(lq
.ds '' \(rq
.ds '  \(aq
.ds ^  \(ha
.ds ~  \(ti
.\}
.el \{\
.ie t .ds `` ``
.el   .ds `` ""
.ie t .ds '' ''
.el   .ds '' ""
.ds       '  '
.ds       ^  ^
.ds       ~  ~
.\}
.
.de bP
.ie n  .IP \(bu 4
.el    .IP \(bu 2
..
.
.ds d @TERMINFO@
.SH NAME
\fB\%terminfo\fP \-
terminal capability database
.SH SYNOPSIS
\*d/*/*
.SH DESCRIPTION
.I Terminfo
is a database describing terminals,
used by screen-oriented programs such as
\fBnvi\fP(1),
\fBlynx\fP(1),
\fBmutt\fP(1),
and other curses applications,
using high-level calls to libraries such as \fBcurses\fP(3X).
It is also used via low-level calls by non-curses applications
which may be screen-oriented (such as \fB@CLEAR@\fP(1))
or non-screen (such as \fB@TABS@\fP(1)).
.PP
.I Terminfo
describes terminals by giving a set of capabilities which they
have, by specifying how to perform screen operations, and by
specifying padding requirements and initialization sequences.
.PP
This document describes
.I \%ncurses
version @NCURSES_MAJOR@.@NCURSES_MINOR@
(patch @NCURSES_PATCH@).
.SS "\fIterminfo\fP Entry Syntax"
Entries in
.I terminfo
consist of a sequence of fields:
.bP
Each field ends with a comma \*(``,\*(''
(embedded commas may be
escaped with a backslash or written as \*(``\e054\*('').
.bP
White space between fields is ignored.
.bP
The first field in a \fIterminfo\fP entry begins in the first column.
.bP
Newlines and leading whitespace (spaces or tabs)
may be used for formatting entries for readability.
These are removed from parsed entries.
.IP
The \fB@INFOCMP@\fP \fB\-f\fP and \fB\-W\fP options rely on this to
format if-then-else expressions,
or to enforce maximum line-width.
The resulting formatted terminal description can be read by \fB@TIC@\fP.
.bP
The first field for each terminal gives the names which are known for the
terminal, separated by \*(``|\*('' characters.
.IP
The first name given is the most common abbreviation for the terminal
(its primary name),
the last name given should be a long name fully identifying the terminal
(see \fBlongname\fP(3X)),
and all others are treated as synonyms (aliases) for the primary terminal name.
.IP
X/Open Curses advises that all names but the last should be in lower case
and contain no blanks;
the last name may well contain upper case and blanks for readability.
.IP
This implementation is not so strict;
it allows mixed case in the primary name and aliases.
If the last name has no embedded blanks,
it allows that to be both an alias and a verbose name
(but will warn about this ambiguity).
.bP
Lines beginning with a \*(``#\*('' in the first column are treated as comments.
.IP
While comment lines are valid at any point, the output of \fB@CAPTOINFO@\fP
and \fB@INFOTOCAP@\fP (aliases for \fB@TIC@\fP)
will move comments so they occur only between entries.
.PP
Terminal names (except for the last, verbose entry) should
be chosen using the following conventions.
The particular piece of hardware making up the terminal should
have a root name, thus \*(``hp2621\*(''.
This name should not contain hyphens.
Modes that the hardware can be in, or user preferences, should
be indicated by appending a hyphen and a mode suffix.
Thus, a vt100 in 132-column mode would be vt100\-w.
The following suffixes should be used where possible:
.PP
.TS
center;
Lb Lb Lb
L  L  Lx.
Suffix	Example	Meaning
_
\-\fInn\fP	aaa\-60	Number of lines on the screen
\-\fIn\fPp	c100\-4p	Number of pages of memory
\-am	vt100\-am	With automargins (usually the default)
\-m	ansi\-m	Mono mode; suppress color
\-mc	wy30\-mc	Magic cookie; spaces when highlighting
\-na	c100\-na	No arrow keys (leave them in local)
\-nam	vt100\-nam	Without automatic margins
\-nl	hp2621\-nl	No status line
\-ns	hp2626\-ns	No status line
\-rv	c100\-rv	Reverse video
\-s	vt100\-s	Enable status line
\-vb	wy370\-vb	Use visible bell instead of beep
\-w	vt100\-w	Wide mode (> 80 columns, usually 132)
.TE
.PP
For more on terminal naming conventions, see the \fBterm\fP(7) manual page.
.SS "\fIterminfo\fP Capabilities Syntax"
The terminfo entry consists of several \fIcapabilities\fP,
i.e., features that the terminal has,
or methods for exercising the terminal's features.
.PP
After the first field (giving the name(s) of the terminal entry),
there should be one or more \fIcapability\fP fields.
These are Boolean, numeric or string names with corresponding values:
.bP
Boolean capabilities are true when present, false when absent.
There is no explicit value for Boolean capabilities.
.bP
Numeric capabilities have a \*(``#\*('' following the name,
then an unsigned decimal integer value.
.bP
String capabilities have a \*(``=\*('' following the name,
then an string of characters making up the capability value.
.IP
String capabilities can be split into multiple lines,
just as the fields comprising a terminal entry can be
split into multiple lines.
While blanks between fields are ignored,
blanks embedded within a string value are retained,
except for leading blanks on a line.
.PP
Any capability can be \fIcanceled\fP,
i.e., suppressed from the terminal entry,
by following its name with \*(``@\*(''
rather than a capability value.
.SS "Similar Terminals"
If there are two very similar terminals, one (the variant) can be defined as
being just like the other (the base) with certain exceptions.
In the
definition of the variant, the string capability \fBuse\fP can be given with
the name of the base terminal:
.bP
The capabilities given before
.B use
override those in the base type named by
.BR use .
.bP
If there are multiple \fBuse\fP capabilities, they are merged in reverse order.
That is, the rightmost \fBuse\fP reference is processed first, then the one to
its left, and so forth.
.bP
Capabilities given explicitly in the entry override
those brought in by \fBuse\fP references.
.PP
A capability can be canceled by placing \fBxx@\fP to the left of the
use reference that imports it, where \fIxx\fP is the capability.
For example, the entry
.RS
.PP
2621\-nl, smkx@, rmkx@, use=2621,
.RE
.PP
defines a 2621\-nl that does not have the \fBsmkx\fP or \fBrmkx\fP capabilities,
and hence does not turn on the function key labels when in visual mode.
This is useful for different modes for a terminal, or for different
user preferences.
.PP
An entry included via \fBuse\fP can contain canceled capabilities,
which have the same effect as if those cancels were inline in the
using terminal entry.
.SS "Predefined Capabilities"
.\" Head of terminfo man page ends here
.ps -1
Tables of capabilities
.I \%ncurses
recognizes in a
.I \%term\%info
terminal type description and available to
.IR \%term\%info -using
code follow.
.bP
The capability name identifies the symbol by which the programmer
using the
.I \%term\%info
API accesses the capability.
.bP
The TI
.RI ( \%term\%info )
code is the short name used by a person composing or updating a
terminal type entry.
.IP
Whenever possible,
these codes are the same as or similar to those of the ANSI X3.64-1979
standard
(now superseded by ECMA-48,
which uses identical or very similar names).
Semantics are also intended to match those of the specification.
.IP
.I \%term\%info
codes have no hard length limit,
but
.I \%ncurses
maintains an informal one of 5 characters to keep them short and to
allow the tabs in the source file
.I Caps
to line up nicely.
(Some standard codes exceed this limit regardless.)
.bP
The TC
.RI ( termcap )
code is that used by the corresponding API of
.IR \%ncurses .
(Some capabilities are new,
and have names that BSD
.I termcap
did not originate.)
.bP
The description field attempts to convey the capability's semantics.
.PP
The description field employs a handful of notations.
.TP
.B (P)
indicates that padding may be specified.
.TP
.B (P*)
indicates that padding may vary in proportion to the number of output
lines affected.
.TP
.BI # i
indicates the
.IR i th
parameter of a string capability;
the programmer should pass the string to \fB\%tparm\fP(3X) with the
parameters listed.
.IP
If the description lists no parameters,
passing the string to \fB\%tparm\fP(3X) may produce unexpected
behavior,
for instance if the string contains percent signs.
.
.PP
.TS
center;
Lb        Cb       S   Lb
Lb        Lb       Lb  Lb
Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
\&	Code	\&
Boolean Capability Name	TI	TC	Description
_
auto_left_margin	bw	bw	T{
.ad l
cub1 wraps from column 0 to last column
T}
auto_right_margin	am	am	T{
.ad l
terminal has automatic margins
T}
no_esc_ctlc	xsb	xb	T{
.ad l
beehive (f1=escape, f2=ctrl C)
T}
ceol_standout_glitch	xhp	xs	T{
.ad l
standout not erased by overwriting (hp)
T}
eat_newline_glitch	xenl	xn	T{
.ad l
newline ignored after 80 cols (concept)
T}
erase_overstrike	eo	eo	T{
.ad l
can erase overstrikes with a blank
T}
generic_type	gn	gn	T{
.ad l
generic line type
T}
hard_copy	hc	hc	T{
.ad l
hardcopy terminal
T}
has_meta_key	km	km	T{
.ad l
Has a meta key (i.e., sets 8th-bit)
T}
has_status_line	hs	hs	T{
.ad l
has extra status line
T}
insert_null_glitch	in	in	T{
.ad l
insert mode distinguishes nulls
T}
memory_above	da	da	T{
.ad l
display may be retained above the screen
T}
memory_below	db	db	T{
.ad l
display may be retained below the screen
T}
move_insert_mode	mir	mi	T{
.ad l
safe to move while in insert mode
T}
move_standout_mode	msgr	ms	T{
.ad l
safe to move while in standout mode
T}
over_strike	os	os	T{
.ad l
terminal can overstrike
T}
status_line_esc_ok	eslok	es	T{
.ad l
escape can be used on the status line
T}
dest_tabs_magic_smso	xt	xt	T{
.ad l
tabs destructive, magic so char (t1061)
T}
tilde_glitch	hz	hz	T{
.ad l
cannot print ~'s (Hazeltine)
T}
transparent_underline	ul	ul	T{
.ad l
underline character overstrikes
T}
xon_xoff	xon	xo	T{
.ad l
terminal uses xon/xoff handshaking
T}
needs_xon_xoff	nxon	nx	T{
.ad l
padding will not work, xon/xoff required
T}
prtr_silent	mc5i	5i	T{
.ad l
printer will not echo on screen
T}
hard_cursor	chts	HC	T{
.ad l
cursor is hard to see
T}
non_rev_rmcup	nrrmc	NR	T{
.ad l
smcup does not reverse rmcup
T}
no_pad_char	npc	NP	T{
.ad l
pad character does not exist
T}
non_dest_scroll_region	ndscr	ND	T{
.ad l
scrolling region is non-destructive
T}
can_change	ccc	cc	T{
.ad l
terminal can re-define existing colors
T}
back_color_erase	bce	ut	T{
.ad l
screen erased with background color
T}
hue_lightness_saturation	hls	hl	T{
.ad l
terminal uses only HLS color notation (Tektronix)
T}
col_addr_glitch	xhpa	YA	T{
.ad l
only positive motion for hpa/mhpa caps
T}
cr_cancels_micro_mode	crxm	YB	T{
.ad l
using cr turns off micro mode
T}
has_print_wheel	daisy	YC	T{
.ad l
printer needs operator to change character set
T}
row_addr_glitch	xvpa	YD	T{
.ad l
only positive motion for vpa/mvpa caps
T}
semi_auto_right_margin	sam	YE	T{
.ad l
printing in last column causes cr
T}
cpi_changes_res	cpix	YF	T{
.ad l
changing character pitch changes resolution
T}
lpi_changes_res	lpix	YG	T{
.ad l
changing line pitch changes resolution
T}
.TE
.PP
.
.TS
center;
Lb        Cb       S   Lb
Lb        Lb       Lb  Lb
Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
\&	Code	\&
Numeric Capability Name	TI	TC	Description
_
columns	cols	co	T{
.ad l
number of columns in a line
T}
init_tabs	it	it	T{
.ad l
tabs initially every # spaces
T}
lines	lines	li	T{
.ad l
number of lines on screen or page
T}
lines_of_memory	lm	lm	T{
.ad l
lines of memory if > line. 0 means varies
T}
magic_cookie_glitch	xmc	sg	T{
.ad l
number of blank characters left by smso or rmso
T}
padding_baud_rate	pb	pb	T{
.ad l
lowest baud rate where padding needed
T}
virtual_terminal	vt	vt	T{
.ad l
virtual terminal number (CB/unix)
T}
width_status_line	wsl	ws	T{
.ad l
number of columns in status line
T}
num_labels	nlab	Nl	T{
.ad l
number of labels on screen
T}
label_height	lh	lh	T{
.ad l
rows in each label
T}
label_width	lw	lw	T{
.ad l
columns in each label
T}
max_attributes	ma	ma	T{
.ad l
maximum combined attributes terminal can handle
T}
maximum_windows	wnum	MW	T{
.ad l
maximum number of definable windows
T}
max_colors	colors	Co	T{
.ad l
maximum number of colors on screen
T}
max_pairs	pairs	pa	T{
.ad l
maximum number of color-pairs on the screen
T}
no_color_video	ncv	NC	T{
.ad l
video attributes that cannot be used with colors
T}
.TE
.PP
.
The following numeric capabilities are present in the SVr4.0 term structure,
but are not yet documented in the man page.
They came in with SVr4's printer support.
.
.PP
.TS
center;
Lb        Cb       S   Lb
Lb        Lb       Lb  Lb
Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
\&	Code	\&
Numeric Capability Name	TI	TC	Description
_
buffer_capacity	bufsz	Ya	T{
.ad l
numbers of bytes buffered before printing
T}
dot_vert_spacing	spinv	Yb	T{
.ad l
spacing of pins vertically in pins per inch
T}
dot_horz_spacing	spinh	Yc	T{
.ad l
spacing of dots horizontally in dots per inch
T}
max_micro_address	maddr	Yd	T{
.ad l
maximum value in micro_..._address
T}
max_micro_jump	mjump	Ye	T{
.ad l
maximum value in parm_..._micro
T}
micro_col_size	mcs	Yf	T{
.ad l
character step size when in micro mode
T}
micro_line_size	mls	Yg	T{
.ad l
line step size when in micro mode
T}
number_of_pins	npins	Yh	T{
.ad l
numbers of pins in print-head
T}
output_res_char	orc	Yi	T{
.ad l
horizontal resolution in units per line
T}
output_res_line	orl	Yj	T{
.ad l
vertical resolution in units per line
T}
output_res_horz_inch	orhi	Yk	T{
.ad l
horizontal resolution in units per inch
T}
output_res_vert_inch	orvi	Yl	T{
.ad l
vertical resolution in units per inch
T}
print_rate	cps	Ym	T{
.ad l
print rate in characters per second
T}
wide_char_size	widcs	Yn	T{
.ad l
character step size when in double wide mode
T}
buttons	btns	BT	T{
.ad l
number of buttons on mouse
T}
bit_image_entwining	bitwin	Yo	T{
.ad l
number of passes for each bit-image row
T}
bit_image_type	bitype	Yp	T{
.ad l
type of bit-image device
T}
.TE
.PP
.
.TS
center;
Lb        Cb       S   Lb
Lb        Lb       Lb  Lb
Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
\&	Code	\&
String Capability Name	TI	TC	Description
_
back_tab	cbt	bt	T{
.ad l
back tab (P)
T}
bell	bel	bl	T{
.ad l
audible signal (bell) (P)
T}
carriage_return	cr	cr	T{
.ad l
carriage return (P*) (P*)
T}
change_scroll_region	csr	cs	T{
.ad l
change region to line #1 to line #2 (P)
T}
clear_all_tabs	tbc	ct	T{
.ad l
clear all tab stops (P)
T}
clear_screen	clear	cl	T{
.ad l
clear screen and home cursor (P*)
T}
clr_eol	el	ce	T{
.ad l
clear to end of line (P)
T}
clr_eos	ed	cd	T{
.ad l
clear to end of screen (P*)
T}
column_address	hpa	ch	T{
.ad l
horizontal position #1, absolute (P)
T}
command_character	cmdch	CC	T{
.ad l
terminal settable cmd character in prototype !?
T}
cursor_address	cup	cm	T{
.ad l
move to row #1 columns #2
T}
cursor_down	cud1	do	T{
.ad l
down one line
T}
cursor_home	home	ho	T{
.ad l
home cursor (if no cup)
T}
cursor_invisible	civis	vi	T{
.ad l
make cursor invisible
T}
cursor_left	cub1	le	T{
.ad l
move left one space
T}
cursor_mem_address	mrcup	CM	T{
.ad l
memory relative cursor addressing, move to row #1 columns #2
T}
cursor_normal	cnorm	ve	T{
.ad l
make cursor appear normal (undo civis/cvvis)
T}
cursor_right	cuf1	nd	T{
.ad l
non-destructive space (move right one space)
T}
cursor_to_ll	ll	ll	T{
.ad l
last line, first column (if no cup)
T}
cursor_up	cuu1	up	T{
.ad l
up one line
T}
cursor_visible	cvvis	vs	T{
.ad l
make cursor very visible
T}
delete_character	dch1	dc	T{
.ad l
delete character (P*)
T}
delete_line	dl1	dl	T{
.ad l
delete line (P*)
T}
dis_status_line	dsl	ds	T{
.ad l
disable status line
T}
down_half_line	hd	hd	T{
.ad l
half a line down
T}
enter_alt_charset_mode	smacs	as	T{
.ad l
start alternate character set (P)
T}
enter_blink_mode	blink	mb	T{
.ad l
turn on blinking
T}
enter_bold_mode	bold	md	T{
.ad l
turn on bold (extra bright) mode
T}
enter_ca_mode	smcup	ti	T{
.ad l
string to start programs using cup
T}
enter_delete_mode	smdc	dm	T{
.ad l
enter delete mode
T}
enter_dim_mode	dim	mh	T{
.ad l
turn on half-bright mode
T}
enter_insert_mode	smir	im	T{
.ad l
enter insert mode
T}
enter_secure_mode	invis	mk	T{
.ad l
turn on blank mode (characters invisible)
T}
enter_protected_mode	prot	mp	T{
.ad l
turn on protected mode
T}
enter_reverse_mode	rev	mr	T{
.ad l
turn on reverse video mode
T}
enter_standout_mode	smso	so	T{
.ad l
begin standout mode
T}
enter_underline_mode	smul	us	T{
.ad l
begin underline mode
T}
erase_chars	ech	ec	T{
.ad l
erase #1 characters (P)
T}
exit_alt_charset_mode	rmacs	ae	T{
.ad l
end alternate character set (P)
T}
exit_attribute_mode	sgr0	me	T{
.ad l
turn off all attributes
T}
exit_ca_mode	rmcup	te	T{
.ad l
strings to end programs using cup
T}
exit_delete_mode	rmdc	ed	T{
.ad l
end delete mode
T}
exit_insert_mode	rmir	ei	T{
.ad l
exit insert mode
T}
exit_standout_mode	rmso	se	T{
.ad l
exit standout mode
T}
exit_underline_mode	rmul	ue	T{
.ad l
exit underline mode
T}
flash_screen	flash	vb	T{
.ad l
visible bell (may not move cursor)
T}
form_feed	ff	ff	T{
.ad l
hardcopy terminal page eject (P*)
T}
from_status_line	fsl	fs	T{
.ad l
return from status line
T}
init_1string	is1	i1	T{
.ad l
initialization string
T}
init_2string	is2	is	T{
.ad l
initialization string
T}
init_3string	is3	i3	T{
.ad l
initialization string
T}
init_file	if	if	T{
.ad l
name of initialization file
T}
insert_character	ich1	ic	T{
.ad l
insert character (P)
T}
insert_line	il1	al	T{
.ad l
insert line (P*)
T}
insert_padding	ip	ip	T{
.ad l
insert padding after inserted character
T}
key_backspace	kbs	kb	T{
.ad l
backspace key
T}
key_catab	ktbc	ka	T{
.ad l
clear-all-tabs key
T}
key_clear	kclr	kC	T{
.ad l
clear-screen or erase key
T}
key_ctab	kctab	kt	T{
.ad l
clear-tab key
T}
key_dc	kdch1	kD	T{
.ad l
delete-character key
T}
key_dl	kdl1	kL	T{
.ad l
delete-line key
T}
key_down	kcud1	kd	T{
.ad l
down-arrow key
T}
.TE
.TS
center;
Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
key_eic	krmir	kM	T{
.ad l
sent by rmir or smir in insert mode
T}
key_eol	kel	kE	T{
.ad l
clear-to-end-of-line key
T}
key_eos	ked	kS	T{
.ad l
clear-to-end-of-screen key
T}
key_f0	kf0	k0	T{
.ad l
F0 function key
T}
key_f1	kf1	k1	T{
.ad l
F1 function key
T}
key_f10	kf10	k;	T{
.ad l
F10 function key
T}
key_f2	kf2	k2	T{
.ad l
F2 function key
T}
key_f3	kf3	k3	T{
.ad l
F3 function key
T}
key_f4	kf4	k4	T{
.ad l
F4 function key
T}
key_f5	kf5	k5	T{
.ad l
F5 function key
T}
key_f6	kf6	k6	T{
.ad l
F6 function key
T}
key_f7	kf7	k7	T{
.ad l
F7 function key
T}
key_f8	kf8	k8	T{
.ad l
F8 function key
T}
key_f9	kf9	k9	T{
.ad l
F9 function key
T}
key_home	khome	kh	T{
.ad l
home key
T}
key_ic	kich1	kI	T{
.ad l
insert-character key
T}
key_il	kil1	kA	T{
.ad l
insert-line key
T}
key_left	kcub1	kl	T{
.ad l
left-arrow key
T}
key_ll	kll	kH	T{
.ad l
lower-left key (home down)
T}
key_npage	knp	kN	T{
.ad l
next-page key
T}
key_ppage	kpp	kP	T{
.ad l
previous-page key
T}
key_right	kcuf1	kr	T{
.ad l
right-arrow key
T}
key_sf	kind	kF	T{
.ad l
scroll-forward key
T}
key_sr	kri	kR	T{
.ad l
scroll-backward key
T}
key_stab	khts	kT	T{
.ad l
set-tab key
T}
key_up	kcuu1	ku	T{
.ad l
up-arrow key
T}
keypad_local	rmkx	ke	T{
.ad l
leave keyboard transmit mode
T}
keypad_xmit	smkx	ks	T{
.ad l
enter keyboard transmit mode
T}
lab_f0	lf0	l0	T{
.ad l
label on function key f0 if not f0
T}
lab_f1	lf1	l1	T{
.ad l
label on function key f1 if not f1
T}
lab_f10	lf10	la	T{
.ad l
label on function key f10 if not f10
T}
lab_f2	lf2	l2	T{
.ad l
label on function key f2 if not f2
T}
lab_f3	lf3	l3	T{
.ad l
label on function key f3 if not f3
T}
lab_f4	lf4	l4	T{
.ad l
label on function key f4 if not f4
T}
lab_f5	lf5	l5	T{
.ad l
label on function key f5 if not f5
T}
lab_f6	lf6	l6	T{
.ad l
label on function key f6 if not f6
T}
lab_f7	lf7	l7	T{
.ad l
label on function key f7 if not f7
T}
lab_f8	lf8	l8	T{
.ad l
label on function key f8 if not f8
T}
lab_f9	lf9	l9	T{
.ad l
label on function key f9 if not f9
T}
meta_off	rmm	mo	T{
.ad l
turn off meta mode
T}
meta_on	smm	mm	T{
.ad l
turn on meta mode (8th-bit on)
T}
newline	nel	nw	T{
.ad l
newline (behave like cr followed by lf)
T}
pad_char	pad	pc	T{
.ad l
padding char (instead of null)
T}
parm_dch	dch	DC	T{
.ad l
delete #1 characters (P*)
T}
parm_delete_line	dl	DL	T{
.ad l
delete #1 lines (P*)
T}
parm_down_cursor	cud	DO	T{
.ad l
down #1 lines (P*)
T}
parm_ich	ich	IC	T{
.ad l
insert #1 characters (P*)
T}
parm_index	indn	SF	T{
.ad l
scroll forward #1 lines (P)
T}
parm_insert_line	il	AL	T{
.ad l
insert #1 lines (P*)
T}
parm_left_cursor	cub	LE	T{
.ad l
move #1 characters to the left (P)
T}
parm_right_cursor	cuf	RI	T{
.ad l
move #1 characters to the right (P*)
T}
parm_rindex	rin	SR	T{
.ad l
scroll back #1 lines (P)
T}
parm_up_cursor	cuu	UP	T{
.ad l
up #1 lines (P*)
T}
pkey_key	pfkey	pk	T{
.ad l
program function key #1 to type string #2
T}
pkey_local	pfloc	pl	T{
.ad l
program function key #1 to execute string #2
T}
pkey_xmit	pfx	px	T{
.ad l
program function key #1 to transmit string #2
T}
print_screen	mc0	ps	T{
.ad l
print contents of screen
T}
prtr_off	mc4	pf	T{
.ad l
turn off printer
T}
prtr_on	mc5	po	T{
.ad l
turn on printer
T}
repeat_char	rep	rp	T{
.ad l
repeat char #1 #2 times (P*)
T}
reset_1string	rs1	r1	T{
.ad l
reset string
T}
reset_2string	rs2	r2	T{
.ad l
reset string
T}
.TE
.TS
center;
Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
reset_3string	rs3	r3	T{
.ad l
reset string
T}
reset_file	rf	rf	T{
.ad l
name of reset file
T}
restore_cursor	rc	rc	T{
.ad l
restore cursor to position of last save_cursor
T}
row_address	vpa	cv	T{
.ad l
vertical position #1 absolute (P)
T}
save_cursor	sc	sc	T{
.ad l
save current cursor position (P)
T}
scroll_forward	ind	sf	T{
.ad l
scroll text up (P)
T}
scroll_reverse	ri	sr	T{
.ad l
scroll text down (P)
T}
set_attributes	sgr	sa	T{
.ad l
define video attributes #1-#9 (PG9)
T}
set_tab	hts	st	T{
.ad l
set a tab in every row, current columns
T}
set_window	wind	wi	T{
.ad l
current window is lines #1-#2 cols #3-#4
T}
tab	ht	ta	T{
.ad l
tab to next 8-space hardware tab stop
T}
to_status_line	tsl	ts	T{
.ad l
move to status line, column #1
T}
underline_char	uc	uc	T{
.ad l
underline char and move past it
T}
up_half_line	hu	hu	T{
.ad l
half a line up
T}
init_prog	iprog	iP	T{
.ad l
path name of program for initialization
T}
key_a1	ka1	K1	T{
.ad l
upper left of keypad
T}
key_a3	ka3	K3	T{
.ad l
upper right of keypad
T}
key_b2	kb2	K2	T{
.ad l
center of keypad
T}
key_c1	kc1	K4	T{
.ad l
lower left of keypad
T}
key_c3	kc3	K5	T{
.ad l
lower right of keypad
T}
prtr_non	mc5p	pO	T{
.ad l
turn on printer for #1 bytes
T}
char_padding	rmp	rP	T{
.ad l
like ip but when in insert mode
T}
acs_chars	acsc	ac	T{
.ad l
graphics charset pairs, based on vt100
T}
plab_norm	pln	pn	T{
.ad l
program label #1 to show string #2
T}
key_btab	kcbt	kB	T{
.ad l
back-tab key
T}
enter_xon_mode	smxon	SX	T{
.ad l
turn on xon/xoff handshaking
T}
exit_xon_mode	rmxon	RX	T{
.ad l
turn off xon/xoff handshaking
T}
enter_am_mode	smam	SA	T{
.ad l
turn on automatic margins
T}
exit_am_mode	rmam	RA	T{
.ad l
turn off automatic margins
T}
xon_character	xonc	XN	T{
.ad l
XON character
T}
xoff_character	xoffc	XF	T{
.ad l
XOFF character
T}
ena_acs	enacs	eA	T{
.ad l
enable alternate char set
T}
label_on	smln	LO	T{
.ad l
turn on soft labels
T}
label_off	rmln	LF	T{
.ad l
turn off soft labels
T}
key_beg	kbeg	@1	T{
.ad l
begin key
T}
key_cancel	kcan	@2	T{
.ad l
cancel key
T}
key_close	kclo	@3	T{
.ad l
close key
T}
key_command	kcmd	@4	T{
.ad l
command key
T}
key_copy	kcpy	@5	T{
.ad l
copy key
T}
key_create	kcrt	@6	T{
.ad l
create key
T}
key_end	kend	@7	T{
.ad l
end key
T}
key_enter	kent	@8	T{
.ad l
enter/send key
T}
key_exit	kext	@9	T{
.ad l
exit key
T}
key_find	kfnd	@0	T{
.ad l
find key
T}
key_help	khlp	%1	T{
.ad l
help key
T}
key_mark	kmrk	%2	T{
.ad l
mark key
T}
key_message	kmsg	%3	T{
.ad l
message key
T}
key_move	kmov	%4	T{
.ad l
move key
T}
key_next	knxt	%5	T{
.ad l
next key
T}
key_open	kopn	%6	T{
.ad l
open key
T}
key_options	kopt	%7	T{
.ad l
options key
T}
key_previous	kprv	%8	T{
.ad l
previous key
T}
key_print	kprt	%9	T{
.ad l
print key
T}
key_redo	krdo	%0	T{
.ad l
redo key
T}
key_reference	kref	&1	T{
.ad l
reference key
T}
key_refresh	krfr	&2	T{
.ad l
refresh key
T}
key_replace	krpl	&3	T{
.ad l
replace key
T}
key_restart	krst	&4	T{
.ad l
restart key
T}
key_resume	kres	&5	T{
.ad l
resume key
T}
key_save	ksav	&6	T{
.ad l
save key
T}
key_suspend	kspd	&7	T{
.ad l
suspend key
T}
key_undo	kund	&8	T{
.ad l
undo key
T}
.TE
.TS
center;
Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
key_sbeg	kBEG	&9	T{
.ad l
shifted begin key
T}
key_scancel	kCAN	&0	T{
.ad l
shifted cancel key
T}
key_scommand	kCMD	*1	T{
.ad l
shifted command key
T}
key_scopy	kCPY	*2	T{
.ad l
shifted copy key
T}
key_screate	kCRT	*3	T{
.ad l
shifted create key
T}
key_sdc	kDC	*4	T{
.ad l
shifted delete-character key
T}
key_sdl	kDL	*5	T{
.ad l
shifted delete-line key
T}
key_select	kslt	*6	T{
.ad l
select key
T}
key_send	kEND	*7	T{
.ad l
shifted end key
T}
key_seol	kEOL	*8	T{
.ad l
shifted clear-to-end-of-line key
T}
key_sexit	kEXT	*9	T{
.ad l
shifted exit key
T}
key_sfind	kFND	*0	T{
.ad l
shifted find key
T}
key_shelp	kHLP	#1	T{
.ad l
shifted help key
T}
key_shome	kHOM	#2	T{
.ad l
shifted home key
T}
key_sic	kIC	#3	T{
.ad l
shifted insert-character key
T}
key_sleft	kLFT	#4	T{
.ad l
shifted left-arrow key
T}
key_smessage	kMSG	%a	T{
.ad l
shifted message key
T}
key_smove	kMOV	%b	T{
.ad l
shifted move key
T}
key_snext	kNXT	%c	T{
.ad l
shifted next key
T}
key_soptions	kOPT	%d	T{
.ad l
shifted options key
T}
key_sprevious	kPRV	%e	T{
.ad l
shifted previous key
T}
key_sprint	kPRT	%f	T{
.ad l
shifted print key
T}
key_sredo	kRDO	%g	T{
.ad l
shifted redo key
T}
key_sreplace	kRPL	%h	T{
.ad l
shifted replace key
T}
key_sright	kRIT	%i	T{
.ad l
shifted right-arrow key
T}
key_srsume	kRES	%j	T{
.ad l
shifted resume key
T}
key_ssave	kSAV	!1	T{
.ad l
shifted save key
T}
key_ssuspend	kSPD	!2	T{
.ad l
shifted suspend key
T}
key_sundo	kUND	!3	T{
.ad l
shifted undo key
T}
req_for_input	rfi	RF	T{
.ad l
send next input char (for ptys)
T}
key_f11	kf11	F1	T{
.ad l
F11 function key
T}
key_f12	kf12	F2	T{
.ad l
F12 function key
T}
key_f13	kf13	F3	T{
.ad l
F13 function key
T}
key_f14	kf14	F4	T{
.ad l
F14 function key
T}
key_f15	kf15	F5	T{
.ad l
F15 function key
T}
key_f16	kf16	F6	T{
.ad l
F16 function key
T}
key_f17	kf17	F7	T{
.ad l
F17 function key
T}
key_f18	kf18	F8	T{
.ad l
F18 function key
T}
key_f19	kf19	F9	T{
.ad l
F19 function key
T}
key_f20	kf20	FA	T{
.ad l
F20 function key
T}
key_f21	kf21	FB	T{
.ad l
F21 function key
T}
key_f22	kf22	FC	T{
.ad l
F22 function key
T}
key_f23	kf23	FD	T{
.ad l
F23 function key
T}
key_f24	kf24	FE	T{
.ad l
F24 function key
T}
key_f25	kf25	FF	T{
.ad l
F25 function key
T}
key_f26	kf26	FG	T{
.ad l
F26 function key
T}
key_f27	kf27	FH	T{
.ad l
F27 function key
T}
key_f28	kf28	FI	T{
.ad l
F28 function key
T}
key_f29	kf29	FJ	T{
.ad l
F29 function key
T}
key_f30	kf30	FK	T{
.ad l
F30 function key
T}
key_f31	kf31	FL	T{
.ad l
F31 function key
T}
key_f32	kf32	FM	T{
.ad l
F32 function key
T}
key_f33	kf33	FN	T{
.ad l
F33 function key
T}
key_f34	kf34	FO	T{
.ad l
F34 function key
T}
key_f35	kf35	FP	T{
.ad l
F35 function key
T}
key_f36	kf36	FQ	T{
.ad l
F36 function key
T}
key_f37	kf37	FR	T{
.ad l
F37 function key
T}
key_f38	kf38	FS	T{
.ad l
F38 function key
T}
key_f39	kf39	FT	T{
.ad l
F39 function key
T}
key_f40	kf40	FU	T{
.ad l
F40 function key
T}
key_f41	kf41	FV	T{
.ad l
F41 function key
T}
key_f42	kf42	FW	T{
.ad l
F42 function key
T}
.TE
.TS
center;
Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
key_f43	kf43	FX	T{
.ad l
F43 function key
T}
key_f44	kf44	FY	T{
.ad l
F44 function key
T}
key_f45	kf45	FZ	T{
.ad l
F45 function key
T}
key_f46	kf46	Fa	T{
.ad l
F46 function key
T}
key_f47	kf47	Fb	T{
.ad l
F47 function key
T}
key_f48	kf48	Fc	T{
.ad l
F48 function key
T}
key_f49	kf49	Fd	T{
.ad l
F49 function key
T}
key_f50	kf50	Fe	T{
.ad l
F50 function key
T}
key_f51	kf51	Ff	T{
.ad l
F51 function key
T}
key_f52	kf52	Fg	T{
.ad l
F52 function key
T}
key_f53	kf53	Fh	T{
.ad l
F53 function key
T}
key_f54	kf54	Fi	T{
.ad l
F54 function key
T}
key_f55	kf55	Fj	T{
.ad l
F55 function key
T}
key_f56	kf56	Fk	T{
.ad l
F56 function key
T}
key_f57	kf57	Fl	T{
.ad l
F57 function key
T}
key_f58	kf58	Fm	T{
.ad l
F58 function key
T}
key_f59	kf59	Fn	T{
.ad l
F59 function key
T}
key_f60	kf60	Fo	T{
.ad l
F60 function key
T}
key_f61	kf61	Fp	T{
.ad l
F61 function key
T}
key_f62	kf62	Fq	T{
.ad l
F62 function key
T}
key_f63	kf63	Fr	T{
.ad l
F63 function key
T}
clr_bol	el1	cb	T{
.ad l
Clear to beginning of line
T}
clear_margins	mgc	MC	T{
.ad l
clear right and left soft margins
T}
set_left_margin	smgl	ML	T{
.ad l
set left soft margin at current column (not in BSD \fItermcap\fP)
T}
set_right_margin	smgr	MR	T{
.ad l
set right soft margin at current column
T}
label_format	fln	Lf	T{
.ad l
label format
T}
set_clock	sclk	SC	T{
.ad l
set clock, #1 hrs #2 mins #3 secs
T}
display_clock	dclk	DK	T{
.ad l
display clock
T}
remove_clock	rmclk	RC	T{
.ad l
remove clock
T}
create_window	cwin	CW	T{
.ad l
define a window #1 from #2,#3 to #4,#5
T}
goto_window	wingo	WG	T{
.ad l
go to window #1
T}
hangup	hup	HU	T{
.ad l
hang-up phone
T}
dial_phone	dial	DI	T{
.ad l
dial number #1
T}
quick_dial	qdial	QD	T{
.ad l
dial number #1 without checking
T}
tone	tone	TO	T{
.ad l
select touch tone dialing
T}
pulse	pulse	PU	T{
.ad l
select pulse dialing
T}
flash_hook	hook	fh	T{
.ad l
flash switch hook
T}
fixed_pause	pause	PA	T{
.ad l
pause for 2-3 seconds
T}
wait_tone	wait	WA	T{
.ad l
wait for dial-tone
T}
user0	u0	u0	T{
.ad l
User string #0
T}
user1	u1	u1	T{
.ad l
User string #1
T}
user2	u2	u2	T{
.ad l
User string #2
T}
user3	u3	u3	T{
.ad l
User string #3
T}
user4	u4	u4	T{
.ad l
User string #4
T}
user5	u5	u5	T{
.ad l
User string #5
T}
user6	u6	u6	T{
.ad l
User string #6
T}
user7	u7	u7	T{
.ad l
User string #7
T}
user8	u8	u8	T{
.ad l
User string #8
T}
user9	u9	u9	T{
.ad l
User string #9
T}
orig_pair	op	op	T{
.ad l
Set default pair to its original value
T}
orig_colors	oc	oc	T{
.ad l
Set all color pairs to the original ones
T}
initialize_color	initc	Ic	T{
.ad l
initialize color #1 to (#2,#3,#4)
T}
initialize_pair	initp	Ip	T{
.ad l
Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7)
T}
set_color_pair	scp	sp	T{
.ad l
Set current color pair to #1
T}
set_foreground	setf	Sf	T{
.ad l
Set foreground color #1
T}
set_background	setb	Sb	T{
.ad l
Set background color #1
T}
change_char_pitch	cpi	ZA	T{
.ad l
Change number of characters per inch to #1
T}
change_line_pitch	lpi	ZB	T{
.ad l
Change number of lines per inch to #1
T}
change_res_horz	chr	ZC	T{
.ad l
Change horizontal resolution to #1
T}
change_res_vert	cvr	ZD	T{
.ad l
Change vertical resolution to #1
T}
define_char	defc	ZE	T{
.ad l
Define a character #1, #2 dots wide, descender #3
T}
enter_doublewide_mode	swidm	ZF	T{
.ad l
Enter double-wide mode
T}
.TE
.TS
center;
Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
enter_draft_quality	sdrfq	ZG	T{
.ad l
Enter draft-quality mode
T}
enter_italics_mode	sitm	ZH	T{
.ad l
Enter italic mode
T}
enter_leftward_mode	slm	ZI	T{
.ad l
Start leftward carriage motion
T}
enter_micro_mode	smicm	ZJ	T{
.ad l
Start micro-motion mode
T}
enter_near_letter_quality	snlq	ZK	T{
.ad l
Enter NLQ mode
T}
enter_normal_quality	snrmq	ZL	T{
.ad l
Enter normal-quality mode
T}
enter_shadow_mode	sshm	ZM	T{
.ad l
Enter shadow-print mode
T}
enter_subscript_mode	ssubm	ZN	T{
.ad l
Enter subscript mode
T}
enter_superscript_mode	ssupm	ZO	T{
.ad l
Enter superscript mode
T}
enter_upward_mode	sum	ZP	T{
.ad l
Start upward carriage motion
T}
exit_doublewide_mode	rwidm	ZQ	T{
.ad l
End double-wide mode
T}
exit_italics_mode	ritm	ZR	T{
.ad l
End italic mode
T}
exit_leftward_mode	rlm	ZS	T{
.ad l
End left-motion mode
T}
exit_micro_mode	rmicm	ZT	T{
.ad l
End micro-motion mode
T}
exit_shadow_mode	rshm	ZU	T{
.ad l
End shadow-print mode
T}
exit_subscript_mode	rsubm	ZV	T{
.ad l
End subscript mode
T}
exit_superscript_mode	rsupm	ZW	T{
.ad l
End superscript mode
T}
exit_upward_mode	rum	ZX	T{
.ad l
End reverse character motion
T}
micro_column_address	mhpa	ZY	T{
.ad l
Like column_address in micro mode
T}
micro_down	mcud1	ZZ	T{
.ad l
Like cursor_down in micro mode
T}
micro_left	mcub1	Za	T{
.ad l
Like cursor_left in micro mode
T}
micro_right	mcuf1	Zb	T{
.ad l
Like cursor_right in micro mode
T}
micro_row_address	mvpa	Zc	T{
.ad l
Like row_address #1 in micro mode
T}
micro_up	mcuu1	Zd	T{
.ad l
Like cursor_up in micro mode
T}
order_of_pins	porder	Ze	T{
.ad l
Match software bits to print-head pins
T}
parm_down_micro	mcud	Zf	T{
.ad l
Like parm_down_cursor in micro mode
T}
parm_left_micro	mcub	Zg	T{
.ad l
Like parm_left_cursor in micro mode
T}
parm_right_micro	mcuf	Zh	T{
.ad l
Like parm_right_cursor in micro mode
T}
parm_up_micro	mcuu	Zi	T{
.ad l
Like parm_up_cursor in micro mode
T}
select_char_set	scs	Zj	T{
.ad l
Select character set, #1
T}
set_bottom_margin	smgb	Zk	T{
.ad l
Set bottom margin at current line
T}
set_bottom_margin_parm	smgbp	Zl	T{
.ad l
Set bottom margin at line #1 or (if smgtp is not given) #2 lines from bottom
T}
set_left_margin_parm	smglp	Zm	T{
.ad l
Set left (right) margin at column #1
T}
set_right_margin_parm	smgrp	Zn	T{
.ad l
Set right margin at column #1
T}
set_top_margin	smgt	Zo	T{
.ad l
Set top margin at current line
T}
set_top_margin_parm	smgtp	Zp	T{
.ad l
Set top (bottom) margin at row #1
T}
start_bit_image	sbim	Zq	T{
.ad l
Start printing bit image graphics
T}
start_char_set_def	scsd	Zr	T{
.ad l
Start character set definition #1, with #2 characters in the set
T}
stop_bit_image	rbim	Zs	T{
.ad l
Stop printing bit image graphics
T}
stop_char_set_def	rcsd	Zt	T{
.ad l
End definition of character set #1
T}
subscript_characters	subcs	Zu	T{
.ad l
List of subscriptable characters
T}
superscript_characters	supcs	Zv	T{
.ad l
List of superscriptable characters
T}
these_cause_cr	docr	Zw	T{
.ad l
Printing any of these characters causes CR
T}
zero_motion	zerom	Zx	T{
.ad l
No motion for subsequent character
T}
.TE
.PP
.
The following string capabilities are present in the SVr4.0 term structure,
but were originally not documented in the man page.
.
.PP
.TS
center;
Lb        Cb       S   Lb
Lb        Lb       Lb  Lb
Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
\&	Code	\&
String Capability Name	TI	TC	Description
_
char_set_names	csnm	Zy	T{
.ad l
Produce #1'th item from list of character set names
T}
key_mouse	kmous	Km	T{
.ad l
Mouse event has occurred
T}
mouse_info	minfo	Mi	T{
.ad l
Mouse status information
T}
req_mouse_pos	reqmp	RQ	T{
.ad l
Request mouse position
T}
get_mouse	getm	Gm	T{
.ad l
Curses should get button events, parameter #1 not documented.
T}
set_a_foreground	setaf	AF	T{
.ad l
Set foreground color to #1, using ANSI escape
T}
set_a_background	setab	AB	T{
.ad l
Set background color to #1, using ANSI escape
T}
pkey_plab	pfxl	xl	T{
.ad l
Program function key #1 to type string #2 and show string #3
T}
device_type	devt	dv	T{
.ad l
Indicate language, codeset support
T}
code_set_init	csin	ci	T{
.ad l
Init sequence for multiple codesets
T}
set0_des_seq	s0ds	s0	T{
.ad l
Shift to codeset 0 (EUC set 0, ASCII)
T}
set1_des_seq	s1ds	s1	T{
.ad l
Shift to codeset 1
T}
set2_des_seq	s2ds	s2	T{
.ad l
Shift to codeset 2
T}
set3_des_seq	s3ds	s3	T{
.ad l
Shift to codeset 3
T}
set_lr_margin	smglr	ML	T{
.ad l
Set both left and right margins to #1, #2.  (ML is not in BSD termcap).
T}
set_tb_margin	smgtb	MT	T{
.ad l
Sets both top and bottom margins to #1, #2
T}
bit_image_repeat	birep	Xy	T{
.ad l
Repeat bit image cell #1 #2 times
T}
bit_image_newline	binel	Zz	T{
.ad l
Move to next row of the bit image
T}
bit_image_carriage_return	bicr	Yv	T{
.ad l
Move to beginning of same row
T}
color_names	colornm	Yw	T{
.ad l
Give name for color #1
T}
define_bit_image_region	defbi	Yx	T{
.ad l
Define rectangular bit image region
T}
end_bit_image_region	endbi	Yy	T{
.ad l
End a bit-image region
T}
set_color_band	setcolor	Yz	T{
.ad l
Change to ribbon color #1
T}
set_page_length	slines	YZ	T{
.ad l
Set page length to #1 lines
T}
display_pc_char	dispc	S1	T{
.ad l
Display PC character #1
T}
enter_pc_charset_mode	smpch	S2	T{
.ad l
Enter PC character display mode
T}
exit_pc_charset_mode	rmpch	S3	T{
.ad l
Exit PC character display mode
T}
enter_scancode_mode	smsc	S4	T{
.ad l
Enter PC scancode mode
T}
exit_scancode_mode	rmsc	S5	T{
.ad l
Exit PC scancode mode
T}
pc_term_options	pctrm	S6	T{
.ad l
PC terminal options
T}
scancode_escape	scesc	S7	T{
.ad l
Escape for scancode emulation
T}
alt_scancode_esc	scesa	S8	T{
.ad l
Alternate escape for scancode emulation
T}
.TE
.PP
.
The XSI Curses standard added these hardcopy capabilities.
They were used in some post-4.1 versions of System V curses,
e.g., Solaris 2.5 and IRIX 6.x.
Except for \fBYI\fP, the \fBncurses\fR termcap names for them are invented.
According to the XSI Curses standard, they have no termcap names.
If your compiled terminfo entries use these,
they may not be binary-compatible with System V terminfo
entries after SVr4.1; beware!
.
.PP
.TS
center;
Lb        Cb       S   Lb
Lb        Lb       Lb  Lb
Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
\&	Code	\&
String Capability Name	TI	TC	Description
_
enter_horizontal_hl_mode	ehhlm	Xh	T{
.ad l
Enter horizontal highlight mode
T}
enter_left_hl_mode	elhlm	Xl	T{
.ad l
Enter left highlight mode
T}
enter_low_hl_mode	elohlm	Xo	T{
.ad l
Enter low highlight mode
T}
enter_right_hl_mode	erhlm	Xr	T{
.ad l
Enter right highlight mode
T}
enter_top_hl_mode	ethlm	Xt	T{
.ad l
Enter top highlight mode
T}
enter_vertical_hl_mode	evhlm	Xv	T{
.ad l
Enter vertical highlight mode
T}
set_a_attributes	sgr1	sA	T{
.ad l
Define second set of video attributes #1-#6
T}
set_pglen_inch	slength	YI	T{
.ad l
Set page length to #1 hundredth of an inch (some implementations use sL for termcap).
T}
.TE
.\"***************************************************************************
.\" Copyright 2018-2023,2024 Thomas E. Dickey                                *
.\" Copyright 1998-2016,2017 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: terminfo.tail,v 1.148 2024/04/20 21:24:19 tom Exp $
.ps +1
.SS "User-Defined Capabilities"
.
The preceding section listed the \fIpredefined\fP capabilities.
They deal with some special features for terminals no longer
(or possibly never) produced.
Occasionally there are special features of newer terminals which
are awkward or impossible to represent by reusing the predefined
capabilities.
.PP
\fI\%ncurses\fP addresses this limitation by allowing user-defined
capabilities.
The \fB@TIC@\fP and \fB@INFOCMP@\fP programs provide
the \fB\-x\fP option for this purpose.
When \fB\-x\fP is set,
\fB@TIC@\fP treats unknown capabilities as user-defined.
That is, if \fB@TIC@\fP encounters a capability name
which it does not recognize,
it infers its type (Boolean, number or string) from the syntax
and makes an extended table entry for that capability.
The \fBuse_extended_names\fP(3X) function makes this information
conditionally available to applications.
The \fI\%ncurses\fP library provides the data leaving most of the
behavior to applications:
.bP
User-defined capability strings whose name begins
with \*(``k\*('' are treated as function keys.
.bP
The types (Boolean, number, string) determined by \fB@TIC@\fP
can be inferred by successful calls on \fBtigetflag\fP, etc.
.bP
If the capability name happens to be two characters,
the capability is also available through the termcap interface.
.PP
While termcap is said to be extensible because it does not use a predefined set
of capabilities,
in practice it has been limited to the capabilities defined by
terminfo implementations.
As a rule,
user-defined capabilities intended for use by termcap applications should
be limited to Booleans and numbers to avoid running past the 1023 byte
limit assumed by termcap implementations and their applications.
In particular, providing extended sets of function keys (past the 60
numbered keys and the handful of special named keys) is best done using
the longer names available using terminfo.
.PP
The \fI\%ncurses\fP library uses a few of these user-defined
capabilities,
as described in \fBuser_caps\fR(5).
Other user-defined capabilities (including function keys) are
described in the terminal database, in the section on
.I "NCURSES USER-DEFINABLE CAPABILITIES"
.
.SS "A Sample Entry"
.
The following entry, describing an ANSI-standard terminal, is representative
of what a \fBterminfo\fP entry for a modern terminal typically looks like.
.PP
.EX
\s-2ansi|ansi/pc\-term compatible with color,
        am, mc5i, mir, msgr,
        colors#8, cols#80, it#8, lines#24, ncv#3, pairs#64,
        acsc=+\e020\e,\e021\-\e030.\*^Y0\e333\(ga\e004a\e261f\e370g\e361h\e260
             j\e331k\e277l\e332m\e300n\e305o\*~p\e304q\e304r\e304s_t\e303
             u\e264v\e301w\e302x\e263y\e363z\e362{\e343|\e330}\e234\*~\e376,
        bel=\*^G, blink=\eE[5m, bold=\eE[1m, cbt=\eE[Z, clear=\eE[H\eE[J,
        cr=\*^M, cub=\eE[%p1%dD, cub1=\eE[D, cud=\eE[%p1%dB, cud1=\eE[B,
        cuf=\eE[%p1%dC, cuf1=\eE[C, cup=\eE[%i%p1%d;%p2%dH,
        cuu=\eE[%p1%dA, cuu1=\eE[A, dch=\eE[%p1%dP, dch1=\eE[P,
        dl=\eE[%p1%dM, dl1=\eE[M, ech=\eE[%p1%dX, ed=\eE[J, el=\eE[K,
        el1=\eE[1K, home=\eE[H, hpa=\eE[%i%p1%dG, ht=\eE[I, hts=\eEH,
        ich=\eE[%p1%d@, il=\eE[%p1%dL, il1=\eE[L, ind=\*^J,
        indn=\eE[%p1%dS, invis=\eE[8m, kbs=\*^H, kcbt=\eE[Z, kcub1=\eE[D,
        kcud1=\eE[B, kcuf1=\eE[C, kcuu1=\eE[A, khome=\eE[H, kich1=\eE[L,
        mc4=\eE[4i, mc5=\eE[5i, nel=\er\eE[S, op=\eE[39;49m,
        rep=%p1%c\eE[%p2%{1}%\-%db, rev=\eE[7m, rin=\eE[%p1%dT,
        rmacs=\eE[10m, rmpch=\eE[10m, rmso=\eE[m, rmul=\eE[m,
        s0ds=\eE(B, s1ds=\eE)B, s2ds=\eE*B, s3ds=\eE+B,
        setab=\eE[4%p1%dm, setaf=\eE[3%p1%dm,
        sgr=\eE[0;10%?%p1%t;7%;
                   %?%p2%t;4%;
                   %?%p3%t;7%;
                   %?%p4%t;5%;
                   %?%p6%t;1%;
                   %?%p7%t;8%;
                   %?%p9%t;11%;m,
        sgr0=\eE[0;10m, smacs=\eE[11m, smpch=\eE[11m, smso=\eE[7m,
        smul=\eE[4m, tbc=\eE[3g, u6=\eE[%i%d;%dR, u7=\eE[6n,
        u8=\eE[?%[;0123456789]c, u9=\eE[c, vpa=\eE[%i%p1%dd,
.EE
.PP
Entries may continue onto multiple lines by placing white space at
the beginning of each line except the first.
Comments may be included on lines beginning with \*(``#\*(''.
Capabilities in
.I terminfo
are of three types:
.bP
Boolean capabilities which indicate that the terminal has
some particular feature,
.bP
numeric capabilities giving the size of the terminal
or the size of particular delays, and
.bP
string
capabilities, which give a sequence which can be used to perform particular
terminal operations.
.SS "Types of Capabilities"
All capabilities have names.
For instance, the fact that
ANSI-standard terminals have
.I "automatic margins"
(i.e., an automatic return and line-feed
when the end of a line is reached) is indicated by the capability \fBam\fP.
Hence the description of ansi includes \fBam\fP.
Numeric capabilities are followed by the character \*(``#\*(''
and then a positive value.
Thus \fBcols\fP, which indicates the number of columns the terminal has,
gives the value \*(``80\*('' for ansi.
Values for numeric capabilities may be specified in
decimal,
octal, or
hexadecimal,
using the C programming language conventions
(e.g., 255, 0377 and 0xff or 0xFF).
.PP
Finally, string valued capabilities,
such as \fBel\fP (clear to end of line sequence)
are given by the two-character code,
an \*(``=\*('', and then
a string ending at the next following \*(``,\*(''.
.PP
A number of escape sequences are provided in the string valued capabilities
for easy encoding of characters there:
.bP
Both \fB\eE\fP and \fB\ee\fP
map to an \s-1ESCAPE\s0 character,
.bP
\fB\*^\f(BIx\fR maps to a control-\fIx\fP for any appropriate \fIx\fP,
and
.bP
the sequences
.RS 6
.PP
\fB\en\fP, \fB\el\fP, \fB\er\fP, \fB\et\fP, \fB\eb\fP, \fB\ef\fP, and \fB\es\fP
.RE
.IP
produce
.RS 6
.PP
\fInewline\fP, \fIline-feed\fP, \fIreturn\fP, \fItab\fP, \fIbackspace\fP, \fIform-feed\fP, and \fIspace\fP,
.RE
.IP
respectively.
.PP
X/Open Curses does not say what \*(``appropriate \fIx\fP\*('' might be.
In practice, that is a printable ASCII graphic character.
The special case \*(``\*^?\*('' is interpreted as DEL (127).
In all other cases, the character value is AND'd with 0x1f,
mapping to ASCII control codes in the range 0 through 31.
.PP
Other escapes include
.bP
\fB\e\*^\fP for \fB\*^\fP,
.bP
\fB\e\e\fP for \fB\e\fP,
.bP
\fB\e\fP, for comma,
.bP
\fB\e:\fP for \fB:\fP,
.bP
and \fB\e0\fP for null.
.IP
\fB\e0\fP will produce \e200, which does not terminate a string but behaves
as a null character on most terminals, providing CS7 is specified.
See \fBstty\fP(1).
.IP
The reason for this quirk is to maintain binary compatibility of the
compiled terminfo files with other implementations,
e.g., the SVr4 systems, which document this.
Compiled terminfo files use null-terminated strings, with no lengths.
Modifying this would require a new binary format,
which would not work with other implementations.
.PP
Finally, characters may be given as three octal digits after a \fB\e\fP.
.PP
A delay in milliseconds may appear anywhere in a string capability, enclosed in
$<..> brackets, as in \fBel\fP=\eEK$<5>,
and padding characters are supplied by \fBtputs\fP(3X)
to provide this delay.
.bP
The delay must be a number with at most one decimal
place of precision;
it may be followed by suffixes \*(``*\*('' or \*(``/\*('' or both.
.bP
A \*(``*\*(''
indicates that the padding required is proportional to the number of lines
affected by the operation, and the amount given is the per-affected-unit
padding required.
(In the case of insert character, the factor is still the
number of \fIlines\fP affected.)
.IP
Normally, padding is advisory if the device has the \fBxon\fP
capability; it is used for cost computation but does not trigger delays.
.bP
A \*(``/\*(''
suffix indicates that the padding is mandatory and forces a delay of the given
number of milliseconds even on devices for which \fBxon\fP is present to
indicate flow control.
.PP
Sometimes individual capabilities must be commented out.
To do this, put a period before the capability name.
For example, see the second
.B ind
in the example above.
.br
.ne 5
.SS "Fetching Compiled Descriptions"
Terminal descriptions in \fI\%ncurses\fP are stored in terminal
databases.
These databases, which are found by their pathname,
may be configured either as directory trees or hashed databases
(see \fBterm\fR(5)),
.PP
The library uses a compiled-in list of pathnames,
which can be overridden by environment variables.
Before starting to search,
\fI\%ncurses\fP checks the search list,
eliminating duplicates and pathnames where no terminal database is found.
The \fI\%ncurses\fP library reads the first description
which passes its consistency checks.
.bP
The environment variable \fBTERMINFO\fR is checked first, for
a terminal database containing the terminal description.
.bP
Next,
\fI\%ncurses\fP looks in \fI$HOME/.terminfo\fP
for a compiled description.
.IP
This is an optional feature which may be omitted entirely from
the library, or limited to prevent accidental use by privileged applications.
.bP
Next,
if the environment variable \fI\%TERMINFO_DIRS\fP is set,
\fI\%ncurses\fP interprets the contents of that variable
as a list of colon-separated pathnames of terminal databases to be searched.
.IP
An empty pathname (i.e., if the variable begins or ends
with a colon, or contains adjacent colons)
is interpreted as the system location \fI\*d\fP.
.bP
Finally, \fI\%ncurses\fP searches these compiled-in locations:
.RS
.bP
a list of directories (@TERMINFO_DIRS@), and
.bP
the system terminfo directory, \fI\*d\fP
.RE
.PP
The \fBTERMINFO\fP variable can contain a terminal description instead
of the pathname of a terminal database.
If this variable begins with \*(``hex:\*('' or \*(``b64:\*(''
then \fI\%ncurses\fP reads a terminal description from
hexadecimal- or base64-encoded data,
and if that description matches the name sought, will use that.
This encoded data can be set using the \*(``\-Q\*('' option of
\fB@TIC@\fR or \fB@INFOCMP@\fR.
.PP
The preceding addresses the usual configuration of \fI\%ncurses\fP,
which uses terminal descriptions prepared in \fIterminfo\fP format.
While \fItermcap\fP is less expressive,
\fI\%ncurses\fP can also be configured to read \fItermcap\fP
descriptions.
In that configuration,
it checks the \fI\%TERMCAP\fP and \fI\%TERMPATH\fP variables
(for content and search path,
respectively)
after the system terminal database.
.SS "Preparing Descriptions"
We now outline how to prepare descriptions of terminals.
The most effective way to prepare a terminal description is by imitating
the description of a similar terminal in
.I terminfo
and to build up a description gradually, using partial descriptions
with
.I vi
or some other screen-oriented program to check that they are correct.
Be aware that a very unusual terminal may expose deficiencies in
the ability of the
.I terminfo
file to describe it
or bugs in the screen-handling code of the test program.
.PP
To get the padding for insert line right (if the terminal manufacturer
did not document it) a severe test is to edit a large file at 9600 baud,
delete 16 or so lines from the middle of the screen, then hit the \*(``u\*(''
key several times quickly.
If the terminal messes up, more padding is usually needed.
A similar test can be used for insert character.
.SS "Basic Capabilities"
The number of columns on each line for the terminal is given by the
\fBcols\fP numeric capability.
If the terminal is a \s-1CRT\s0, then the
number of lines on the screen is given by the \fBlines\fP capability.
If the terminal wraps around to the beginning of the next line when
it reaches the right margin, then it should have the \fBam\fP capability.
If the terminal can clear its screen, leaving the cursor in the home
position, then this is given by the \fBclear\fP string capability.
If the terminal overstrikes
(rather than clearing a position when a character is struck over)
then it should have the \fBos\fP capability.
If the terminal is a printing terminal, with no soft copy unit,
give it both
.B hc
and
.BR os .
.RB ( os
applies to storage scope terminals, such as \s-1TEKTRONIX\s+1 4010
series, as well as hard copy and APL terminals.)
If there is a code to move the cursor to the left edge of the current
row, give this as
.BR cr .
(Normally this will be carriage return, control/M.)
If there is a code to produce an audible signal (bell, beep, etc)
give this as
.BR bel .
.PP
If there is a code to move the cursor one position to the left
(such as backspace) that capability should be given as
.BR cub1 .
Similarly, codes to move to the right, up, and down should be
given as
.BR cuf1 ,
.BR cuu1 ,
and
.BR cud1 .
These local cursor motions should not alter the text they pass over,
for example, you would not normally use \*(``\fBcuf1\fP=\ \*('' because the
space would erase the character moved over.
.PP
A very important point here is that the local cursor motions encoded
in
.I terminfo
are undefined at the left and top edges of a \s-1CRT\s0 terminal.
Programs should never attempt to backspace around the left edge,
unless
.B bw
is given,
and never attempt to go up locally off the top.
In order to scroll text up, a program will go to the bottom left corner
of the screen and send the
.B ind
(index) string.
.PP
To scroll text down, a program goes to the top left corner
of the screen and sends the
.B ri
(reverse index) string.
The strings
.B ind
and
.B ri
are undefined when not on their respective corners of the screen.
.PP
Parameterized versions of the scrolling sequences are
.B indn
and
.B rin
which have the same semantics as
.B ind
and
.B ri
except that they take one parameter, and scroll that many lines.
They are also undefined except at the appropriate edge of the screen.
.PP
The \fBam\fP capability tells whether the cursor sticks at the right
edge of the screen when text is output, but this does not necessarily
apply to a
.B cuf1
from the last column.
The only local motion which is defined from the left edge is if
.B bw
is given, then a
.B cub1
from the left edge will move to the right edge of the previous row.
If
.B bw
is not given, the effect is undefined.
This is useful for drawing a box around the edge of the screen, for example.
If the terminal has switch selectable automatic margins,
the
.I terminfo
file usually assumes that this is on; i.e., \fBam\fP.
If the terminal has a command which moves to the first column of the next
line, that command can be given as
.B nel
(newline).
It does not matter if the command clears the remainder of the current line,
so if the terminal has no
.B cr
and
.B lf
it may still be possible to craft a working
.B nel
out of one or both of them.
.PP
These capabilities suffice to describe
hard-copy and \*(``glass-tty\*('' terminals.
Thus the model 33 teletype is described as
.PP
.EX
.\".in -2
\s-133\||\|tty33\||\|tty\||\|model 33 teletype,
        bel=\*^G, cols#72, cr=\*^M, cud1=\*^J, hc, ind=\*^J, os,\s+1
.\".in +2
.EE
.PP
while the Lear Siegler \s-1ADM-3\s0 is described as
.PP
.EX
.\".in -2
\s-1adm3\||\|3\||\|lsi adm3,
        am, bel=\*^G, clear=\*^Z, cols#80, cr=\*^M, cub1=\*^H, cud1=\*^J,
        ind=\*^J, lines#24,\s+1
.\".in +2
.EE
.SS "Parameterized Strings"
Cursor addressing and other strings requiring parameters
in the terminal are described by a
parameterized string capability,
with \fIprintf\fP-like escapes such as \fI%x\fP in it.
For example, to address the cursor, the
.B cup
capability is given, using two parameters:
the row and column to address to.
(Rows and columns are numbered from zero and refer to the
physical screen visible to the user, not to any unseen memory.)
If the terminal has memory relative cursor addressing,
that can be indicated by
.BR mrcup .
.PP
The parameter mechanism uses a stack and special \fB%\fP codes
to manipulate it.
Typically a sequence will push one of the
parameters onto the stack and then print it in some format.
Print (e.g., \*(``%d\*('') is a special case.
Other operations, including \*(``%t\*('' pop their operand from the stack.
It is noted that more complex operations are often necessary,
e.g., in the \fBsgr\fP string.
.PP
The \fB%\fP encodings have the following meanings:
.TP 5
\fB%%\fP
outputs \*(``%\*(''
.TP
\fB%\fI[[\fR:\fI]flags][width[.precision]][\fBdoxXs\fI]\fR
as in \fBprintf\fP(3), flags are \fI[\-+#]\fP and \fIspace\fP.
Use a \*(``:\*('' to allow the next character to be a \*(``\-\*('' flag,
avoiding interpreting \*(``%\-\*('' as an operator.
.TP
\fB%c\fP
print \fIpop()\fP like %c in \fBprintf\fP
.TP
\fB%s\fP
print \fIpop()\fP like %s in \fBprintf\fP
.TP
\fB%p\fI[1\-9]\fR
push \fIi\fP'th parameter
.TP
\fB%P\fI[a\-z]\fR
set dynamic variable \fI[a\-z]\fP to \fIpop()\fP
.TP
\fB%g\fI[a\-z]\fR
get dynamic variable \fI[a\-z]\fP and push it
.TP
\fB%P\fI[A\-Z]\fR
set static variable \fI[a\-z]\fP to \fIpop()\fP
.TP
\fB%g\fI[A\-Z]\fR
get static variable \fI[a\-z]\fP and push it
.IP
The terms \*(``static\*('' and \*(``dynamic\*('' are misleading.
Historically, these are simply two different sets of variables,
whose values are not reset between calls to \fBtparm\fP(3X).
However, that fact is not documented in other implementations.
Relying on it will adversely impact portability to other implementations:
.RS
.bP
SVr2 curses supported \fIdynamic\fP variables.
Those are set only by a \fB%P\fP operator.
A \fB%g\fP for a given variable without first setting it with \fB%P\fP
will give unpredictable results, because dynamic variables are
an uninitialized local array on the stack in the \fBtparm\fP function.
.bP
SVr3.2 curses supported \fIstatic\fP variables.
Those are an array in the \fI\%TERMINAL\fP
structure (declared in \fBterm.h\fP),
and are zeroed automatically when the \fBsetupterm\fP function
allocates the data.
.bP
SVr4 curses made no further improvements
to the \fIdynamic/static\fP variable feature.
.bP
Solaris XPG4 curses does not distinguish between \fIdynamic\fP and
\fIstatic\fP variables.
They are the same.
Like SVr4 curses, XPG4 curses does not initialize these explicitly.
.bP
Before version 6.3,
\fI\%ncurses\fP stores both \fIdynamic\fP and \fIstatic\fP
variables in persistent storage, initialized to zeros.
.bP
Beginning with version 6.3,
\fI\%ncurses\fP stores \fIstatic\fP and \fIdynamic\fP
variables in the same manner as SVr4.
.RS
.bP
Unlike other implementations, \fI\%ncurses\fP zeros dynamic variables
before the first \fB%g\fP or \fB%P\fP operator.
.bP
Like SVr2,
the scope of dynamic variables in \fI\%ncurses\fP
is within the current call to
\fBtparm\fP.
Use static variables if persistent storage is needed.
.RE
.RE
.TP
\fB%\*'\fIc\fB\*'\fR
char constant \fIc\fP
.TP
\fB%{\fInn\fB}\fR
integer constant \fInn\fP
.TP
\fB%l\fP
push strlen(pop)
.TP
\fB%+\fP, \fB%\-\fP, \fB%*\fP, \fB%/\fP, \fB%m\fP
arithmetic (%m is \fImod\fP): \fIpush(pop() op pop())\fP
.TP
\fB%&\fP, \fB%|\fP, \fB%\*^\fP
bit operations (AND, OR and exclusive-OR): \fIpush(pop() op pop())\fP
.TP
\fB%=\fP, \fB%>\fP, \fB%<\fP
logical operations: \fIpush(pop() op pop())\fP
.TP
\fB%A\fP, \fB%O\fP
logical AND and OR operations (for conditionals)
.TP
\fB%!\fP, \fB%\*~\fP
unary operations (logical and bit complement): \fIpush(op pop())\fP
.TP
\fB%i\fP
add 1 to first two parameters (for ANSI terminals)
.TP
\fB%?\fP \fIexpr\fP \fB%t\fP \fIthenpart\fP \fB%e\fP \fIelsepart\fP \fB%;\fP
This forms an if-then-else.
The \fB%e\fP \fIelsepart\fP is optional.
Usually the \fB%?\fP \fIexpr\fP part pushes a value onto the stack,
and \fB%t\fP pops it from the stack, testing if it is nonzero (true).
If it is zero (false), control passes to the \fB%e\fP (else) part.
.IP
It is possible to form else-if's a la Algol 68:
.RS
\fB%?\fP c\d1\u \fB%t\fP b\d1\u \fB%e\fP c\d2\u \fB%t\fP b\d2\u \fB%e\fP c\d3\u \fB%t\fP b\d3\u \fB%e\fP c\d4\u \fB%t\fP b\d4\u \fB%e\fP \fB%;\fP
.RE
.IP
where c\di\u are conditions, b\di\u are bodies.
.IP
Use the \fB\-f\fP option of \fB@TIC@\fP or \fB@INFOCMP@\fP to see
the structure of if-then-else's.
Some strings, e.g., \fBsgr\fP can be very complicated when written
on one line.
The \fB\-f\fP option splits the string into lines with the parts indented.
.PP
Binary operations are in postfix form with the operands in the usual order.
That is, to get x\-5 one would use \*(``%gx%{5}%\-\*(''.
\fB%P\fP and \fB%g\fP variables are
persistent across escape-string evaluations.
.PP
Consider the HP2645, which, to get to row 3 and column 12, needs
to be sent \eE&a12c03Y padded for 6 milliseconds.
The order of the rows and columns is inverted here,
and the row and column are printed as two digits.
The corresponding terminal description is expressed thus:
.RS
cup=\eE&a%p2%dc%p1%dY$<6>,
.RE
.PP
The Microterm \s-1ACT-IV\s0 needs the current row and column sent
preceded by a \fB\*^T\fP, with the row and column simply encoded in binary,
.RS
cup=\*^T%p1%c%p2%c
.RE
.PP
Terminals which use \*(``%c\*('' need to be able to
backspace the cursor (\fBcub1\fP),
and to move the cursor up one line on the screen (\fBcuu1\fP).
This is necessary because it is not always safe to transmit \fB\en\fP
\fB\*^D\fP and \fB\er\fP, as the system may change or discard them.
(The library routines dealing with terminfo set tty modes so that
tabs are never expanded, so \et is safe to send.
This turns out to be essential for the Ann Arbor 4080.)
.PP
A final example is the \s-1LSI ADM\s0-3a, which uses row and column
offset by a blank character, thus
.RS
cup=\eE=%p1%\*' \*'%+%c%p2%\*' \*'%+%c
.RE
.PP
After sending \*(``\eE=\*('', this pushes the first parameter, pushes the
ASCII value for a space (32), adds them (pushing the sum on the stack
in place of the two previous values) and outputs that value as a character.
Then the same is done for the second parameter.
More complex arithmetic is possible using the stack.
.SS "Cursor Motions"
If the terminal has a fast way to home the cursor
(to very upper left corner of screen) then this can be given as
\fBhome\fP; similarly a fast way of getting to the lower left-hand corner
can be given as \fBll\fP; this may involve going up with \fBcuu1\fP
from the home position,
but a program should never do this itself (unless \fBll\fP does) because it
can make no assumption about the effect of moving up from the home position.
Note that the home position is the same as addressing to (0,0):
to the top left corner of the screen, not of memory.
(Thus, the \eEH sequence on HP terminals cannot be used for
.BR home .)
.PP
If the terminal has row or column absolute cursor addressing,
these can be given as single parameter capabilities
.B hpa
(horizontal position absolute)
and
.B vpa
(vertical position absolute).
Sometimes these are shorter than the more general two parameter
sequence (as with the hp2645) and can be used in preference to
.BR cup .
If there are parameterized local motions (e.g., move
.I n
spaces to the right) these can be given as
.BR cud ,
.BR cub ,
.BR cuf ,
and
.B cuu
with a single parameter indicating how many spaces to move.
These are primarily useful if the terminal does not have
.BR cup ,
such as the \s-1TEKTRONIX\s+1 4025.
.PP
If the terminal needs to be in a special mode when running
a program that uses these capabilities,
the codes to enter and exit this mode can be given
as \fBsmcup\fP and \fBrmcup\fP.
This arises, for example, from terminals like the Concept with more than
one page of memory.
If the terminal has only memory relative cursor addressing and not screen
relative cursor addressing, a one screen-sized window must be fixed into
the terminal for cursor addressing to work properly.
This is also used for the \s-1TEKTRONIX\s+1 4025,
where
.B smcup
sets the command character to be the one used by terminfo.
If the \fBsmcup\fP sequence will not restore the screen after an
\fBrmcup\fP sequence is output (to the state prior to outputting
\fBrmcup\fP), specify \fBnrrmc\fP.
.SS Margins
SVr4 (and X/Open Curses)
list several string capabilities for setting margins.
Two were intended for use with terminals,
and another six were intended for use with printers.
.bP
The two terminal capabilities assume that the terminal may have
the capability of setting the left and/or right margin at the current
cursor column position.
.bP
The printer capabilities assume that the printer may have
two types of capability:
.RS
.bP
the ability to set a top and/or bottom margin using the current
line position, and
.bP
parameterized capabilities for setting the top, bottom, left, right margins
given the number of rows or columns.
.RE
.PP
In practice, the categorization into \*(``terminal\*('' and \*(``printer\*(''
is not suitable:
.bP
The AT&T SVr4 terminal database uses \fBsmgl\fP four times,
for AT&T hardware.
.IP
Three of the four are printers.
They lack the ability to set left/right margins by specifying the column.
.bP
Other (non-AT&T) terminals may support margins
but using different assumptions from AT&T.
.IP
For instance, the DEC VT420 supports left/right margins,
but only using a column parameter.
As an added complication, the VT420 uses two settings to fully enable
left/right margins (left/right margin mode, and origin mode).
The former enables the margins, which causes printed text
to wrap within margins, but the latter is needed to prevent
cursor-addressing outside those margins.
.bP
Both DEC VT420 left/right margins are set with a single control sequence.
If either is omitted, the corresponding margin is set to the left or
right edge of the display (rather than leaving the margin unmodified).
.PP
These are the margin-related capabilities:
.PP
.TS
center;
lb lb
lb l .
Name	Description
_
smgl	Set left margin at current column
smgr	Set right margin at current column
smgb	Set bottom margin at current line
smgt	Set top margin at current line
smgbp	Set bottom margin at line \fIN\fP
smglp	Set left margin at column \fIN\fP
smgrp	Set right margin at column \fIN\fP
smgtp	Set top margin at line \fIN\fP
smglr	Set both left and right margins to \fIL\fP and \fIR\fP
smgtb	Set both top and bottom margins to \fIT\fP and \fIB\fP
.TE
.PP
When writing an application that
uses these string capabilities,
the pairs should be first checked to see
if each capability in the pair is set or only one is set:
.bP
If both \fBsmglp\fP and \fBsmgrp\fP are set,
each is used with a single argument, \fIN\fP,
that gives the column number of the left and right margin, respectively.
.bP
If both \fBsmgtp\fP and \fBsmgbp\fP are set,
each is used to set the top and bottom margin,
respectively:
.RS 4
.bP
\fBsmgtp\fP is used with a single argument, \fIN\fP,
the line number of the top margin.
.bP
\fBsmgbp\fP is used with two arguments, \fIN\fP and \fIM\fP,
that give the line number of the bottom margin,
the first counting from the top of the
page and the second counting from the bottom.
This accommodates the two styles of specifying
the bottom margin in different manufacturers' printers.
.RE
.IP
When designing a terminfo entry for a
printer that has a settable bottom margin,
only the first or second argument should be used, depending on the printer.
When developing an application that uses \fBsmgbp\fP to set the bottom margin,
both arguments must be given.
.PP
Conversely, when only one capability in the pair is set:
.bP
If only one of \fBsmglp\fP and \fBsmgrp\fP is set,
then it is used with two arguments,
the column number of the left and right margins, in that order.
.bP
Likewise, if only one of \fBsmgtp\fP and \fBsmgbp\fP is set, then it
is used with two arguments that give the top and bottom margins,
in that order, counting from the top of the page.
.IP
When designing a terminfo entry for a printer that requires setting both
left and right or top and bottom margins simultaneously,
only one capability in the pairs
\fBsmglp\fP and \fBsmgrp\fP or
\fBsmgtp\fP and \fBsmgbp\fP should be defined,
leaving the other unset.
.PP
Except for very old terminal descriptions, e.g., those developed for SVr4,
the scheme just described should be considered obsolete.
An improved set of capabilities was added late in the SVr4 releases
(\fBsmglr\fP and \fBsmgtb\fP),
which explicitly use two parameters for setting the left/right or top/bottom
margins.
.PP
When setting margins, the line- and column-values are zero-based.
.PP
The \fBmgc\fP string capability should be defined.
Applications such as \fBtabs\fP(1) rely upon this to reset all margins.
.\"
.SS "Area Clears"
If the terminal can clear from the current position to the end of the
line, leaving the cursor where it is, this should be given as \fBel\fP.
If the terminal can clear from the beginning of the line to the current
position inclusive, leaving
the cursor where it is, this should be given as \fBel1\fP.
If the terminal can clear from the current position to the end of the
display, then this should be given as \fBed\fP.
\fBEd\fP is only defined from the first column of a line.
(Thus, it can be simulated by a request to delete a large number of lines,
if a true
.B ed
is not available.)
.\"
.SS "Insert/Delete Line and Vertical Motions"
If the terminal can open a new blank line before the line where the cursor
is, this should be given as \fBil1\fP; this is done only from the first
position of a line.
The cursor must then appear on the newly blank line.
If the terminal can delete the line which the cursor is on, then this
should be given as \fBdl1\fP; this is done only from the first position on
the line to be deleted.
Versions of
.B il1
and
.B dl1
which take a single parameter and insert or delete that many lines can
be given as
.B il
and
.BR dl .
.PP
If the terminal has a settable scrolling region (like the vt100)
the command to set this can be described with the
.B csr
capability, which takes two parameters:
the top and bottom lines of the scrolling region.
The cursor position is, alas, undefined after using this command.
.PP
It is possible to get the effect of insert or delete line using
.B csr
on a properly chosen region; the
.B sc
and
.B rc
(save and restore cursor) commands may be useful for ensuring that
your synthesized insert/delete string does not move the cursor.
(Note that the \fB\%ncurses\fP(3X) library does this synthesis
automatically, so you need not compose insert/delete strings for
an entry with \fBcsr\fP).
.PP
Yet another way to construct insert and delete might be to use a combination of
index with the memory-lock feature found on some terminals (like the HP-700/90
series, which however also has insert/delete).
.PP
Inserting lines at the top or bottom of the screen can also be
done using
.B ri
or
.B ind
on many terminals without a true insert/delete line,
and is often faster even on terminals with those features.
.PP
The Boolean \fBnon_dest_scroll_region\fP should be set if each scrolling
window is effectively a view port on a screen-sized canvas.
To test for
this capability, create a scrolling region in the middle of the screen,
write something to the bottom line, move the cursor to the top of the region,
and do \fBri\fP followed by \fBdl1\fP or \fBind\fP.
If the data scrolled
off the bottom of the region by the \fBri\fP re-appears, then scrolling
is non-destructive.
System V and X/Open Curses expect that \fBind\fP, \fBri\fP,
\fBindn\fP, and \fBrin\fP will simulate destructive scrolling; their
documentation cautions you not to define \fBcsr\fP unless this is true.
This \fBcurses\fP implementation is more liberal and will do explicit erases
after scrolling if \fBndsrc\fP is defined.
.PP
If the terminal has the ability to define a window as part of
memory, which all commands affect,
it should be given as the parameterized string
.BR wind .
The four parameters are the starting and ending lines in memory
and the starting and ending columns in memory, in that order.
.PP
If the terminal can retain display memory above, then the
\fBda\fP capability should be given; if display memory can be retained
below, then \fBdb\fP should be given.
These indicate
that deleting a line or scrolling may bring non-blank lines up from below
or that scrolling back with \fBri\fP may bring down non-blank lines.
.SS "Insert/Delete Character"
There are two basic kinds of intelligent terminals with respect to
insert/delete character which can be described using
.IR terminfo .
The most common insert/delete character operations affect only the characters
on the current line and shift characters off the end of the line rigidly.
Other terminals, such as the Concept 100 and the Perkin Elmer Owl, make
a distinction between typed and untyped blanks on the screen, shifting
upon an insert or delete only to an untyped blank on the screen which is
either eliminated, or expanded to two untyped blanks.
.PP
You can determine the
kind of terminal you have by clearing the screen and then typing
text separated by cursor motions.
Type \*(``abc\ \ \ \ def\*('' using local
cursor motions (not spaces) between the \*(``abc\*('' and the \*(``def\*(''.
Then position the cursor before the \*(``abc\*('' and put the terminal in insert
mode.
If typing characters causes the rest of the line to shift
rigidly and characters to fall off the end, then your terminal does
not distinguish between blanks and untyped positions.
If the \*(``abc\*(''
shifts over to the \*(``def\*('' which then move together around the end of the
current line and onto the next as you insert, you have the second type of
terminal, and should give the capability \fBin\fP, which stands for
\*(``insert null\*(''.
.PP
While these are two logically separate attributes (one line versus multi-line
insert mode, and special treatment of untyped spaces) we have seen no
terminals whose insert mode cannot be described with the single attribute.
.PP
Terminfo can describe both terminals which have an insert mode, and terminals
which send a simple sequence to open a blank position on the current line.
Give as \fBsmir\fP the sequence to get into insert mode.
Give as \fBrmir\fP the sequence to leave insert mode.
Now give as \fBich1\fP any sequence needed to be sent just before sending
the character to be inserted.
Most terminals with a true insert mode
will not give \fBich1\fP; terminals which send a sequence to open a screen
position should give it here.
.PP
If your terminal has both, insert mode is usually preferable to \fBich1\fP.
Technically, you should not give both unless the terminal actually requires
both to be used in combination.
Accordingly, some non-curses applications get
confused if both are present; the symptom is doubled characters in an update
using insert.
This requirement is now rare; most \fBich\fP sequences do not
require previous smir, and most smir insert modes do not require \fBich1\fP
before each character.
Therefore, the new \fBcurses\fP actually assumes this
is the case and uses either \fBrmir\fP/\fBsmir\fP or \fBich\fP/\fBich1\fP as
appropriate (but not both).
If you have to write an entry to be used under
new curses for a terminal old enough to need both, include the
\fBrmir\fP/\fBsmir\fP sequences in \fBich1\fP.
.PP
If post insert padding is needed, give this as a number of milliseconds
in \fBip\fP (a string option).
Any other sequence which may need to be
sent after an insert of a single character may also be given in \fBip\fP.
If your terminal needs both to be placed into an \*(``insert mode\*('' and
a special code to precede each inserted character, then both
.BR smir / rmir
and
.B ich1
can be given, and both will be used.
The
.B ich
capability, with one parameter,
.IR n ,
will repeat the effects of
.B ich1
.I n
times.
.PP
If padding is necessary between characters typed while not
in insert mode, give this as a number of milliseconds padding in \fBrmp\fP.
.PP
It is occasionally necessary to move around while in insert mode
to delete characters on the same line (e.g., if there is a tab after
the insertion position).
If your terminal allows motion while in
insert mode you can give the capability \fBmir\fP to speed up inserting
in this case.
Omitting \fBmir\fP will affect only speed.
Some terminals
(notably Datamedia's) must not have \fBmir\fP because of the way their
insert mode works.
.PP
Finally, you can specify
.B dch1
to delete a single character,
.B dch
with one parameter,
.IR n ,
to delete
.IR n "characters,"
and delete mode by giving \fBsmdc\fP and \fBrmdc\fP
to enter and exit delete mode (any mode the terminal needs to be placed
in for
.B dch1
to work).
.PP
A command to erase
.I n
characters (equivalent to outputting
.I n
blanks without moving the cursor)
can be given as
.B ech
with one parameter.
.SS "Highlighting, Underlining, and Visible Bells"
If your terminal has one or more kinds of display attributes,
these can be represented in a number of different ways.
You should choose one display form as
\f2standout mode\fP,
representing a good, high contrast, easy-on-the-eyes,
format for highlighting error messages and other attention getters.
(If you have a choice, reverse video plus half-bright is good,
or reverse video alone.)
The sequences to enter and exit standout mode
are given as \fBsmso\fP and \fBrmso\fP, respectively.
If the code to change into or out of standout
mode leaves one or even two blank spaces on the screen,
as the TVI 912 and Teleray 1061 do,
then \fBxmc\fP should be given to tell how many spaces are left.
.PP
Codes to begin underlining and end underlining can be given as \fBsmul\fP
and \fBrmul\fP respectively.
If the terminal has a code to underline the current character and move
the cursor one space to the right,
such as the Microterm Mime,
this can be given as \fBuc\fP.
.PP
Other capabilities to enter various highlighting modes include
.B blink
(blinking)
.B bold
(bold or extra bright)
.B dim
(dim or half-bright)
.B invis
(blanking or invisible text)
.B prot
(protected)
.B rev
(reverse video)
.B sgr0
(turn off
.I all
attribute modes)
.B smacs
(enter alternate character set mode)
and
.B rmacs
(exit alternate character set mode).
Turning on any of these modes singly may or may not turn off other modes.
.PP
If there is a sequence to set arbitrary combinations of modes,
this should be given as
.B sgr
(set attributes),
taking 9 parameters.
Each parameter is either zero (0) or nonzero,
as the corresponding attribute is on or off.
The 9 parameters are, in order:
standout, underline, reverse, blink, dim, bold, blank, protect, alternate
character set.
Not all modes need be supported by
.BR sgr ,
only those for which corresponding separate attribute commands exist.
.PP
For example, the DEC vt220 supports most of the modes:
.PP
.TS
center;
lb lb lb
l  l  l .
tparm Parameter	Attribute	Escape Sequence
_
none	none	\eE[0m
p1	standout	\eE[0;1;7m
p2	underline	\eE[0;4m
p3	reverse	\eE[0;7m
p4	blink	\eE[0;5m
p5	dim	not available
p6	bold	\eE[0;1m
p7	invis	\eE[0;8m
p8	protect	not used
p9	altcharset	\*^O (off) \*^N (on)
.TE
.PP
We begin each escape sequence by turning off any existing modes, since
there is no quick way to determine whether they are active.
Standout is set up to be the combination of reverse and bold.
The vt220 terminal has a protect mode,
though it is not commonly used in sgr
because it protects characters on the screen from the host's erasures.
The altcharset mode also is different in that it is either \*^O or \*^N,
depending on whether it is off or on.
If all modes are turned on, the resulting sequence is \eE[0;1;4;5;7;8m\*^N.
.PP
Some sequences are common to different modes.
For example, ;7 is output when either p1 or p3 is true, that is, if
either standout or reverse modes are turned on.
.PP
Writing out the above sequences, along with their dependencies yields
.PP
.ne 11
.TS
center;
lb lb lb
l  l  l .
Sequence	When to Output	terminfo Translation
_
\eE[0	always	\eE[0
;1	if p1 or p6	%?%p1%p6%|%t;1%;
;4	if p2	%?%p2%|%t;4%;
;5	if p4	%?%p4%|%t;5%;
;7	if p1 or p3	%?%p1%p3%|%t;7%;
;8	if p7	%?%p7%|%t;8%;
m	always	m
\*^N or \*^O	if p9 \*^N, else \*^O	%?%p9%t\*^N%e\*^O%;
.TE
.PP
Putting this all together into the sgr sequence gives:
.PP
.EX
    sgr=\eE[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p4%t;5%;
        %?%p1%p3%|%t;7%;%?%p7%t;8%;m%?%p9%t\e016%e\e017%;,
.EE
.PP
Remember that if you specify sgr, you must also specify sgr0.
Also, some implementations rely on sgr being given if sgr0 is,
Not all terminfo entries necessarily have an sgr string, however.
Many terminfo entries are derived from termcap entries
which have no sgr string.
The only drawback to adding an sgr string is that termcap also
assumes that sgr0 does not exit alternate character set mode.
.PP
Terminals with the \*(``magic cookie\*('' glitch
.RB ( xmc )
deposit special \*(``cookies\*('' when they receive mode-setting sequences,
which affect the display algorithm rather than having extra bits for
each character.
Some terminals, such as the HP 2621, automatically leave standout
mode when they move to a new line or the cursor is addressed.
Programs using standout mode should exit standout mode before
moving the cursor or sending a newline,
unless the
.B msgr
capability, asserting that it is safe to move in standout mode, is present.
.PP
If the terminal has
a way of flashing the screen to indicate an error quietly (a bell replacement)
then this can be given as \fBflash\fP; it must not move the cursor.
.PP
If the cursor needs to be made more visible than normal when it is
not on the bottom line (to make, for example, a non-blinking underline into an
easier to find block or blinking underline)
give this sequence as
.BR cvvis .
If there is a way to make the cursor completely invisible, give that as
.BR civis .
The capability
.B cnorm
should be given which undoes the effects of both of these modes.
.PP
If your terminal correctly generates underlined characters
(with no special codes needed)
even though it does not overstrike,
then you should give the capability \fBul\fP.
If a character overstriking another leaves both characters on the screen,
specify the capability \fBos\fP.
If overstrikes are erasable with a blank,
then this should be indicated by giving \fBeo\fP.
.SS "Keypad and Function Keys"
If the terminal has a keypad that transmits codes when the keys are pressed,
this information can be given.
Note that it is not possible to handle
terminals where the keypad only works in local (this applies, for example,
to the unshifted HP 2621 keys).
If the keypad can be set to transmit or not transmit,
give these codes as \fBsmkx\fP and \fBrmkx\fP.
Otherwise the keypad is assumed to always transmit.
.PP
The codes sent by the left arrow, right arrow, up arrow, down arrow,
and home keys can be given as
\fBkcub1, kcuf1, kcuu1, kcud1, \fRand\fB khome\fP respectively.
If there are function keys such as f0, f1, ..., f10, the codes they send
can be given as \fBkf0, kf1, ..., kf10\fP.
If these keys have labels other than the default f0 through f10, the labels
can be given as \fBlf0, lf1, ..., lf10\fP.
.PP
The codes transmitted by certain other special keys can be given:
.bP
.B kll
(home down),
.bP
.B kbs
(backspace),
.bP
.B ktbc
(clear all tabs),
.bP
.B kctab
(clear the tab stop in this column),
.bP
.B kclr
(clear screen or erase key),
.bP
.B kdch1
(delete character),
.bP
.B kdl1
(delete line),
.bP
.B krmir
(exit insert mode),
.bP
.B kel
(clear to end of line),
.bP
.B ked
(clear to end of screen),
.bP
.B kich1
(insert character or enter insert mode),
.bP
.B kil1
(insert line),
.bP
.B knp
(next page),
.bP
.B kpp
(previous page),
.bP
.B kind
(scroll forward/down),
.bP
.B kri
(scroll backward/up),
.bP
.B khts
(set a tab stop in this column).
.PP
In addition, if the keypad has a 3 by 3 array of keys including the four
arrow keys, the other five keys can be given as
.BR ka1 ,
.BR ka3 ,
.BR kb2 ,
.BR kc1 ,
and
.BR kc3 .
These keys are useful when the effects of a 3 by 3 directional pad are needed.
.PP
Strings to program function keys can be given as
.BR pfkey ,
.BR pfloc ,
and
.BR pfx .
A string to program screen labels should be specified as \fBpln\fP.
Each of these strings takes two parameters: the function key number to
program (from 0 to 10) and the string to program it with.
Function key numbers out of this range may program undefined keys in
a terminal dependent manner.
The difference between the capabilities is that
.B pfkey
causes pressing the given key to be the same as the user typing the
given string;
.B pfloc
causes the string to be executed by the terminal in local; and
.B pfx
causes the string to be transmitted to the computer.
.PP
The capabilities \fBnlab\fP, \fBlw\fP and \fBlh\fP
define the number of programmable
screen labels and their width and height.
If there are commands to turn the labels on and off,
give them in \fBsmln\fP and \fBrmln\fP.
\fBsmln\fP is normally output after one or more pln
sequences to make sure that the change becomes visible.
.SS "Tabs and Initialization"
A few capabilities are used only for tabs:
.bP
If the terminal has hardware tabs, the command to advance to the next
tab stop can be given as
.B ht
(usually control/I).
.bP
A \*(``back-tab\*('' command which moves leftward to the preceding tab stop can
be given as
.BR cbt .
.IP
By convention, if the teletype modes indicate that tabs are being
expanded by the computer rather than being sent to the terminal,
programs should not use
.B ht
or
.B cbt
even if they are present, since the user may not have the tab stops
properly set.
.bP
If the terminal has hardware tabs which are initially set every
.I n
spaces when the terminal is powered up,
the numeric parameter
.B it
is given, showing the number of spaces the tabs are set to.
.IP
The \fBit\fP capability is normally used by the \fB@TSET@\fP
command to determine whether to set the mode for hardware tab expansion,
and whether to set the tab stops.
If the terminal has tab stops that can be saved in non-volatile memory,
the terminfo description can assume that they are properly set.
.PP
Other capabilities
include
.bP
.BR is1 ,
.BR is2 ,
and
.BR is3 ,
initialization strings for the terminal,
.bP
.BR iprog ,
the path name of a program to be run to initialize the terminal,
.bP
and \fBif\fP, the name of a file containing long initialization strings.
.PP
These strings are expected to set the terminal into modes consistent
with the rest of the terminfo description.
They are normally sent to the terminal, by the
.I init
option of the \fB@TPUT@\fP program, each time the user logs in.
They will be printed in the following order:
.RS
.TP
run the program
.B iprog
.TP
output
.br
\fBis1\fP and
.br
\fBis2\fP
.TP
set the margins using
\fBmgc\fP or
.br
\fBsmglp\fP and \fBsmgrp\fP or
.br
\fBsmgl\fP and \fBsmgr\fP
.TP
set tabs using
.B tbc
and
.B hts
.TP
print the file
\fBif\fP
.TP
and finally output
\fBis3\fP.
.RE
.PP
Most initialization is done with
.BR is2 .
Special terminal modes can be set up without duplicating strings
by putting the common sequences in
.B is2
and special cases in
.B is1
and
.BR is3 .
.PP
A set of sequences that does a harder reset from a totally unknown state
can be given as
.BR rs1 ,
.BR rs2 ,
.B rf
and
.BR rs3 ,
analogous to
.B is1 ,
.B is2 ,
.B if
and
.B is3
respectively.
These strings are output
by \fIreset\fP option of \fB@TPUT@\fP,
or by the \fB@RESET@\fP program
(an alias of \fB@TSET@\fP),
which is used when the terminal gets into a wedged state.
Commands are normally placed in
.BR rs1 ,
.B rs2
.B rs3
and
.B rf
only if they produce annoying effects on the screen and are not
necessary when logging in.
For example, the command to set the vt100 into 80-column mode would
normally be part of
.BR is2 ,
but it causes an annoying glitch of the screen and is not normally
needed since the terminal is usually already in 80-column mode.
.PP
The \fB@RESET@\fP program writes strings including
.BR iprog ,
etc., in the same order as the
.I init
program, using
.BR rs1 ,
etc., instead of
.BR is1 ,
etc.
If any of
.BR rs1 ,
.BR rs2 ,
.BR rs3 ,
or
.B rf
reset capability strings are missing,
the \fB@RESET@\fP program
falls back upon the corresponding initialization capability string.
.PP
If there are commands to set and clear tab stops, they can be given as
.B tbc
(clear all tab stops)
and
.B hts
(set a tab stop in the current column of every row).
If a more complex sequence is needed to set the tabs than can be
described by this, the sequence can be placed in
.B is2
or
.BR if .
.PP
The \fB@TPUT@ reset\fP command uses the same capability strings
as the \fB@RESET@\fP command,
although the two programs (\fB@TPUT@\fP and \fB@RESET@\fP)
provide different command-line options.
.PP
In practice, these terminfo capabilities are not often used in
initialization of tabs
(though they are required for the \fB@TABS@\fP program):
.bP
Almost all hardware terminals (at least those which supported tabs)
initialized those to every \fIeight\fP columns:
.IP
The only exception was the AT&T 2300 series,
which set tabs to every \fIfive\fP columns.
.bP
In particular, developers of the hardware terminals which are commonly used
as models for modern terminal emulators provided documentation demonstrating
that \fIeight\fP columns were the standard.
.bP
Because of this, the terminal initialization programs
\fB@TPUT@\fP and \fB@TSET@\fP
use the
\fBtbc\fP (\fBclear_all_tabs\fP) and
\fBhts\fP (\fBset_tab\fP) capabilities directly
only when the \fBit\fP (\fBinit_tabs\fP) capability
is set to a value other than \fIeight\fP.
.SS "Delays and Padding"
Many older and slower terminals do not support either XON/XOFF or DTR
handshaking, including hard copy terminals and some very archaic CRTs
(including, for example, DEC VT100s).
These may require padding characters
after certain cursor motions and screen changes.
.PP
If the terminal uses xon/xoff handshaking for flow control (that is,
it automatically emits \*^S back to the host when its input buffers are
close to full), set
.BR xon .
This capability suppresses the emission of padding.
You can also set it
for memory-mapped console devices effectively that do not have a speed limit.
Padding information should still be included so that routines can
make better decisions about relative costs, but actual pad characters will
not be transmitted.
.PP
If \fBpb\fP (padding baud rate) is given, padding is suppressed at baud rates
below the value of \fBpb\fP.
If the entry has no padding baud rate, then
whether padding is emitted or not is completely controlled by \fBxon\fP.
.PP
If the terminal requires other than a null (zero) character as a pad,
then this can be given as \fBpad\fP.
Only the first character of the
.B pad
string is used.
.SS "Status Lines"
Some terminals have an extra \*(``status line\*('' which is not normally used by
software (and thus not counted in the terminal's \fBlines\fP capability).
.PP
The simplest case is a status line which is cursor-addressable but not
part of the main scrolling region on the screen; the Heathkit H19 has
a status line of this kind, as would a 24-line VT100 with a 23-line
scrolling region set up on initialization.
This situation is indicated
by the \fBhs\fP capability.
.PP
Some terminals with status lines need special sequences to access the
status line.
These may be expressed as a string with single parameter
\fBtsl\fP which takes the cursor to a given zero-origin column on the
status line.
The capability \fBfsl\fP must return to the main-screen
cursor positions before the last \fBtsl\fP.
You may need to embed the
string values of \fBsc\fP (save cursor) and \fBrc\fP (restore cursor)
in \fBtsl\fP and \fBfsl\fP to accomplish this.
.PP
The status line is normally assumed to be the same width as the width
of the terminal.
If this is untrue, you can specify it with the numeric
capability \fBwsl\fP.
.PP
A command to erase or blank the status line may be specified as \fBdsl\fP.
.PP
The Boolean capability \fBeslok\fP specifies that escape sequences, tabs,
etc., work ordinarily in the status line.
.PP
The \fI\%ncurses\fP implementation does not yet use any of these
capabilities.
They are documented here in case they ever become important.
.SS "Line Graphics"
Many terminals have alternate character sets useful for forms-drawing.
Terminfo and \fBcurses\fP have built-in support
for most of the drawing characters
supported by the VT100, with some characters from the AT&T 4410v1 added.
This alternate character set may be specified by the \fBacsc\fP capability.
.PP
.TS
center;
Lb  Cb  S  L   Lb
Lb2 Lb2 Lb Lb1 S
Lb  L   C  Lb  Lx.
\&	acsc	\&	\&
ACS Name	Value	Symbol	ASCII Fallback / Glyph Name
_
ACS_RARROW	0x2b	+	>	arrow pointing right
ACS_LARROW	0x2c	,	<	arrow pointing left
ACS_UARROW	0x2d	\-	\*^	arrow pointing up
ACS_DARROW	0x2e	.	v	arrow pointing down
ACS_BLOCK	0x30	0	#	solid square block
ACS_DIAMOND	0x60	\(ga	+	diamond
ACS_CKBOARD	0x61	a	:	checker board (stipple)
ACS_DEGREE	0x66	f	\e	degree symbol
ACS_PLMINUS	0x67	g	#	plus/minus
ACS_BOARD	0x68	h	#	board of squares
ACS_LANTERN	0x69	i	#	lantern symbol
ACS_LRCORNER	0x6a	j	+	lower right corner
ACS_URCORNER	0x6b	k	+	upper right corner
ACS_ULCORNER	0x6c	l	+	upper left corner
ACS_LLCORNER	0x6d	m	+	lower left corner
ACS_PLUS	0x6e	n	+	large plus or crossover
ACS_S1	0x6f	o	\*~	scan line 1
ACS_S3	0x70	p	\-	scan line 3
ACS_HLINE	0x71	q	\-	horizontal line
ACS_S7	0x72	r	\-	scan line 7
ACS_S9	0x73	s	\&_	scan line 9
ACS_LTEE	0x74	t	+	tee pointing right
ACS_RTEE	0x75	u	+	tee pointing left
ACS_BTEE	0x76	v	+	tee pointing up
ACS_TTEE	0x77	w	+	tee pointing down
ACS_VLINE	0x78	x	|	vertical line
ACS_LEQUAL	0x79	y	<	less-than-or-equal-to
ACS_GEQUAL	0x7a	z	>	greater-than-or-equal-to
ACS_PI	0x7b	{	*	greek pi
ACS_NEQUAL	0x7c	|	!	not-equal
ACS_STERLING	0x7d	}	f	UK pound sign
ACS_BULLET	0x7e	\*~	o	bullet
.TE
.PP
A few notes apply to the table itself:
.bP
X/Open Curses incorrectly states that the mapping for \fIlantern\fP is
uppercase \*(``I\*('' although Unix implementations use the
lowercase \*(``i\*('' mapping.
.bP
The DEC VT100 implemented graphics using the alternate character set
feature, temporarily switching \fImodes\fP and sending characters
in the range 0x60 (96) to 0x7e (126)
(the \fBacsc Value\fP column in the table).
.bP
The AT&T terminal added graphics characters outside that range.
.IP
Some of the characters within the range do not match the VT100;
presumably they were used in the AT&T terminal:
\fIboard of squares\fP replaces the VT100 \fInewline\fP symbol, while
\fIlantern symbol\fP replaces the VT100 \fIvertical tab\fP symbol.
The other VT100 symbols for control characters (\fIhorizontal tab\fP,
\fIcarriage return\fP and \fIline-feed\fP) are not (re)used in curses.
.PP
The best way to define a new device's graphics set is to add a column
to a copy of this table for your terminal, giving the character which
(when emitted between \fBsmacs\fP/\fBrmacs\fP switches) will be rendered
as the corresponding graphic.
Then read off the VT100/your terminal
character pairs right to left in sequence; these become the ACSC string.
.SS "Color Handling"
The curses library functions \fBinit_pair\fP and \fBinit_color\fP
manipulate the \fIcolor pairs\fP and \fIcolor values\fP discussed in this
section
(see \fBcurs_color\fP(3X) for details on these and related functions).
.PP
Most color terminals are either \*(``Tektronix-like\*('' or \*(``HP-like\*('':
.bP
Tektronix-like
terminals have a predefined set of \fIN\fP colors
(where \fIN\fP is usually 8),
and can set
character-cell foreground and background characters independently, mixing them
into \fIN\fP\ *\ \fIN\fP color pairs.
.bP
On HP-like terminals, the user must set each color
pair up separately (foreground and background are not independently settable).
Up to \fIM\fP color pairs may be set up from 2*\fIM\fP different colors.
ANSI-compatible terminals are Tektronix-like.
.PP
Some basic color capabilities are independent of the color method.
The numeric
capabilities \fBcolors\fP and \fBpairs\fP specify the maximum numbers of colors
and color pairs that can be displayed simultaneously.
The \fBop\fP (original
pair) string resets foreground and background colors to their default values
for the terminal.
The \fBoc\fP string resets all colors or color pairs to
their default values for the terminal.
Some terminals (including many PC
terminal emulators) erase screen areas with the current background color rather
than the power-up default background; these should have the Boolean capability
\fBbce\fP.
.PP
While the curses library works with \fIcolor pairs\fP
(reflecting the inability of some devices to set foreground
and background colors independently),
there are separate capabilities for setting these features:
.bP
To change the current foreground or background color on a Tektronix-type
terminal, use \fBsetaf\fP (set ANSI foreground) and \fBsetab\fP (set ANSI
background) or \fBsetf\fP (set foreground) and \fBsetb\fP (set background).
These take one parameter, the color number.
The SVr4 documentation describes
only \fBsetaf\fP/\fBsetab\fP; the XPG4 draft says that "If the terminal
supports ANSI escape sequences to set background and foreground, they should
be coded as \fBsetaf\fP and \fBsetab\fP, respectively.
.bP
If the terminal
supports other escape sequences to set background and foreground, they should
be coded as \fBsetf\fP and \fBsetb\fP, respectively.
The \fBvidputs\fP and the \fBrefresh\fP(3X) functions
use the \fBsetaf\fP and \fBsetab\fP capabilities if they are defined.
.PP
The \fBsetaf\fP/\fBsetab\fP and \fBsetf\fP/\fBsetb\fP capabilities take a
single numeric argument each.
Argument values 0-7 of \fBsetaf\fP/\fBsetab\fP are portably defined as
follows (the middle column is the symbolic #define available in the header for
the \fBcurses\fP or \fI\%ncurses\fP libraries).
The terminal hardware is free to
map these as it likes, but the RGB values indicate normal locations in color
space.
.PP
.TS
center;
cb cb cb cb s  s
l  lb c  l1 l1 l .
Color	#define 	Value	RGB
_
black	COLOR_BLACK	0	0,	0,	0
red	COLOR_RED	1	max,	0,	0
green	COLOR_GREEN	2	0,	max,	0
yellow	COLOR_YELLOW	3	max,	max,	0
blue	COLOR_BLUE	4	0,	0,	max
magenta	COLOR_MAGENTA	5	max,	0,	max
cyan	COLOR_CYAN	6	0,	max,	max
white	COLOR_WHITE	7	max,	max,	max
.TE
.br
.if t .ne 6v
.PP
The argument values of \fBsetf\fP/\fBsetb\fP historically correspond to
a different mapping, i.e.,
.PP
.TS
center;
cb cb cb cb s  s
l  lb c  l1 l1 l .
Color	#define 	Value	RGB
_
black	COLOR_BLACK	0	0,	0,	0
blue	COLOR_BLUE	1	0,	0,	max
green	COLOR_GREEN	2	0,	max,	0
cyan	COLOR_CYAN	3	0,	max,	max
red	COLOR_RED	4	max,	0,	0
magenta	COLOR_MAGENTA	5	max,	0,	max
yellow	COLOR_YELLOW	6	max,	max,	0
white	COLOR_WHITE	7	max,	max,	max
.TE
.PP
It is important to not confuse the two sets of color capabilities;
otherwise red/blue will be interchanged on the display.
.PP
On an HP-like terminal, use \fBscp\fP with a color pair number parameter to set
which color pair is current.
.PP
Some terminals allow the \fIcolor values\fP to be modified:
.bP
On a Tektronix-like terminal, the capability \fBccc\fP may be present to
indicate that colors can be modified.
If so, the \fBinitc\fP capability will
take a color number (0 to \fBcolors\fP \- 1)and three more parameters which
describe the color.
These three parameters default to being interpreted as RGB
(Red, Green, Blue) values.
If the Boolean capability \fBhls\fP is present,
they are instead as HLS (Hue, Lightness, Saturation) indices.
The ranges are
terminal-dependent.
.bP
On an HP-like terminal, \fBinitp\fP may give a capability for changing a
color pair value.
It will take seven parameters; a color pair number (0 to
\fBmax_pairs\fP \- 1), and two triples describing first background and then
foreground colors.
These parameters must be (Red, Green, Blue) or
(Hue, Lightness, Saturation) depending on \fBhls\fP.
.PP
On some color terminals, colors collide with highlights.
You can register
these collisions with the \fBncv\fP capability.
This is a bit mask of
attributes not to be used when colors are enabled.
The correspondence with the
attributes understood by \fBcurses\fP is as follows:
.PP
.TS
center;
cb cb cb cb
lb n  n  lb.
Attribute	Bit	Decimal	Set by
_
A_STANDOUT	0	1	sgr
A_UNDERLINE	1	2	sgr
A_REVERSE	2	4	sgr
A_BLINK	3	8	sgr
A_DIM	4	16	sgr
A_BOLD	5	32	sgr
A_INVIS	6	64	sgr
A_PROTECT	7	128	sgr
A_ALTCHARSET	8	256	sgr
A_HORIZONTAL	9	512	sgr1
A_LEFT	10	1024	sgr1
A_LOW	11	2048	sgr1
A_RIGHT	12	4096	sgr1
A_TOP	13	8192	sgr1
A_VERTICAL	14	16384	sgr1
A_ITALIC	15	32768	sitm
.TE
.PP
For example, on many IBM PC consoles, the underline attribute collides with the
foreground color blue and is not available in color mode.
These should have
an \fBncv\fP capability of 2.
.PP
SVr4 curses does nothing with \fBncv\fP,
\fI\%ncurses\fP recognizes it and optimizes
the output in favor of colors.
.SS Miscellaneous
If the terminal requires other than a null (zero) character as a pad, then this
can be given as pad.
Only the first character of the pad string is used.
If the terminal does not have a pad character, specify npc.
Note that \fI\%ncurses\fP implements the termcap-compatible \fBPC\fP
variable;
though the application may set this value to something other than
a null,
\fI\%ncurses\fP will test \fBnpc\fP first and use napms if the terminal
has no pad character.
.PP
If the terminal can move up or down half a line,
this can be indicated with
.B hu
(half-line up)
and
.B hd
(half-line down).
This is primarily useful for superscripts and subscripts on hard-copy terminals.
If a hard-copy terminal can eject to the next page (form feed), give this as
.B ff
(usually control/L).
.PP
If there is a command to repeat a given character a given number of
times (to save time transmitting a large number of identical characters)
this can be indicated with the parameterized string
.BR rep .
The first parameter is the character to be repeated and the second
is the number of times to repeat it.
Thus, tparm(repeat_char, \*'x\*', 10) is the same as \*(``xxxxxxxxxx\*(''.
.PP
If the terminal has a settable command character,
such as the \s-1TEKTRONIX\s+1 4025,
this can be indicated with
.BR cmdch .
A prototype command character is chosen which is used in all capabilities.
This character is given in the
.B cmdch
capability to identify it.
The following convention is supported on some Unix systems:
The environment is to be searched for a
.B CC
variable, and if found, all
occurrences of the prototype character are replaced with the character
in the environment variable.
.PP
Terminal descriptions that do not represent a specific kind of known
terminal, such as
.IR switch ,
.IR dialup ,
.IR patch ,
and
.IR network ,
should include the
.B gn
(generic) capability so that programs can complain that they do not know
how to talk to the terminal.
(This capability does not apply to
.I virtual
terminal descriptions for which the escape sequences are known.)
.PP
If the terminal has a \*(``meta key\*('' which acts as a shift key,
setting the 8th bit of any character transmitted, this fact can
be indicated with
.BR km .
Otherwise, software will assume that the 8th bit is parity and it
will usually be cleared.
If strings exist to turn this \*(``meta mode\*('' on and off, they
can be given as
.B smm
and
.BR rmm .
.PP
If the terminal has more lines of memory than will fit on the screen
at once, the number of lines of memory can be indicated with
.BR lm .
A value of
.BR lm #0
indicates that the number of lines is not fixed,
but that there is still more memory than fits on the screen.
.PP
If the terminal is one of those supported by the Unix virtual
terminal protocol, the terminal number can be given as
.BR vt .
.PP
Media copy
strings which control an auxiliary printer connected to the terminal
can be given as
.BR mc0 :
print the contents of the screen,
.BR mc4 :
turn off the printer, and
.BR mc5 :
turn on the printer.
When the printer is on, all text sent to the terminal will be sent
to the printer.
It is undefined whether the text is also displayed on the terminal screen
when the printer is on.
A variation
.B mc5p
takes one parameter, and leaves the printer on for as many characters
as the value of the parameter, then turns the printer off.
The parameter should not exceed 255.
All text, including
.BR mc4 ,
is transparently passed to the printer while an
.B mc5p
is in effect.
.SS "Glitches and Brain Damage"
Hazeltine terminals,
which do not allow \*(``\*~\*('' characters to be displayed should
indicate \fBhz\fP.
.PP
Terminals which ignore a line-feed immediately after an \fBam\fP wrap,
such as the Concept and vt100,
should indicate \fBxenl\fP.
.PP
If
.B el
is required to get rid of standout
(instead of merely writing normal text on top of it),
\fBxhp\fP should be given.
.PP
Teleray terminals, where tabs turn all characters moved over to blanks,
should indicate \fBxt\fP (destructive tabs).
Note: the variable indicating this is now \*(``dest_tabs_magic_smso\*(''; in
older versions, it was teleray_glitch.
This glitch is also taken to mean that it is not possible to position
the cursor on top of a \*(``magic cookie\*('',
that to erase standout mode it is instead necessary to use
delete and insert line.
The \fI\%ncurses\fP implementation ignores this glitch.
.PP
The Beehive Superbee, which is unable to correctly transmit the escape
or control/C characters, has
.BR xsb ,
indicating that the f1 key is used for escape and f2 for control/C.
(Only certain Superbees have this problem, depending on the ROM.)
Note that in older terminfo versions, this capability was called
\*(``beehive_glitch\*(''; it is now \*(``no_esc_ctl_c\*(''.
.PP
Other specific terminal problems may be corrected by adding more
capabilities of the form \fBx\fIx\fR.
.SS "Pitfalls of Long Entries"
Long terminfo entries are unlikely to be a problem; to date, no entry has even
approached terminfo's 4096-byte string-table maximum.
Unfortunately, the termcap
translations are much more strictly limited (to 1023 bytes),
thus termcap translations of long terminfo entries can cause problems.
.PP
The man pages for 4.3BSD
and older versions of \fBtgetent\fP instruct the user to
allocate a 1024-byte buffer for the termcap entry.
The entry gets null-terminated by
the termcap library, so that makes the maximum safe length for a termcap entry
1k\-1 (1023) bytes.
Depending on what the application and the termcap library being used does,
and where in the termcap file the terminal type that \fBtgetent\fP
is searching for is, several bad things can happen:
.bP
some termcap libraries print a warning message,
.bP
some exit if they find an entry that's longer than 1023 bytes,
.bP
some neither exit nor warn, doing nothing useful, and
.bP
some simply truncate the entries to 1023 bytes.
.PP
Some application programs allocate more than
the recommended 1K for the termcap entry; others do not.
.PP
Each termcap entry has two important sizes associated with it: before
\*(``tc\*('' expansion, and after \*(``tc\*('' expansion.
\*(``tc\*('' is the capability that
tacks on another termcap entry to the end of the current one, to add
on its capabilities.
If a termcap entry does not use the \*(``tc\*(''
capability, then of course the two lengths are the same.
.PP
The \*(``before tc expansion\*('' length is the most important one, because it
affects more than just users of that particular terminal.
This is the
length of the entry as it exists in /etc/termcap, minus the
backslash-newline pairs, which \fBtgetent\fP strips out while reading it.
Some termcap libraries strip off the final newline, too (GNU termcap does not).
Now suppose:
.bP
a termcap entry before expansion is more than 1023 bytes long,
.bP
and the application has only allocated a 1k buffer,
.bP
and the termcap library (like the one in BSD/OS 1.1 and GNU) reads
the whole entry into the buffer, no matter what its length, to see
if it is the entry it wants,
.bP
and \fBtgetent\fP is searching for a terminal type that either is the
long entry, appears in the termcap file after the long entry, or
does not appear in the file at all (so that \fBtgetent\fP has to search
the whole termcap file).
.PP
Then \fBtgetent\fP will overwrite memory,
perhaps its stack,
and probably core dump the program.
Programs like telnet are particularly vulnerable; modern telnets
pass along values like the terminal type automatically.
The results are almost
as undesirable with a termcap library, like SunOS 4.1.3 and Ultrix 4.4, that
prints warning messages when it reads an overly long termcap entry.
If a
termcap library truncates long entries, like OSF/1 3.0, it is immune to dying
here but will return incorrect data for the terminal.
.PP
The \*(``after tc expansion\*('' length will have a similar effect to the
above, but only for people who actually set \fITERM\fP to that terminal
type, since \fBtgetent\fP only does \*(``tc\*('' expansion once it is found the
terminal type it was looking for, not while searching.
.PP
In summary, a termcap entry that is longer than 1023 bytes can cause,
on various combinations of termcap libraries and applications, a core
dump, warnings, or incorrect operation.
If it is too long even before
\*(``tc\*('' expansion, it will have this effect even for users of some other
terminal types and users whose \fITERM\fP variable does not have a termcap
entry.
.PP
When in \-C (translate to termcap) mode,
the \fI\%ncurses\fP implementation of
\fB@TIC@\fP(1M) issues warning messages when the pre-tc length of a termcap
translation is too long.
The \-c (check) option also checks resolved (after tc
expansion) lengths.
.SH FILES
.TP
.I \*d
compiled terminal description database directory
.SH EXTENSIONS
Searching for terminal descriptions in
\fI$HOME/.terminfo\fP and \fI\%TERMINFO_DIRS\fP
is not supported by older implementations.
.PP
Some SVr4 \fBcurses\fP implementations, and all previous to SVr4, do not
interpret the %A and %O operators in parameter strings.
.PP
SVr4/XPG4 do not specify whether \fBmsgr\fP licenses movement while in
an alternate-character-set mode (such modes may, among other things, map
CR and NL to characters that do not trigger local motions).
The \fI\%ncurses\fP implementation ignores \fBmsgr\fP in
\fBALTCHARSET\fP mode.
This raises the possibility that an XPG4
implementation making the opposite interpretation may need terminfo
entries made for \fI\%ncurses\fP to have \fBmsgr\fP turned off.
.PP
The \fI\%ncurses\fP library handles insert-character and
insert-character modes in a slightly non-standard way to get better
update efficiency.
See
the \fBInsert/Delete Character\fP subsection above.
.PP
The parameter substitutions for \fBset_clock\fP and \fBdisplay_clock\fP are
not documented in SVr4 or X/Open Curses.
They are deduced from the
documentation for the AT&T 505 terminal.
.PP
Be careful assigning the \fBkmous\fP capability.
The \fI\%ncurses\fP library wants to interpret it as \fBKEY_MOUSE\fP,
for use by terminals and emulators like xterm
that can return mouse-tracking information in the keyboard-input stream.
.PP
X/Open Curses does not mention italics.
Portable applications must assume that numeric capabilities are
signed 16-bit values.
This includes the \fIno_color_video\fP (\fBncv\fP) capability.
The 32768 mask value used for italics with \fBncv\fP can be confused with
an absent or cancelled \fBncv\fP.
If italics should work with colors,
then the \fBncv\fP value must be specified, even if it is zero.
.PP
Different commercial ports of \fI\%terminfo\fP and \fIcurses\fP support
different subsets of X/Open Curses and
(in some cases)
different extensions.
Here is a summary,
accurate as of October 1995,
after which the commercial Unix market contracted and lost diversity.
.bP
SVr4,
Solaris,
and \fI\%ncurses\fP support all SVr4 capabilities.
.bP
IRIX supports the SVr4 set and adds one undocumented extended string
capability (\fB\%set_pglen\fP).
.bP
SVr1 and Ultrix support a restricted subset of \fI\%terminfo\fP
capabilities.
The Booleans end with \fB\%xon_xoff\fP;
the numerics with \fB\%width_status_line\fP;
and the strings with \fB\%prtr_non\fP.
.bP
HP/UX supports the SVr1 subset,
plus the SVr[234] numerics
\fB\%num_labels\fP,
\fB\%label_height\fP,
\fB\%label_width\fP,
plus function keys 11 through 63,
plus
\fB\%plab_norm\fP,
\fB\%label_on\fP,
and
\fB\%label_off\fP,
plus a number of incompatible string table extensions.
.bP
AIX supports the SVr1 subset,
plus function keys 11 through 63,
plus a number of incompatible string table extensions.
.bP
OSF/1 supports both the SVr4 set and the AIX extensions.
.SH PORTABILITY
Do not count on compiled (binary) \fI\%terminfo\fP entries being
portable between commercial Unix systems.
At least two implementations of \fI\%terminfo\fP
(those of HP-UX and AIX)
diverged from those of other System V Unices after SVr1,
adding extension capabilities to the string table that
(in the binary format)
collide with subsequent System V and X/Open Curses extensions.
.SH AUTHORS
Zeyd M. Ben-Halim, Eric S. Raymond, Thomas E. Dickey.
Based on \fIpcurses\fP by Pavel Curtis.
.SH SEE ALSO
\fB\%@INFOCMP@\fP(1M),
\fB\%@TABS@\fP(1),
\fB\%@TIC@\fP(1M),
\fB\%curses\fP(3X),
\fB\%curs_color\fP(3X),
\fB\%curs_terminfo\fP(3X),
\fB\%curs_variables\fP(3X),
\fB\%printf\fP(3),
\fB\%term_variables\fP(3X),
\fB\%term\fP(5),
\fB\%user_caps\fP(5)
