diff --git a/man/terminfo.5 b/man/terminfo.5
new file mode 100644
index 0000000..1c34010
--- /dev/null
+++ b/man/terminfo.5
@@ -0,0 +1,4388 @@
+'\" 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)
