.\" $Id: terminfo.tail,v 1.69 2015/04/26 14:47:23 tom Exp $
.\" Beginning of terminfo.tail file
.\" This file is part of ncurses.
.\" See "terminfo.head" for copyright.
.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
\fBncurses\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 function makes this information
conditionally available to applications.
The ncurses 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.
.
.SS A Sample Entry
.
The following entry, describing an ANSI-standard terminal, is representative
of what a \fBterminfo\fR entry for a modern terminal typically looks like.
.PP
.nf
.ft CW
\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=+\\020\\,\\021-\\030.^Y0\\333`\\004a\\261f\\370g\\361h\\260
             j\\331k\\277l\\332m\\300n\\305o~p\\304q\\304r\\304s_t\\303
             u\\264v\\301w\\302x\\263y\\363z\\362{\\343|\\330}\\234~\\376,
        bel=^G, blink=\\E[5m, bold=\\E[1m, cbt=\\E[Z, clear=\\E[H\\E[J,
        cr=^M, cub=\\E[%p1%dD, cub1=\\E[D, cud=\\E[%p1%dB, cud1=\\E[B,
        cuf=\\E[%p1%dC, cuf1=\\E[C, cup=\\E[%i%p1%d;%p2%dH,
        cuu=\\E[%p1%dA, cuu1=\\E[A, dch=\\E[%p1%dP, dch1=\\E[P,
        dl=\\E[%p1%dM, dl1=\\E[M, ech=\\E[%p1%dX, ed=\\E[J, el=\\E[K,
        el1=\\E[1K, home=\\E[H, hpa=\\E[%i%p1%dG, ht=\\E[I, hts=\\EH,
        ich=\\E[%p1%d@, il=\\E[%p1%dL, il1=\\E[L, ind=^J,
        indn=\\E[%p1%dS, invis=\\E[8m, kbs=^H, kcbt=\\E[Z, kcub1=\\E[D,
        kcud1=\\E[B, kcuf1=\\E[C, kcuu1=\\E[A, khome=\\E[H, kich1=\\E[L,
        mc4=\\E[4i, mc5=\\E[5i, nel=\\r\\E[S, op=\\E[39;49m,
        rep=%p1%c\\E[%p2%{1}%-%db, rev=\\E[7m, rin=\\E[%p1%dT,
        rmacs=\\E[10m, rmpch=\\E[10m, rmso=\\E[m, rmul=\\E[m,
        s0ds=\\E(B, s1ds=\\E)B, s2ds=\\E*B, s3ds=\\E+B,
        setab=\\E[4%p1%dm, setaf=\\E[3%p1%dm,
        sgr=\\E[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=\\E[0;10m, smacs=\\E[11m, smpch=\\E[11m, smso=\\E[7m,
        smul=\\E[4m, tbc=\\E[3g, u6=\\E[%i%d;%dR, u7=\\E[6n,
        u8=\\E[?%[;0123456789]c, u9=\\E[c, vpa=\\E[%i%p1%dd,
.fi
.ft R
.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.
.PP
.SS Types of Capabilities
.PP
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\fR.
Hence the description of ansi includes \fBam\fR.
Numeric capabilities are followed by the character \*(``#\*('' and then a positive value.
Thus \fBcols\fR, 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\fR (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.
Both \fB\eE\fR and \fB\ee\fR
map to an \s-1ESCAPE\s0 character,
\fB^x\fR maps to a control-x for any appropriate x, and the sequences
\fB\en \el \er \et \eb \ef \es\fR give
a newline, line-feed, return, tab, backspace, form-feed, and space.
Other escapes include
.bP
\fB\e^\fR for \fB^\fR,
.bP
\fB\e\e\fR for \fB\e\fR,
.bP
\fB\e\fR, for comma,
.bP
\fB\e:\fR for \fB:\fR,
.bP
and \fB\e0\fR for null.
.IP
\fB\e0\fR will produce \e200, which does not terminate a string but behaves
as a null character on most terminals, providing CS7 is specified.
See stty(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\fR.
.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
.I tputs
to provide this delay.
The delay must be a number with at most one decimal
place of precision; it may be followed by suffixes \*(``*\*('' or \*(``/\*('' or both.
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
.IR lines
affected.)  Normally, padding is advisory if the device has the \fBxon\fR
capability; it is used for cost computation but does not trigger delays.
A \*(``/\*(''
suffix indicates that the padding is mandatory and forces a delay of the given
number of milliseconds even on devices for which \fBxon\fR 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
.PP
.SS Fetching Compiled Descriptions
.PP
The \fBncurses\fP library searches for terminal descriptions in several places.
It uses only the first description found.
The library has a compiled-in list of places to search
which can be overridden by environment variables.
Before starting to search,
\fBncurses\fP eliminates duplicates in its search list.
.bP
If the environment variable TERMINFO is set, it is interpreted as the pathname
of a directory containing the compiled description you are working on.
Only that directory is searched.
.bP
If TERMINFO is not set,
\fBncurses\fR will instead look in the directory \fB$HOME/.terminfo\fR
for a compiled description.
.bP
Next, if the environment variable TERMINFO_DIRS is set,
\fBncurses\fR will interpret the contents of that variable
as a list of colon-separated directories (or database files) to be searched.
.IP
An empty directory name (i.e., if the variable begins or ends
with a colon, or contains adjacent colons)
is interpreted as the system location \fI\*d\fR.
.bP
Finally, \fBncurses\fP searches these compiled-in locations:
.RS
.bP
a list of directories (@TERMINFO_DIRS@), and
.bP
the system terminfo directory, \fI\*d\fR (the compiled-in default).
.RE
.SS Preparing Descriptions
.PP
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.
.PP
.SS Basic Capabilities
.PP
The number of columns on each line for the terminal is given by the
\fBcols\fR numeric capability.
If the terminal is a \s-1CRT\s0, then the
number of lines on the screen is given by the \fBlines\fR 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\fR capability.
If the terminal can clear its screen, leaving the cursor in the home
position, then this is given by the \fBclear\fR string capability.
If the terminal overstrikes
(rather than clearing a position when a character is struck over)
then it should have the \fBos\fR 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\fR 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\fR.
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 \*(lqglass-tty\*(rq terminals.
Thus the model 33 teletype is described as
.PP
.DT
.nf
.ft CW
.\".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
.ft R
.fi
.PP
while the Lear Siegler \s-1ADM-3\s0 is described as
.PP
.DT
.nf
.ft CW
.\".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
.ft R
.fi
.PP
.SS Parameterized Strings
.PP
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\fR 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%\fR encodings have the following meanings:
.PP
.TP 5
\fB%%\fP
outputs \*(``%\*(''
.TP
\fB%\fP\fI[[\fP:\fI]flags][width[.precision]][\fP\fBdoxXs\fP\fI]\fP
as in \fBprintf\fP, flags are \fI[\-+#]\fP and \fIspace\fP.
Use a \*(``:\*('' to allow the next character to be a \*(``\-\*('' flag,
avoiding interpreting "%\-" as an operator.
.TP
\f(CW%c\fP
print pop() like %c in \fBprintf\fP
.TP
\fB%s\fP
print pop() like %s in \fBprintf\fP
.TP
\fB%p\fP\fI[1\-9]\fP
push \fIi\fP'th parameter
.TP
\fB%P\fP\fI[a\-z]\fP
set dynamic variable \fI[a\-z]\fP to pop()
.TP
\fB%g\fP\fI[a\-z]/\fP
get dynamic variable \fI[a\-z]\fP and push it
.TP
\fB%P\fP\fI[A\-Z]\fP
set static variable \fI[a\-z]\fP to \fIpop()\fP
.TP
\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.
Historically, these are simply two different sets of variables,
whose values are not reset between calls to \fBtparm\fP.
However, that fact is not documented in other implementations.
Relying on it will adversely impact portability to other implementations.
.TP
\fB%'\fP\fIc\fP\fB'\fP
char constant \fIc\fP
.TP
\fB%{\fP\fInn\fP\fB}\fP
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 mod): \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): push(op pop())
.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.
Note that the order
of the rows and columns is inverted here, and that the row and column
are printed as two digits.
Thus its \fBcup\fR capability is \*(lqcup=6\eE&%p2%2dc%p1%2dY\*(rq.
.PP
The Microterm \s-1ACT-IV\s0 needs the current row and column sent
preceded by a \fB^T\fR, with the row and column simply encoded in binary,
\*(lqcup=^T%p1%c%p2%c\*(rq.
Terminals which use \*(lq%c\*(rq need to be able to
backspace the cursor (\fBcub1\fR),
and to move the cursor up one line on the screen (\fBcuu1\fR).
This is necessary because it is not always safe to transmit \fB\en\fR
\fB^D\fR and \fB\er\fR, 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 \*(lqcup=\eE=%p1%' '%+%c%p2%' '%+%c\*(rq.
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.
.PP
.SS Cursor Motions
.PP
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\fR; similarly a fast way of getting to the lower left-hand corner
can be given as \fBll\fR; this may involve going up with \fBcuu1\fR
from the home position,
but a program should never do this itself (unless \fBll\fR 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
.BR 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\fR and \fBrmcup\fR.
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.
.PP
.SS Area Clears
.PP
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\fR.
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\fR.
\fBEd\fR 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.)
.PP
.SS Insert/delete line and vertical motions
.PP
If the terminal can open a new blank line before the line where the cursor
is, this should be given as \fBil1\fR; 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\fR; 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 \fBncurses\fR(3X) library does this synthesis
automatically, so you need not compose insert/delete strings for
an entry with \fBcsr\fR).
.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\fR 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\fR followed by \fBdl1\fR or \fBind\fR.
If the data scrolled
off the bottom of the region by the \fBri\fR re-appears, then scrolling
is non-destructive.
System V and XSI Curses expect that \fBind\fR, \fBri\fR,
\fBindn\fR, and \fBrin\fR will simulate destructive scrolling; their
documentation cautions you not to define \fBcsr\fR unless this is true.
This \fBcurses\fR implementation is more liberal and will do explicit erases
after scrolling if \fBndstr\fR 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\fR capability should be given; if display memory can be retained
below, then \fBdb\fR 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\fR may bring down non-blank lines.
.PP
.SS Insert/Delete Character
.PP
There are two basic kinds of intelligent terminals with respect to
insert/delete character which can be described using
.I 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 \*(lqabc\ \ \ \ def\*(rq using local
cursor motions (not spaces) between the \*(lqabc\*(rq and the \*(lqdef\*(rq.
Then position the cursor before the \*(lqabc\*(rq 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 \*(lqabc\*(rq
shifts over to the \*(lqdef\*(rq 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\fR, which stands for
\*(lqinsert null\*(rq.
.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\fR the sequence to get into insert mode.
Give as \fBrmir\fR the sequence to leave insert mode.
Now give as \fBich1\fR 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\fR; 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\fR.
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\fR sequences do not
require previous smir, and most smir insert modes do not require \fBich1\fR
before each character.
Therefore, the new \fBcurses\fR actually assumes this
is the case and uses either \fBrmir\fR/\fBsmir\fR or \fBich\fR/\fBich1\fR 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\fR/\fBsmir\fR sequences in \fBich1\fR.
.PP
If post insert padding is needed, give this as a number of milliseconds
in \fBip\fR (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\fR.
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\fR to speed up inserting
in this case.
Omitting \fBmir\fR will affect only speed.
Some terminals
(notably Datamedia's) must not have \fBmir\fR 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
.I n characters,
and delete mode by giving \fBsmdc\fR and \fBrmdc\fR
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.
.PP
.SS "Highlighting, Underlining, and Visible Bells"
.PP
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\fR,
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\fR and \fBrmso\fR, 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\fR should be given to tell how many spaces are left.
.PP
Codes to begin underlining and end underlining can be given as \fBsmul\fR
and \fBrmul\fR 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\fR.
.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 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;
l l l
l l l
lw18 lw14 lw18.
\fBtparm parameter	attribute	escape sequence\fP

none	none	\\E[0m
p1	standout	\\E[0;1;7m
p2	underline	\\E[0;4m
p3	reverse	\\E[0;7m
p4	blink	\\E[0;5m
p5	dim	not available
p6	bold	\\E[0;1m
p7	invis	\\E[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 \\E[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;
l l l
l l l
lw18 lw14 lw18.
\fBsequence	when to output	terminfo translation\fP

.ft CW
\\E[0	always	\\E[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%;
.ft R
.TE
.PP
Putting this all together into the sgr sequence gives:
.PP
.ft CW
.nf
    sgr=\\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p4%t;5%;
        %?%p1%p3%|%t;7%;%?%p7%t;8%;m%?%p9%t\\016%e\\017%;,
.fi
.ft R
.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\fR; 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
.BR 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\fR.
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\fR.
.PP
.SS Keypad and Function Keys
.PP
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\fR and \fBrmkx\fR.
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\fR respectively.
If there are function keys such as f0, f1, ..., f10, the codes they send
can be given as \fBkf0, kf1, ..., kf10\fR.
If these keys have labels other than the default f0 through f10, the labels
can be given as \fBlf0, lf1, ..., lf10\fR.
.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.
.PP
.SS Tabs and Initialization
.PP
If the terminal has hardware tabs, the command to advance to the next
tab stop can be given as
.B ht
(usually control I).
A \*(``back-tab\*('' command which moves leftward to the preceding tab stop can
be given as
.BR cbt .
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.
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.
This is normally used by the
.IR @TSET@
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
.BR is1 ,
.BR is2 ,
and
.BR is3 ,
initialization strings for the terminal,
.BR iprog ,
the path name of a program to be run to initialize the terminal,
and \fBif\fR, the name of a file containing long initialization strings.
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
.IR @TPUT@
program, each time the user logs in.
They will be printed in the following order:
.RS
.TP
run the program
.BR iprog
.TP
output
.BR is1
.BR is2
.TP
set the margins using
.BR mgc ,
.BR smgl
and
.BR smgr
.TP
set tabs using
.B tbc
and
.BR hts
.TP
print the file
.BR if
.TP
and finally
output
.BR is3 .
.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 ,
.BR rf
and
.BR rs3 ,
analogous to
.B is1 ,
.B is2 ,
.B if
and
.BR is3
respectively.
These strings are output by the
.IR reset
program, which is used when the terminal gets into a wedged state.
Commands are normally placed in
.BR rs1 ,
.BR 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
.IR reset
program writes strings
including
.BR iprog ,
etc., in the same order as the
.IR init
program, using 
.BR rs1 ,
etc., instead of
.BR is1 ,
etc.
If any of
.BR rs1 ,
.BR rs2 ,
.BR rs3 ,
or
.BR rf
reset capability strings are missing, the
.IR reset
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 .
.SS Delays and Padding
.PP
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\fR (padding baud rate) is given, padding is suppressed at baud rates
below the value of \fBpb\fR.
If the entry has no padding baud rate, then
whether padding is emitted or not is completely controlled by \fBxon\fR.
.PP
If the terminal requires other than a null (zero) character as a pad,
then this can be given as \fBpad\fR.
Only the first character of the
.B pad
string is used.
.PP
.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\fR 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\fR 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\fR which takes the cursor to a given zero-origin column on the
status line.
The capability \fBfsl\fR must return to the main-screen
cursor positions before the last \fBtsl\fR.
You may need to embed the
string values of \fBsc\fR (save cursor) and \fBrc\fR (restore cursor)
in \fBtsl\fR and \fBfsl\fR 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\fR.
.PP
A command to erase or blank the status line may be specified as \fBdsl\fR.
.PP
The boolean capability \fBeslok\fR specifies that escape sequences, tabs,
etc., work ordinarily in the status line.
.PP
The \fBncurses\fR implementation does not yet use any of these capabilities.
They are documented here in case they ever become important.
.PP
.SS Line Graphics
.PP
Many terminals have alternate character sets useful for forms-drawing.
Terminfo and \fBcurses\fR build in support for 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\fR capability.
.PP
.TS H
center expand;
l l l l
l l l l
lw25 lw10 lw6 lw6.
.\".TH
\fBGlyph	ACS	Ascii	VT100\fR
\fBName	Name	Default	Name\fR
UK pound sign        	ACS_STERLING	f	}
arrow pointing down	ACS_DARROW	v	.
arrow pointing left	ACS_LARROW	<	,
arrow pointing right	ACS_RARROW	>	+
arrow pointing up	ACS_UARROW	^	\-
board of squares	ACS_BOARD	#	h
bullet          	ACS_BULLET	o	~
checker board (stipple)	ACS_CKBOARD	:	a
degree symbol   	ACS_DEGREE	\e	f
diamond         	ACS_DIAMOND	+	`
greater-than-or-equal-to	ACS_GEQUAL	>	z
greek pi        	ACS_PI	*	{
horizontal line 	ACS_HLINE	\-	q
lantern symbol  	ACS_LANTERN	#	i
large plus or crossover	ACS_PLUS	+	n
less-than-or-equal-to	ACS_LEQUAL	<	y
lower left corner	ACS_LLCORNER	+	m
lower right corner	ACS_LRCORNER	+	j
not-equal       	ACS_NEQUAL	!	|
plus/minus      	ACS_PLMINUS	#	g
scan line 1     	ACS_S1  	~	o
scan line 3     	ACS_S3  	\-	p
scan line 7     	ACS_S7  	\-	r
scan line 9     	ACS_S9  	\&_	s
solid square block	ACS_BLOCK	#	0
tee pointing down	ACS_TTEE	+	w
tee pointing left	ACS_RTEE	+	u
tee pointing right	ACS_LTEE	+	t
tee pointing up 	ACS_BTEE	+	v
upper left corner	ACS_ULCORNER	+	l
upper right corner	ACS_URCORNER	+	k
vertical line   	ACS_VLINE	|	x
.TE
.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\fR/\fBrmacs\fR 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.
.PP
.SS Color Handling
.PP
Most color terminals are either \*(``Tektronix-like\*('' or \*(``HP-like\*(''.
Tektronix-like
terminals have a predefined set of N colors (where N usually 8), and can set
character-cell foreground and background characters independently, mixing them
into N\ *\ N color-pairs.
On HP-like terminals, the use must set each color
pair up separately (foreground and background are not independently settable).
Up to M color-pairs may be set up from 2*M different colors.
ANSI-compatible
terminals are Tektronix-like.
.PP
Some basic color capabilities are independent of the color method.
The numeric
capabilities \fBcolors\fR and \fBpairs\fR specify the maximum numbers of colors
and color-pairs that can be displayed simultaneously.
The \fBop\fR (original
pair) string resets foreground and background colors to their default values
for the terminal.
The \fBoc\fR 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\fR.
.PP
To change the current foreground or background color on a Tektronix-type
terminal, use \fBsetaf\fR (set ANSI foreground) and \fBsetab\fR (set ANSI
background) or \fBsetf\fR (set foreground) and \fBsetb\fR (set background).
These take one parameter, the color number.
The SVr4 documentation describes
only \fBsetaf\fR/\fBsetab\fR; the XPG4 draft says that "If the terminal
supports ANSI escape sequences to set background and foreground, they should
be coded as \fBsetaf\fR and \fBsetab\fR, respectively.
If the terminal
supports other escape sequences to set background and foreground, they should
be coded as \fBsetf\fR and \fBsetb\fR, respectively.
The \fIvidputs()\fR
function and the refresh functions use \fBsetaf\fR and \fBsetab\fR if they are
defined."
.PP
The \fBsetaf\fR/\fBsetab\fR and \fBsetf\fR/\fBsetb\fR capabilities take a
single numeric argument each.
Argument values 0-7 of \fBsetaf\fR/\fBsetab\fR are portably defined as
follows (the middle column is the symbolic #define available in the header for
the \fBcurses\fR or \fBncurses\fR libraries).
The terminal hardware is free to
map these as it likes, but the RGB values indicate normal locations in color
space.
.PP
.TS H
center;
l c c c
l l n l.
\fBColor	#define 	Value	RGB\fR
black	\fBCOLOR_BLACK\fR	0	0, 0, 0
red	\fBCOLOR_RED\ \fR	1	max,0,0
green	\fBCOLOR_GREEN\fR	2	0,max,0
yellow	\fBCOLOR_YELLOW\fR	3	max,max,0
blue	\fBCOLOR_BLUE\fR	4	0,0,max
magenta	\fBCOLOR_MAGENTA\fR	5	max,0,max
cyan	\fBCOLOR_CYAN\fR	6	0,max,max
white	\fBCOLOR_WHITE\fR	7	max,max,max
.TE
.PP
The argument values of \fBsetf\fR/\fBsetb\fR historically correspond to
a different mapping, i.e.,
.TS H
center;
l c c c
l l n l.
\fBColor	#define 	Value	RGB\fR
black	\fBCOLOR_BLACK\fR	0	0, 0, 0
blue	\fBCOLOR_BLUE\fR	1	0,0,max
green	\fBCOLOR_GREEN\fR	2	0,max,0
cyan	\fBCOLOR_CYAN\fR	3	0,max,max
red	\fBCOLOR_RED\ \fR	4	max,0,0
magenta	\fBCOLOR_MAGENTA\fR	5	max,0,max
yellow	\fBCOLOR_YELLOW\fR	6	max,max,0
white	\fBCOLOR_WHITE\fR	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\fR with a color-pair number parameter to set
which color pair is current.
.PP
On a Tektronix-like terminal, the capability \fBccc\fR may be present to
indicate that colors can be modified.
If so, the \fBinitc\fR capability will
take a color number (0 to \fBcolors\fR \- 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\fR is present,
they are instead as HLS (Hue, Lightness, Saturation) indices.
The ranges are
terminal-dependent.
.PP
On an HP-like terminal, \fBinitp\fR may give a capability for changing a
color-pair value.
It will take seven parameters; a color-pair number (0 to
\fBmax_pairs\fR \- 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\fR.
.PP
On some color terminals, colors collide with highlights.
You can register
these collisions with the \fBncv\fR capability.
This is a bit-mask of
attributes not to be used when colors are enabled.
The correspondence with the
attributes understood by \fBcurses\fR is as follows:
.PP
.TS
center;
l l l l
lw20 lw2 lw10 lw10.
\fBAttribute	Bit	Decimal	Set by\fR
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\fR capability of 2.
.PP
SVr4 curses does nothing with \fBncv\fR, ncurses recognizes it and optimizes
the output in favor of colors.
.PP
.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 ncurses implements the termcap-compatible \fBPC\fR variable;
though the application may set this value to something other than
a null, ncurses will test \fBnpc\fR 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 \s-1UNIX\s+1 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.
.PP
.SS Glitches and Braindamage
.PP
Hazeltine terminals, which do not allow \*(``~\*('' characters to be displayed should
indicate \fBhz\fR.
.PP
Terminals which ignore a line-feed immediately after an \fBam\fR wrap,
such as the Concept and vt100,
should indicate \fBxenl\fR.
.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\fR (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 ncurses 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\fR\fIx\fR.
.PP
.SS Similar Terminals
.PP
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\fR can be given with
the name of the base terminal.
The capabilities given before
.B use
override those in the base type named by
.BR use .
If there are multiple \fBuse\fR capabilities, they are merged in reverse order.
That is, the rightmost \fBuse\fR reference is processed first, then the one to
its left, and so forth.
Capabilities given explicitly in the entry override
those brought in by \fBuse\fR references.
.PP
A capability can be canceled by placing \fBxx@\fR 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\fR or \fBrmkx\fR 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
.SS Pitfalls of Long Entries
.PP
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.
.PP
Some termcap libraries print a warning message or exit if they find an
entry that's longer than 1023 bytes; others do not; others truncate the
entries to 1023 bytes.
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 TERM 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 TERM variable does not have a termcap
entry.
.PP
When in \-C (translate to termcap) mode, the \fBncurses\fR implementation of
\fB@TIC@\fR(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.
.SS Binary Compatibility
It is not wise to count on portability of binary terminfo entries between
commercial UNIX versions.
The problem is that there are at least two versions
of terminfo (under HP\-UX and AIX) which diverged from System V terminfo after
SVr1, and have added extension capabilities to the string table that (in the
binary format) collide with System V and XSI Curses extensions.
.SH EXTENSIONS
.PP
Searching for terminal descriptions in
\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
interpret the %A and %O operators in parameter strings.
.PP
SVr4/XPG4 do not specify whether \fBmsgr\fR 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 \fBncurses\fR implementation ignores \fBmsgr\fR in \fBALTCHARSET\fR
mode.
This raises the possibility that an XPG4
implementation making the opposite interpretation may need terminfo
entries made for \fBncurses\fR to have \fBmsgr\fR turned off.
.PP
The \fBncurses\fR library handles insert-character and insert-character modes
in a slightly non-standard way to get better update efficiency.
See
the \fBInsert/Delete Character\fR subsection above.
.PP
The parameter substitutions for \fBset_clock\fR and \fBdisplay_clock\fR are
not documented in SVr4 or the XSI Curses standard.
They are deduced from the
documentation for the AT&T 505 terminal.
.PP
Be careful assigning the \fBkmous\fR capability.
The \fBncurses\fR wants to
interpret it as \fBKEY_MOUSE\fR, 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 (ncv) capability.
The 32768 mask value used for italics with ncv can be confused with
an absent or cancelled ncv.
If italics should work with colors,
then the ncv value must be specified, even if it is zero.
.PP
Different commercial ports of terminfo and curses support different subsets of
the XSI Curses standard and (in some cases) different extension sets.
Here
is a summary, accurate as of October 1995:
.PP
\fBSVR4, Solaris, ncurses\fR \-\-
These support all SVr4 capabilities.
.PP
\fBSGI\fR \-\-
Supports the SVr4 set, adds one undocumented extended string
capability (\fBset_pglen\fR).
.PP
\fBSVr1, Ultrix\fR \-\-
These support a restricted subset of terminfo capabilities.
The booleans end with \fBxon_xoff\fR;
the numerics with \fBwidth_status_line\fR;
and the strings with \fBprtr_non\fR.
.PP
\fBHP/UX\fR \-\-
Supports the SVr1 subset, plus the SVr[234] numerics \fBnum_labels\fR,
\fBlabel_height\fR, \fBlabel_width\fR, plus function keys 11 through 63, plus
\fBplab_norm\fR, \fBlabel_on\fR, and \fBlabel_off\fR, plus some incompatible
extensions in the string table.
.PP
\fBAIX\fR \-\-
Supports the SVr1 subset, plus function keys 11 through 63, plus a number
of incompatible string table extensions.
.PP
\fBOSF\fR \-\-
Supports both the SVr4 set and the AIX extensions.
.SH FILES
.TP 25
\*d/?/*
files containing terminal descriptions
.SH SEE ALSO
\fB@TIC@\fR(1M),
\fB@INFOCMP@\fR(1M),
\fBcurses\fR(3X),
\fBprintf\fR(3),
\fBterm\fR(\*n).
\fBterm_variables\fR(3X).
.SH AUTHORS
Zeyd M. Ben-Halim, Eric S. Raymond, Thomas E. Dickey.
Based on pcurses by Pavel Curtis.
