-.\" $Id: terminfo.tail,v 1.93 2019/06/01 22:32:15 tom Exp $
-.\" Beginning of terminfo.tail file
-.\" This file is part of ncurses.
-.\" See "terminfo.head" for copyright.
+.\"***************************************************************************
+.\" Copyright 2018-2020,2021 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.102 2021/08/21 22:55:23 tom Exp $
.ps +1
.SS User-Defined Capabilities
.
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,
+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\fR.
\fB%g\fP\fI[A\-Z]\fP
get static variable \fI[a\-z]\fP and push it
.IP
-The terms "static" and "dynamic" are misleading.
+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.
+Relying on it will adversely impact portability to other implementations:
+.RS
+.bP
+SVr4 curses stores the \fIstatic\fP variables in the \fBTERMINAL\fP
+structure (declared in \fBterm.h\fP), and the \fIdynamic variables\fP
+on the stack in the \fBtparm\fP function.
+The former are zeroed automatically when the \fBsetupterm\fP function
+allocates the data.
+The latter 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.
+.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, ncurses stores both \fIdynamic\fP and \fIstatic\fP
+variables in persistent storage, initialized to zeros.
+.bP
+Beginning with version 6.3, ncurses stores \fIstatic\fP and \fIdynamic\fP
+variables in the same manner as SVr4.
+Unlike other implementations, ncurses zeros dynamic variables
+before the first \fB%g\fP or \fB%P\fP operator.
+.RE
.TP
\fB%'\fP\fIc\fP\fB'\fP
char constant \fIc\fP
.B iprog
.TP
output
-.B is1
-.B is2
+.br
+\fBis1\fP and
+.br
+\fBis2\fP
.TP
set the margins using
-.BR mgc ,
-.B smgl
-and
-.B smgr
+\fBmgc\fP or
+.br
+\fBsmglp\fP and \fBsmgrp\fP or
+.br
+\fBsmgl\fP and \fBsmgr\fP
.TP
set tabs using
.B tbc
.B hts
.TP
print the file
-.B if
+\fBif\fP
.TP
-and finally
-output
-.BR is3 .
+and finally output
+\fBis3\fP.
.RE
.PP
Most initialization is done with
and
.B is3
respectively.
-These strings are output by the \fB@RESET@\fP program
+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
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.
+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
+program, using
.BR rs1 ,
etc., instead of
.BR is1 ,
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
+\*(``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"
+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
+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
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
+The \*(``after tc expansion\*('' length will have a similar effect to the
above, but only for people who actually set TERM to that terminal
-type, since \fBtgetent\fP only does "tc" expansion once it is found the
+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
+\*(``tc\*('' expansion, it will have this effect even for users of some other
terminal types and users whose TERM variable does not have a termcap
entry.
.PP
.SH EXTENSIONS
.PP
Searching for terminal descriptions in
-\fB$HOME/.terminfo\fR and TERMINFO_DIRS
+\fB$HOME/.terminfo\fR and TERMINFO_DIRS
is not supported by older implementations.
.PP
Some SVr4 \fBcurses\fR implementations, and all previous to SVr4, do not
\*d/?/*
files containing terminal descriptions
.SH SEE ALSO
-\fB@TABS@\fR(1M),
-\fB@TIC@\fR(1M),
\fB@INFOCMP@\fR(1M),
+\fB@TABS@\fR(1),
+\fB@TIC@\fR(1M),
\fBcurses\fR(3X),
\fBcurs_color\fR(3X),
\fBcurs_variables\fR(3X),
\fBprintf\fR(3),
-\fBterm\fR(\*n).
\fBterm_variables\fR(3X).
+\fBterm\fR(\*n).
\fBuser_caps\fR(5).
.SH AUTHORS
Zeyd M. Ben-Halim, Eric S. Raymond, Thomas E. Dickey.