diff options
author | rgrimes <rgrimes@FreeBSD.org> | 1994-05-30 19:09:18 +0000 |
---|---|---|
committer | rgrimes <rgrimes@FreeBSD.org> | 1994-05-30 19:09:18 +0000 |
commit | b0d61785cae024b1f44119446a940ee14c9ac959 (patch) | |
tree | 5a495a583b002ae9e57f09848ae697160708c220 /share/termcap/termcap.5 | |
parent | d43599f73ba5858e573c7ad8b284f6a0808c5c93 (diff) | |
download | FreeBSD-src-b0d61785cae024b1f44119446a940ee14c9ac959.zip FreeBSD-src-b0d61785cae024b1f44119446a940ee14c9ac959.tar.gz |
BSD 4.4 Lite Share Sources
Diffstat (limited to 'share/termcap/termcap.5')
-rw-r--r-- | share/termcap/termcap.5 | 1844 |
1 files changed, 1844 insertions, 0 deletions
diff --git a/share/termcap/termcap.5 b/share/termcap/termcap.5 new file mode 100644 index 0000000..20b2ec66 --- /dev/null +++ b/share/termcap/termcap.5 @@ -0,0 +1,1844 @@ +.\" Copyright (c) 1985, 1991, 1993, 1994 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)termcap.5 8.3 (Berkeley) 4/16/94 +.\" +.Dd April 16, 1994 +.Dt TERMCAP 5 +.Os BSD 3 +.Sh NAME +.Nm termcap +.Nd terminal capability data base +.Sh SYNOPSIS +.Nm termcap +.Sh DESCRIPTION +The +.Nm Termcap +file +is a data base describing terminals, +used, +for example, +by +.Xr \&vi 1 +and +.Xr curses 3 . +Terminals are described in +.Nm termcap +by giving a set of capabilities that they have and by describing +how operations are performed. +Padding requirements and initialization sequences +are included in +.Nm termcap . +.Pp +Entries in +.Nm termcap +consist of a number of `:'-separated fields. +The first entry for each terminal gives the names that are known for the +terminal, separated by `|' characters. +The first name given is the most common abbreviation for the terminal. +The last name given should be a long name fully identifying the terminal, +and all others are understood as synonyms for the terminal name. +All names but the last should be in lower case and contain no blanks; +the last name may well contain upper case characters and blanks for +readability. +.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 chosen, thus +.Dq 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 an indicator of the mode. +Therefore, a +.Dq vt100 +in 132-column mode would be +.Dq vt100-w . +The following suffixes should be used where possible: +.Pp +.Bd -filled -offset indent +.Bl -column indent "With automatic margins (usually default)xx" +.Sy Suffix Meaning Example +-w Wide mode (more than 80 columns) vt100-w +-am With automatic margins (usually default) vt100-am +-nam Without automatic margins vt100-nam +.Pf \- Ar n Ta No "Number of lines on screen aaa-60" +-na No arrow keys (leave them in local) concept100-na +.Pf \- Ar \&np Ta No "Number of pages of memory concept100-4p" +-rv Reverse video concept100-rv +.El +.Ed +.Sh CAPABILITIES +The characters in the +.Em Notes +function +field in the table have the following meanings +(more than one may apply to a capability): +.Pp +.Bd -unfilled -offset indent +N indicates numeric parameter(s) +P indicates that padding may be specified +* indicates that padding may be based on the number of lines affected +o indicates capability is obsolete +.Ed +.Pp +.Dq Obsolete +capabilities have no +.Em terminfo +equivalents, +since they were considered useless, +or are subsumed by other capabilities. +New software should not rely on them at all. +.Pp +.Bl -column indent indent indent +.Sy Name Type Notes Description +functions +.It "ae str (P) End alternate character set." +.It AL str (NP*) Add" +.Em n +new blank lines +.It "al str (P*) Add new blank line." +.It "am bool Terminal has automatic margins." +.It "as str (P) Start alternate character set." +.It "bc str (o) Backspace if not." +.Sy \&^H . +.It "bl str (P) Audible signal (bell)." +.It "bs bool (o) Terminal can backspace with" +.Sy \&^H . +.It "bt str (P) Back tab." +.It "bw bool " Ta Sy \&le +(backspace) wraps from column 0 to last column. +.It "CC str Terminal settable command character in prototype." +.It "cd str (P*) Clear to end of display." +.It "ce str (P) Clear to end of line." +.It "ch str (NP) Set cursor column (horizontal position)." +.It "cl str (P*) Clear screen and home cursor." +.It "CM str (NP) Memory-relative cursor addressing." +.It "cm str (NP) Screen-relative cursor motion." +.It "co num Number of columns in a line (See" +.Sx BUGS +section below). +.It "cr str (P) Carriage return." +.It "cs str (NP) Change scrolling region (VT100)." +.It "ct str (P) Clear all tab stops." +.It "cv str (NP) Set cursor row (vertical position)." +.It "da bool Display may be retained above the screen." +.It "dB num (o) Milliseconds of" +.Sy \&bs +delay needed (default 0). +.It "db bool Display may be retained below the screen." +.It "DC str (NP*) Delete" +.Em n +characters. +.It "dC num (o) Milliseconds of" +.Sy \&cr +delay needed (default 0). +.It "dc str (P*) Delete character." +.It "dF num (o) Milliseconds of" +.Sy \&ff +delay needed (default 0). +.It "DL str (NP*) Delete" +.Ar n +lines. +.It "dl str (P*) Delete line." +.It "dm str Enter delete mode." +.It "dN num (o) Milliseconds of +.Sy \&nl +delay needed (default 0). +.It "DO str (NP*) Move cursor down: +.Ar n +lines. +.It "do str Down one line." +.It "ds str Disable status line." +.It "dT num (o) Milliseconds of horizontal tab delay needed (default 0)." +.It "dV num (o) Milliseconds of vertical tab delay needed (default 0)." +.It "ec str (NP) Erase" +.Ar n +characters. +.It "ed str End delete mode." +.It "ei str End insert mode." +.It "eo bool Can erase overstrikes with a blank." +.It "EP bool (o) Even parity." +.It "es bool Escape can be used on the status line." +.It "ff str (P*) Hardcopy terminal page eject." +.It "fs str Return from status line." +.It "gn bool Generic line type, for example dialup, switch)." +.It "hc bool Hardcopy terminal." +.It "HD bool (o) Half-duplex." +.It "hd str Half-line down (forward 1/2 linefeed)." +.It "ho str (P) Home cursor." +.It "hs bool Has extra" +.Dq status line . +.It "hu str Half-line up (reverse 1/2 linefeed)." +.It "hz bool Cannot print ``~'' (Hazeltine)." +.It "i1-i3 str Terminal initialization strings" +.Pf ( Xr terminfo +only) +.It "IC str (NP*) Insert" +.Ar n +blank characters. +.It "ic str (P*) Insert character." +.It "if str Name of file containing initialization string." +.It "im str Enter insert mode." +.It "in bool Insert mode distinguishes nulls." +.It "iP str Pathname of program for initialization" +.Pf ( Xr terminfo +only). +.It "ip str (P*) Insert pad after character inserted." +.It "is str Terminal initialization string" +.Pf ( Nm termcap +only). +.It "it num Tabs initially every" +.Ar n +positions. +.It "K1 str Sent by keypad upper left." +.It "K2 str Sent by keypad upper right." +.It "K3 str Sent by keypad center." +.It "K4 str Sent by keypad lower left." +.It "K5 str Sent by keypad lower right." +.It "k0-k9 str Sent by function keys 0-9." +.It "kA str Sent by insert-line key." +.It "ka str Sent by clear-all-tabs key." +.It "kb str Sent by backspace key." +.It "kC str Sent by clear-screen or erase key." +.It "kD str Sent by delete-character key." +.It "kd str Sent by down-arrow key." +.It "kE str Sent by clear-to-end-of-line key." +.It "ke str Out of" +.Dq keypad transmit +mode. +.It "kF str Sent by scroll-forward/down key." +.It "kH str Sent by home-down key." +.It "kh str Sent by home key." +.It "kI str Sent by insert-character or enter-insert-mode key." +.It "kL str Sent by delete-line key." +.It "kl str Sent by left-arrow key." +.It "kM str Sent by insert key while in insert mode." +.It "km bool Has a" +.Dq meta +key (shift, sets parity bit). +.It "kN str Sent by next-page key." +.It "kn num (o) Number of function" +.Pq Sy \&k\&0 Ns \- Sy \&k\&9 +keys (default 0). +.It "ko str (o) Termcap entries for other non-function keys." +.It "kP str Sent by previous-page key." +.It "kR str Sent by scroll-backward/up key." +.It "kr str Sent by right-arrow key." +.It "kS str Sent by clear-to-end-of-screen key." +.It "ks str Put terminal in" +.Dq keypad transmit +mode. +.It "kT str Sent by set-tab key." +.It "kt str Sent by clear-tab key." +.It "ku str Sent by up-arrow key." +.It "l0-l9 str Labels on function keys if not" +.Dq \&f Ns Em n . +.It "LC bool (o) Lower-case only." +.It "LE str (NP) Move cursor left" +.Ar n +positions. +.It "le str (P) Move cursor left one position." +.It "li num Number of lines on screen or page (See" +.Sx BUGS +section below) +.It "ll str Last line, first column +.It "lm num Lines of memory if >" Sy \&li +(0 means varies). +.It "ma str (o) Arrow key map (used by" +.Xr \&vi +version 2 only). +.It "mb str Turn on blinking attribute." +.It "md str Turn on bold (extra bright) attribute." +.It "me str Turn off all attributes." +.It "mh str Turn on half-bright attribute." +.It "mi bool Safe to move while in insert mode." +.It "mk str Turn on blank attribute (characters invisible)." +.It "ml str (o) Memory lock on above cursor." +.It "mm str Turn on" +.Dq meta mode +(8th bit). +.It "mo str Turn off" +.Dq meta mode . +.It "mp str Turn on protected attribute." +.It "mr str Turn on reverse-video attribute." +.It "ms bool Safe to move in standout modes." +.It "mu str (o) Memory unlock (turn off memory lock)." +.It "nc bool (o) No correctly-working" +.Sy \&cr +(Datamedia 2500, Hazeltine 2000). +.It "nd str Non-destructive space (cursor right)." +.It "NL bool (o)" Ta Sy \&\en No "is newline, not line feed." +.It "nl str (o) Newline character if not" Sy \en . +.It "ns bool (o) Terminal is a" Tn CRT No "but doesn't scroll." +.It "nw str (P) Newline (behaves like" +.Sy \&cr +followed by +.Sy \&do ). +.It "OP bool (o) Odd parity." +.It "os bool Terminal overstrikes." +.It "pb num Lowest baud where delays are required." +.It "pc str Pad character (default" Tn NUL ). +.It "pf str Turn off the printer." +.It "pk str Program function key" +.Em n +to type string +.Em s +.Pf ( Xr terminfo +only). +.It "pl str Program function key" +.Em n +to execute string +.Em s +.Pf ( Xr terminfo +only). +.It "pO str (N) Turn on the printer for" +.Em n +bytes. +.It "po str Turn on the printer." +.It "ps str Print contents of the screen." +.It "pt bool (o) Has hardware tabs (may need to be set with" +.Sy \&is ). +.It "px str Program function key" +.Em n +to transmit string +.Em s +.Pf ( Xr terminfo +only). +.It "r1-r3 str Reset terminal completely to sane modes" +.Pf ( Xr terminfo +only). +.It "rc str (P) Restore cursor to position of last" +.Sy \&sc . +.It "rf str Name of file containing reset codes." +.It "RI str (NP) Move cursor right" +.Em n +positions. +.It "rp str (NP*) Repeat character" +.Em c n +times. +.It "rs str Reset terminal completely to sane modes" +.Pf ( Nm termcap +only). +.It "sa str (NP) Define the video attributes." +.It "sc str (P) Save cursor position." +.It "se str End standout mode." +.It "SF str (NP*) Scroll forward" +.Em n +lines. +.It "sf str (P) Scroll text up." +.It "sg num Number of garbage chars left by" +.Sy \&so +or +.Sy \&se +(default 0). +.It "so str Begin standout mode." +.It "SR str (NP*) Scroll backward" +.Em n +lines. +.It "sr str (P) Scroll text down." +.It "st str Set a tab in all rows, current column." +.It "ta str (P) Tab to next 8-position hardware tab stop." +.It "tc str Entry of similar terminal \- must be last." +.It "te str String to end programs that use" +.Nm termcap . +.It "ti str String to begin programs that use" +.Nm termcap . +.It "ts str (N) Go to status line, column" +.Em n . +.It "UC bool (o) Upper-case only." +.It "uc str Underscore one character and move past it." +.It "ue str End underscore mode." +.It "ug num Number of garbage chars left by" +.Sy \&us +or +.Sy \&ue +(default 0). +.It "ul bool Underline character overstrikes." +.It "UP str (NP*) Move cursor up" +.Em n +lines. +.It "up str Upline (cursor up)." +.It "us str Start underscore mode." +.It "vb str Visible bell (must not move cursor)." +.It "ve str Make cursor appear normal (undo" +.Sy \&vs Ns / Sy \&vi ) . +.It "vi str Make cursor invisible." +.It "vs str Make cursor very visible." +.It "vt num Virtual terminal number (not supported on all systems)." +.It "wi str (N) Set current window." +.It "ws num Number of columns in status line." +.It "xb bool Beehive" +.Pf ( "f1=" Dv ESC , +.Pf "f2=" Sy \&^C ) . +.It "xn bool Newline ignored after 80 cols (Concept)." +.It "xo bool Terminal uses xoff/xon" +.Pq Dv DC3 Ns / Ns Dv DC1 +handshaking. +.It "xr bool (o) Return acts like" +.Sy "ce cr nl" +(Delta Data). +.It "xs bool Standout not erased by overwriting (Hewlett-Packard)." +.It "xt bool Tabs ruin, magic" +.SY \&so +char (Teleray 1061). +.It "xx bool (o) Tektronix 4025 insert-line." +.El +.Ss A Sample Entry +The following entry, which describes the Concept\-100, is among the more +complex entries in the +.Nm termcap +file as of this writing. +.Pp +.Bd -literal +ca\||\|concept100\||\|c100\||\|concept\||\|c104\||\|concept100-4p\||\|HDS Concept\-100:\e + :al=3*\eE^R:am:bl=^G:cd=16*\eE^C:ce=16\eE^U:cl=2*^L:cm=\eEa%+ %+ :\e + :co#80:.cr=9^M:db:dc=16\eE^A:dl=3*\eE^B:do=^J:ei=\eE\e200:eo:im=\eE^P:in:\e + :ip=16*:is=\eEU\eEf\eE7\eE5\eE8\eEl\eENH\eEK\eE\e200\eEo&\e200\eEo\e47\eE:k1=\eE5:\e + :k2=\eE6:k3=\eE7:kb=^h:kd=\eE<:ke=\eEx:kh=\eE?:kl=\eE>:kr=\eE=:ks=\eEX:\e + :ku=\eE;:le=^H:li#24:mb=\eEC:me=\eEN\e200:mh=\eEE:mi:mk=\eEH:mp=\eEI:\e + :mr=\eED:nd=\eE=:pb#9600:rp=0.2*\eEr%.%+ :se=\eEd\eEe:sf=^J:so=\eEE\eED:\e + :.ta=8\et:te=\eEv \e200\e200\e200\e200\e200\e200\eEp\er\en:\e + :ti=\eEU\eEv 8p\eEp\er:ue=\eEg:ul:up=\eE;:us=\eEG:\e + :vb=\eEk\e200\e200\e200\e200\e200\e200\e200\e200\e200\e200\e200\e200\e200\e200\eEK:\e + :ve=\eEw:vs=\eEW:vt#8:xn:\e + :bs:cr=^M:dC#9:dT#8:nl=^J:ta=^I:pt: +.Ed +.Pp +Entries may continue onto multiple lines by giving a \e as the last +character of a line, and empty fields +may be included for readability (here between the last field on a line +and the first field on the next). +Comments may be included on lines beginning with +.Dq # . +.Ss Types of Capabilities +Capabilities in +.Nm termcap +are of three types: Boolean capabilities, +which indicate particular features that the terminal has; +numeric capabilities, +giving the size of the display or the size of other attributes; +and string capabilities, +which give character sequences that can be used to perform particular +terminal operations. +All capabilities have two-letter codes. +For instance, the fact that +the Concept has +.Em automatic margins +(an automatic return and linefeed +when the end of a line is reached) is indicated by the Boolean capability +.Sy \&am . +Hence the description of the Concept includes +.Sy \&am . +.Pp +Numeric capabilities are followed by the character `#' then the value. +In the example above +.Sy \&co , +which indicates the number of columns the display has, +gives the value `80' for the Concept. +.Pp +Finally, string-valued capabilities, such as +.Sy \&ce +(clear-to-end-of-line +sequence) are given by the two-letter code, an `=', then a string +ending at the next following `:'. +A delay in milliseconds may appear after +the `=' in such a capability, +which causes padding characters to be supplied by +.Xr tputs +after the remainder of the string is sent to provide this delay. +The delay can be either a number, +such as `20', or a number followed by +an `*', +such as `3*'. +An `*' indicates that the padding required is proportional +to the number of lines affected by the operation, and the amount given is +the per-affected-line padding required. +(In the case of insert-character, +the factor is still the number of +.Em lines +affected; +this is always 1 unless the terminal has +.Sy \&in +and the software uses it.) +When an `*' is specified, it is sometimes useful to give a delay of the form +`3.5' to specify a delay per line to tenths of milliseconds. +(Only one decimal place is allowed.) +.Pp +A number of escape sequences are provided in the string-valued capabilities +for easy encoding of control characters there. +.Sy \&\eE +maps to an +.Dv ESC +character, +.Sy \&^X +maps to a control-X for any appropriate X, +and the sequences +.Sy \&\en +.Sy \&\er +.Sy \&\et +.Sy \&\eb +.Sy \&\ef +map to linefeed, return, tab, backspace, and formfeed, respectively. +Finally, characters may be given as three octal digits after a +.Sy \&\e , +and the characters +.Sy \&^ +and +.Sy \&\e +may be given as +.Sy \&\e^ +and +.Sy \&\e\e . +If it is necessary to place a +.Sy \&: +in a capability it must be escaped in +octal as +.Sy \&\e072 . +If it is necessary to place a +.Dv NUL +character in a string capability it +must be encoded as +.Sy \&\e200 . +(The routines that deal with +.Nm termcap +use C strings and strip the high bits of the output very late, so that +a +.Sy \&\e200 +comes out as a +.Sy \&\e000 +would.) +.Pp +Sometimes individual capabilities must be commented out. +To do this, put a period before the capability name. +For example, see the first +.Sy \&cr +and +.Sy \&ta +in the example above. +.Ss Preparing Descriptions +The most effective way to prepare a terminal description is by imitating +the description of a similar terminal in +.Nm termcap +and to build up a description gradually, using partial descriptions +with +.Xr \&vi +to check that they are correct. +Be aware that a very unusual terminal may expose deficiencies in +the ability of the +.Nm termcap +file to describe it +or bugs in +.Xr \&vi . +To easily test a new terminal description you are working on +you can put it in your home directory in a file called +.Pa .termcap +and programs will look there before looking in +.Pa /usr/share/misc/termcap . +You can also set the environment variable +.Ev TERMPATH +to a list of absolute file pathnames (separated by spaces or colons), +one of which contains the description you are working on, +and programs will search them in the order listed, and nowhere else. +See +.Xr termcap 3 . +The +.Ev TERMCAP +environment variable is usually set to the +.Nm termcap +entry itself +to avoid reading files when starting up a program. +.Pp +To get the padding for insert-line right +(if the terminal manufacturer did not document it), +a severe test is to use +.Xr \&vi +to edit +.Pa /etc/passwd +at 9600 baud, delete roughly 16 lines from the middle of the screen, +then hit the `u' key several times quickly. +If the display 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 of the display is given by the +.Sy \&co +numeric capability. +If the display is a +.Tn CRT , +then the +number of lines on the screen is given by the +.Sy \&li +capability. +If the display wraps around to the beginning of the next line when +the cursor reaches the right margin, then it should have the +.Sy \&am +capability. +If the terminal can clear its screen, +the code to do this is given by the +.Sy \&cl +string capability. +If the terminal overstrikes +(rather than clearing the position when a character is overwritten), +it should have the +.Sy \&os +capability. +If the terminal is a printing terminal, +with no soft copy unit, +give it both +.Sy \&hc +and +.Sy \&os . +.Pf ( Sy \&os +applies to storage scope terminals, +such as the Tektronix 4010 series, +as well as to hard copy and +.Tn APL +terminals.) +If there is a code to move the cursor to the left edge of the current row, +give this as +.Sy \&cr . +(Normally this will be carriage-return, +.Sy \&^M . ) +If there is a code to produce an audible signal (bell, beep, +etc. ) , +give this as +.Sy \&bl . +.Pp +If there is a code (such as backspace) +to move the cursor one position to the left, +that capability should be given as +.Sy \&le . +Similarly, +codes to move to the right, up, and down +should be given as +.Sy \&nd , +.Sy \&up , +and +.Sy \&do , +respectively. +These +.Em local cursor motions +should not alter the text they pass over; +for example, you would not normally use +.Dq nd=\ \& +unless the terminal has the +.Sy \&os +capability, +because the space would erase the character moved over. +.Pp +A very important point here is that the local cursor motions encoded +in +.Nm termcap +have undefined behavior at the left and top edges of a +.Tn CRT +display. +Programs should never attempt to backspace around the left edge, +unless +.Sy \&bw +is given, and never attempt to go up off the top +using local cursor motions. +.Pp +In order to scroll text up, +a program goes to the bottom left corner of the screen and sends the +.Sy \&sf +(index) string. +To scroll text down, +a program goes to the top left corner of the screen and sends the +.Sy \&sr +(reverse index) string. +The strings +.Sy \&sf +and +.Sy \&sr +have undefined behavior +when not on their respective corners of the screen. +Parameterized versions of the scrolling sequences are +.Sy \&SF +and +.Sy \&SR , +which have the same semantics as +.Sy \&sf +and +.Sy \&sr +except that they take one parameter +and scroll that many lines. +They also have undefined behavior +except at the appropriate corner of the screen. +.Pp +The +.Sy \&am +capability tells whether the cursor sticks at the right +edge of the screen when text is output there, +but this does not necessarily apply to +.Sy \&nd +from the last column. +Leftward local motion is defined from the left edge only when +.Sy \&bw +is given; then an +.Sy \&le +from the left edge will move to the right edge of the previous row. +This is useful for drawing a box around the edge of the screen, +for example. +If the terminal has switch-selectable automatic margins, +the +.Nm termcap +description usually assumes that this feature is on, +.Em i.e . , +.Sy \&am . +If the terminal has a command +that moves to the first column of the next line, +that command can be given as +.Sy \&nw +(newline). +It is permissible for this to clear the remainder of the current line, +so if the terminal has no correctly-working +.Tn \&CR +and +.Tn \&LF +it may still be possible to craft a working +.Sy \&nw +out of one or both of them. +.Pp +These capabilities suffice to describe hardcopy and +.Dq glass-tty +terminals. +Thus the Teletype model 33 is described as +.Bd -literal -offset indent +T3\||\|tty33\||\|33\||\|tty\||\|Teletype model 33:\e + :bl=^G:co#72:cr=^M:do=^J:hc:os: +.Ed +.Pp +and the Lear Siegler +.Tn ADM Ns \-3 +is described as +.Bd -literal -offset indent +l3\||\|adm3\||\|3\||\|LSI \s-1ADM\s0-3:\e +:am:bl=^G:cl=^Z:co#80:cr=^M:do=^J:le=^H:li#24:sf=^J: +.Ed +.Ss Parameterized Strings +Cursor addressing and other strings requiring parameters +are described by a +parameterized string capability, with +.Xr printf 3 Ns \-like +escapes +.Sy \&%x +in it, +while other characters are passed through unchanged. +For example, to address the cursor the +.Sy \&cm +capability is given, using two parameters: the row and column to move 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 an analogous +.Sy \&CM +capability.) +.Pp +The +.Sy \&% +encodings have the following meanings: +.Bl -column xxxxx +.It "%% output `%'" +.It "%d output value as in" +.Xr printf +%d +.It "%2 output value as in" +.Xr printf +%2d +.It "%3 output value as in" +.Xr printf +%3d +.It "%. output value as in" +.Xr printf +%c +.It "%+" Ns Em x Ta No add +.Em x +to value, then do %. +.It "%>" Ns Em \&xy Ta No if +value > +.Em x +then add +.Em y , +no output +.It "%r reverse order of two parameters, no output" +.It "%i increment by one, no output" +.It "%n exclusive-or all parameters with 0140 (Datamedia 2500)" +.It "%B" Ta Tn BCD No "(16*(value/10)) + (value%10), no output" +.It "%D Reverse coding (value \- 2*(value%16)), no output (Delta Data)." +.El +.Pp +Consider the Hewlett-Packard 2645, which, to get to row 3 and column 12, needs +to be sent +.Dq \eE&a12c03Y +padded for 6 milliseconds. +Note that the order +of the row and column coordinates is reversed here +and that the row and column +are sent as two-digit integers. +Thus its +.Sy \&cm +capability is +.Dq Li cm=6\eE&%r%2c%2Y . +.Pp +The Datamedia 2500 needs the current row and column sent +encoded in binary using +.Dq \&%. . +Terminals that use +.Dq \&%. +need to be able to +backspace the cursor +.Po Sy \&le Pc +and to move the cursor up one line on the screen +.Po Sy \&up Pc . +This is necessary because it is not always safe to transmit +.Sy \&\en , +.Sy \&^D , +and +.Sy \&\er , +as the system may change or discard them. +(Programs using +.Nm termcap +must set terminal modes so that tabs are not expanded, so +.Sy \&\et +is safe to send. +This turns out to be essential for the Ann Arbor 4080.) +.Pp +A final example is the Lear Siegler +.Tn ADM Ns \-3a, +which offsets row and column +by a blank character, thus +.Dq Li cm=\eE=%+ %+\ \& . +.Pp +Row or column absolute cursor addressing +can be given as single parameter capabilities +.Sy \&ch +(horizontal position absolute) and +.Sy \&cv +(vertical position absolute). +Sometimes these are shorter than the more general two-parameter sequence +(as with the Hewlett-Packard 2645) and can be used in preference to +.Sy \&cm . +If there are parameterized local motions +.Pf ( Em e.g . , +move +.Ar n +positions to the right) +these can be given as +.Sy \&DO , +.Sy \&LE , +.Sy \&RI , +and +.Sy \&UP +with a single parameter indicating how many positions to move. +These are primarily useful if the terminal does not have +.Sy \&cm , +such as the Tektronix 4025. +.Ss Cursor Motions +.Pp +If the terminal has a fast way to home the cursor +(to the very upper left corner of the screen), this can be given as +.Sy \&ho . +Similarly, a fast way of getting to the lower left-hand corner +can be given as +.Sy \&ll ; +this may involve going up with +.Sy \&up +from the home position, +but a program should never do this itself (unless +.Sy \&ll +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 +cursor address (0,0): to the top left corner of the screen, not of memory. +(Therefore, the +.Dq \eEH +sequence on Hewlett-Packard terminals +cannot be used for +.Sy \&ho . ) +.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 +.Sy \&ce . +If the terminal can clear from the current position to the end of the +display, this should be given as +.Sy \&cd . +.Sy \&cd +must only be invoked from the first column of a line. +(Therefore, +it can be simulated by a request to delete a large number of lines, +if a true +.Sy \&cd +is not available.) +.Ss Insert/Delete Line +If the terminal can open a new blank line +before the line containing the cursor, +this should be given as +.Sy \&al ; +this must be invoked only from the first +position of a line. +The cursor must then appear at the left of the newly blank line. +If the terminal can delete the line that the cursor is on, this +should be given as +.Sy \&dl ; +this must only be used from the first position on +the line to be deleted. +Versions of +.Sy \&al +and +.Sy \&dl +which take a single parameter +and insert or delete that many lines +can be given as +.Sy \&AL +and +.Sy \&DL . +If the terminal has a settable scrolling region +(like the VT100), +the command to set this can be described with the +.Sy \&cs +capability, +which takes two parameters: the top and bottom lines of the scrolling region. +The cursor position is, alas, undefined after using this command. +It is possible to get the effect of insert or delete line +using this command \(em the +.Sy \&sc +and +.Sy \&rc +(save and restore cursor) commands are also useful. +Inserting lines at the top or bottom of the screen can also be done using +.Sy \&sr +or +.Sy \&sf +on many terminals without a true insert/delete line, +and is often faster even on terminals with those features. +.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 +.Sy \&wi . +The four parameters are the starting and ending lines in memory +and the starting and ending columns in memory, in that order. +(This +.Xr terminfo +capability is described for completeness. +It is unlikely that any +.Nm termcap Ns \- using +program will support it.) +.Pp +If the terminal can retain display memory above the screen, then the +.Sy \&da +capability should be given; +if display memory can be retained +below, then +.Sy \&db +should be given. +These indicate +that deleting a line or scrolling may bring non-blank lines up from below +or that scrolling back with +.Sy \&sr +may bring down non-blank lines. +.Ss Insert/Delete Character +There are two basic kinds of intelligent terminals with respect to +insert/delete character that can be described using +.Nm termcap . +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. +You can determine +the kind of terminal you have by clearing the screen then typing +text separated by cursor motions. +Type +.Dq Li abc\ \ \ \ def +using local +cursor motions (not spaces) between the +.Dq abc +and the +.Dq def . +Then position the cursor before the +.Dq 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 +.Dq abc +shifts over to the +.Dq def +which then move together around the end of the +current line and onto the next as you insert, then you have the second type of +terminal and should give the capability +.Sy \&in , +which stands for +.Dq insert null . +While these are two logically separate attributes +(one line +.Em \&vs . +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 +.Nm Termcap +can describe both terminals that have an insert mode and terminals +that send a simple sequence to open a blank position on the current line. +Give as +.Sy \&im +the sequence to get into insert mode. +Give as +.Sy \&ei +the sequence to leave insert mode. +Now give as +.Sy \&ic +any sequence that needs to be sent just before +each character to be inserted. +Most terminals with a true insert mode +will not give +.Sy \&ic ; +terminals that use a sequence to open a screen +position should give it here. +(If your terminal has both, +insert mode is usually preferable to +.Sy \&ic . +Do not give both unless the terminal actually requires both to be used +in combination.) +If post-insert padding is needed, give this as a number of milliseconds +in +.Sy \&ip +(a string option). +Any other sequence that may need to be +sent after insertion of a single character can also be given in +.Sy \&ip . +If your terminal needs to be placed into an `insert mode' +and needs a special code preceding each inserted character, +then both +.Sy \&im Ns / Sy \&ei +and +.Sy \&ic +can be given, and both will be used. +The +.Sy \&IC +capability, with one parameter +.Em n , +will repeat the effects of +.Sy \&ic +.Em n +times. +.Pp +It is occasionally necessary to move around while in insert mode +to delete characters on the same line +.Pf ( Em 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 +.Sy \&mi +to speed up inserting +in this case. +Omitting +.Sy \&mi +will affect only speed. +Some terminals +(notably Datamedia's) must not have +.Sy \&mi +because of the way their +insert mode works. +.Pp +Finally, you can specify +.Sy \&dc +to delete a single character, +.Sy \&DC +with one parameter +.Em n +to delete +.Em n +characters, +and delete mode by giving +.Sy \&dm +and +.Sy \&ed +to enter and exit delete mode +(which is any mode the terminal needs to be placed in for +.Sy \&dc +to work). +.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 +.Em standout mode , +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 +.Sy \&so +and +.Sy \&se , +respectively. +If the code to change into or out of standout +mode leaves one or even two blank spaces or garbage characters on the screen, +as the +.Tn TVI +912 and Teleray 1061 do, +then +.Sy \&sg +should be given to tell how many characters are left. +.Pp +Codes to begin underlining and end underlining can be given as +.Sy \&us +and +.Sy \&ue , +respectively. +Underline mode change garbage is specified by +.Sy \&ug , +similar to +.Sy \&sg . +If the terminal has a code to underline the current character and move +the cursor one position to the right, +such as the Microterm Mime, +this can be given as +.Sy \&uc . +.Pp +Other capabilities to enter various highlighting modes include +.Sy \&mb +(blinking), +.Sy \&md +(bold or extra bright), +.Sy \&mh +(dim or half-bright), +.Sy \&mk +(blanking or invisible text), +.Sy \&mp +(protected), +.Sy \&mr +(reverse video), +.Sy \&me +(turn off +.Em all +attribute modes), +.Sy \&as +(enter alternate character set mode), and +.Sy \&ae +(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 mode, +this should be given as +.Sy \&sa +(set attributes), taking 9 parameters. +Each parameter is either 0 or 1, +as the corresponding attributes is on or off. +The 9 parameters are, in order: standout, underline, reverse, blink, +dim, bold, blank, protect, and alternate character set. +Not all modes need be supported by +.Sy \&sa , +only those for which corresponding attribute commands exist. +(It is unlikely that a +.Nm termcap Ns \-using +program will support this capability, which is defined for compatibility +with +.Xr terminfo . ) +.Pp +Terminals with the +.Dq magic cookie +glitches +.Pf ( Sy \&sg +and +.Sy \&ug ) , +rather than maintaining extra attribute bits for each character cell, +instead deposit special +.Dq cookies , +or +.Dq garbage characters ,, +when they receive mode-setting sequences, +which affect the display algorithm. +.Pp +Some terminals, +such as the Hewlett-Packard 2621, +automatically leave standout +mode when they move to a new line or when the cursor is addressed. +Programs using standout mode +should exit standout mode on such terminals +before moving the cursor or sending a newline. +On terminals where this is not a problem, +the +.Sy \&ms +capability should be present +to say that this overhead is unnecessary. +.Pp +If the terminal has +a way of flashing the screen to indicate an error quietly +(a bell replacement), +this can be given as +.Sy \&vb ; +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 change, for example, a non-blinking underline into an easier-to-find +block or blinking underline), +give this sequence as +.Sy \&vs . +If there is a way to make the cursor completely invisible, give that as +.Sy \&vi . +The capability +.Sy \&ve , +which undoes the effects of both of these modes, +should also be given. +.Pp +If your terminal correctly displays underlined characters +(with no special codes needed) +even though it does not overstrike, +then you should give the capability +.Sy \&ul . +If overstrikes are erasable with a blank, +this should be indicated by giving +.Sy \&eo . +.Ss Keypad +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 mode +(this applies, for example, to the unshifted Hewlett-Packard 2621 keys). +If the keypad can be set to transmit or not transmit, +give these codes as +.Sy \&ks +and +.Sy \&ke . +Otherwise the keypad is assumed to always transmit. +The codes sent by the left-arrow, right-arrow, up-arrow, down-arrow, +and home keys can be given as +.Sy \&kl , +.Sy \&kr , +.Sy \&ku , +.Sy \&kd , +and +.Sy \&kh , +respectively. +If there are function keys such as f0, f1, ..., f9, the codes they send +can be given as +.Sy \&k0 , +.Sy \&k1 , +..., +.Sy \&k9 . +If these keys have labels other than the default f0 through f9, the labels +can be given as +.Sy \&l0 , +.Sy \&l1 , +..., +.Sy \&l9 . +The codes transmitted by certain other special keys can be given: +.Sy \&kH +(home down), +.Sy \&kb +(backspace), +.Sy \&ka +(clear all tabs), +.Sy \&kt +(clear the tab stop in this column), +.Sy \&kC +(clear screen or erase), +.Sy \&kD +(delete character), +.Sy \&kL +(delete line), +.Sy \&kM +(exit insert mode), +.Sy \&kE +(clear to end of line), +.Sy \&kS +(clear to end of screen), +.Sy \&kI +(insert character or enter insert mode), +.Sy \&kA +(insert line), +.Sy \&kN +(next page), +.Sy \&kP +(previous page), +.Sy \&kF +(scroll forward/down), +.Sy \&kR +(scroll backward/up), and +.Sy \&kT +(set a tab stop in this column). +In addition, if the keypad has a 3 by 3 array of keys +including the four arrow keys, then the other five keys can be given as +.Sy \&K1 , +.Sy \&K2 , +.Sy \&K3 , +.Sy \&K4 , +and +.Sy \&K5 . +These keys are useful when the effects of a 3 by 3 directional pad are needed. +The obsolete +.Sy \&ko +capability formerly used to describe +.Dq other +function keys has been +completely supplanted by the above capabilities. +.Pp +The +.Sy \&ma +entry is also used to indicate arrow keys on terminals that have +single-character arrow keys. +It is obsolete but still in use in +version 2 of +.Sy \&vi +which must be run on some minicomputers due to +memory limitations. +This field is redundant with +.Sy \&kl , +.Sy \&kr , +.Sy \&ku , +.Sy \&kd , +and +.Sy \&kh . +It consists of groups of two characters. +In each group, the first character is what an arrow key sends, and the +second character is the corresponding +.Sy \&vi +command. +These commands are +.Ar h +for +.Sy \&kl , +.Ar j +for +.Sy \&kd , +.Ar k +for +.Sy \&ku , +.Ar l +for +.Sy \&kr , +and +.Ar H +for +.Sy \&kh . +For example, the Mime would have +.Dq Li ma=^Hh^Kj^Zk^Xl +indicating arrow keys left (^H), down (^K), up (^Z), and right (^X). +(There is no home key on the Mime.) +.Ss Tabs and Initialization +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 +.Sy \&ti +and +.Sy \&te . +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 screen-sized window must be fixed into +the display for cursor addressing to work properly. +This is also used for the Tektronix 4025, where +.Sy \&ti +sets the command character to be the one used by +.Nm termcap . +.Pp +Other capabilities +include +.Sy \&is , +an initialization string for the terminal, +and +.Sy \&if , +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 +.Nm termcap +description. +They are normally sent to the terminal by the +.Xr tset +program each time the user logs in. +They will be printed in the following order: +.Sy \&is ; +setting tabs using +.Sy \&ct +and +.Sy \&st ; +and finally +.Sy \&if . +.Pf ( Xr Terminfo +uses +.Sy \&i\&1-i2 +instead of +.Sy \&is +and runs the program +.Sy \&iP +and prints +.Sy "\&i\&3" +after the other initializations.) +A pair of sequences that does a harder reset from a totally unknown state +can be analogously given as +.Sy \&rs +and +.Sy \&if . +These strings are output by the +.Xr reset +program, which is used when the terminal gets into a wedged state. +.Pf ( Xr Terminfo +uses +.Sy "\&r1-r3" +instead of +.Sy \&rs . ) +Commands are normally placed in +.Sy \&rs +and +.Sy \&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 +.Sy \&is , +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 +If the terminal has hardware tabs, +the command to advance to the next tab stop can be given as +.Sy \&ta +(usually +.Sy \&^I ) . +A +.Dq backtab +command which moves leftward to the previous tab stop +can be given as +.Sy \&bt . +By convention, +if the terminal driver modes indicate that tab stops are being expanded +by the computer rather than being sent to the terminal, +programs should not use +.Sy \&ta +or +.Sy \&bt +even if they are present, +since the user may not have the tab stops properly set. +If the terminal has hardware tabs that are initially set every +.Ar n +positions when the terminal is powered up, then the numeric parameter +.Sy \&it +is given, showing the number of positions between tab stops. +This is normally used by the +.Xr tset +command to determine whether to set the driver mode for hardware tab +expansion, and whether to set the tab stops. +If the terminal has tab stops that can be saved in nonvolatile memory, the +.Nm termcap +description can assume that they are properly set. +.Pp +If there are commands to set and clear tab stops, they can be given as +.Sy \&ct +(clear all tab stops) and +.Sy \&st +(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 +.Sy \&is +or +.Sy \&if . +.Ss Delays +Certain capabilities control padding in the terminal driver. +These are primarily needed by hardcopy terminals and are used by the +.Xr tset +program to set terminal driver modes appropriately. +Delays embedded in the capabilities +.Sy \&cr , +.Sy \&sf , +.Sy \&le , +.Sy \&ff , +and +.Sy \&ta +will cause the appropriate delay bits to be set in the terminal driver. +If +.Sy \&pb +(padding baud rate) is given, these values can be ignored at baud rates +below the value of +.Sy \&pb . +For +.Bx 4.2 +.Xr tset , +the delays are given as numeric capabilities +.Sy \&dC , +.Sy \&dN , +.Sy \&dB , +.Sy \&dF , +and +.Sy \&dT +instead. +.Ss Miscellaneous +If the terminal requires other than a +.Dv NUL +(zero) character as a pad, +this can be given as +.Sy \&pc . +Only the first character of the +.Sy \&pc +string is used. +.Pp +If the terminal has commands to save and restore the position of the +cursor, give them as +.Sy \&sc +and +.Sy \&rc . +.Pp +If the terminal has an extra +.Dq status line +that is not normally used by +software, this fact can be indicated. +If the status line is viewed as an extra line below the bottom line, +then the capability +.Sy \&hs +should be given. +Special strings to go to a position in the status line and to return +from the status line can be given as +.Sy \&ts +and +.Sy \&fs . +.Pf ( Xr \&fs +must leave the cursor position in the same place that it was before +.Sy \&ts . +If necessary, the +.Sy \&sc +and +.Sy \&rc +strings can be included in +.Sy \&ts +and +.Sy \&fs +to get this effect.) +The capability +.Sy \&ts +takes one parameter, which is the column number of the status line +to which the cursor is to be moved. +If escape sequences and other special commands such as tab work while in +the status line, the flag +.Sy \&es +can be given. +A string that turns off the status line (or otherwise erases its contents) +should be given as +.Sy \&ds . +The status line is normally assumed to be the same width as the +rest of the screen, +.Em i.e . , +.Sy \&co . +If the status line is a different width (possibly because the terminal +does not allow an entire line to be loaded), then its width in columns +can be indicated with the numeric parameter +.Sy \&ws . +.Pp +If the terminal can move up or down half a line, this can be +indicated with +.Sy \&hu +(half-line up) and +.Sy \&hd +(half-line down). +This is primarily useful for superscripts and subscripts on hardcopy +terminals. +If a hardcopy terminal can eject to the next page (form feed), +give this as +.Sy \&ff +(usually +.Sy \&^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 +.Sy \&rp . +The first parameter is the character to be repeated and the second is +the number of times to repeat it. +(This is a +.Xr terminfo +feature that is unlikely to be supported by a program that uses +.Nm termcap . ) +.Pp +If the terminal has a settable command character, such as the +Tektronix 4025, this can be indicated with +.Sy \&CC . +A prototype command character is chosen which is used in all capabilities. +This character is given in the +.Sy \&CC +capability to identify it. +The following convention is supported on some +.Ux +systems: +The environment is to be searched for a +.Ev \&CC +variable, +and if found, +all occurrences of the prototype character are replaced by the character +in the environment variable. +This use of the +.Ev \&CC +environment variable +is a very bad idea, as it conflicts with +.Xr make 1 . +.Pp +Terminal descriptions that do not represent a specific kind of known +terminal, such as +.Em switch , +.Em dialup , +.Em patch , +and +.Xr network , +should include the +.Sy \&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 +.Em virtual +terminal descriptions for which the escape sequences are known.) +.Pp +If the terminal uses xoff/xon +.Pq Tn DC3 Ns / Ns Tn DC1 +handshaking for flow control, give +.Sy \&xo . +Padding information should still be included so that routines can make +better decisions about costs, but actual pad characters will not be +transmitted. +.Pp +If the terminal has a +.Dq meta key +which acts as a shift key, setting the +8th bit of any character transmitted, then this fact can be indicated with +.Sy \&km . +Otherwise, software will assume that the 8th bit is parity and it will +usually be cleared. +If strings exist to turn this +.Dq meta mode +on and off, they can be given as +.Sy \&mm +and +.Sy \&mo . +.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 +.Sy \&lm . +An explicit value of 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 +.Ux +system virtual +terminal protocol, the terminal number can be given as +.Sy \&vt . +.Pp +Media copy strings which control an auxiliary printer +connected to the terminal can be given as +.Sy \&ps : +print the contents of the screen; +.Sy \&pf : +turn off the printer; and +.Sy \&po : +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 +.Sy \&pO +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 +.Sy \&pf , +is transparently passed to the printer while +.Sy \&pO +is in effect. +.Pp +Strings to program function keys can be given as +.Sy \&pk , +.Sy \&pl , +and +.Sy \&px . +Each of these strings takes two parameters: the function key number +to program (from 0 to 9) and the string to program it with. +Function key numbers out of this range may program undefined keys +in a terminal-dependent manner. +The differences among the capabilities are that +.Sy \&pk +causes pressing the given key to be the same as the user typing the given +string; +.Sy \&pl +causes the string to be executed by the terminal in local mode; +and +.Sy \&px +causes the string to be transmitted to the computer. +Unfortunately, due to lack of a definition for string parameters in +.Nm termcap , +only +.Xr terminfo +supports these capabilities. +.Ss Glitches and Braindamage +Hazeltine terminals, which do not allow `~' characters to be displayed, +should indicate +.Sy \&hz . +.Pp +The +.Sy \&nc +capability, now obsolete, formerly indicated Datamedia terminals, +which echo +.Sy \&\er \en +for +carriage return then ignore a following linefeed. +.Pp +Terminals that ignore a linefeed immediately after an +.Sy \&am +wrap, such as the Concept, should indicate +.Sy \&xn . +.Pp +If +.Sy \&ce +is required to get rid of standout +(instead of merely writing normal text on top of it), +.Sy \&xs +should be given. +.Pp +Teleray terminals, where tabs turn all characters moved over to blanks, +should indicate +.Sy \&xt +(destructive tabs). +This glitch is also taken to mean that it is not possible +to position the cursor on top of a \*(lqmagic cookie\*(rq, and that +to erase standout mode it is necessary to use delete and insert line. +.Pp +The Beehive Superbee, which is unable to correctly transmit the +.Dv ESC +or +.Sy \&^C +characters, has +.Sy \&xb , +indicating that the +.Dq \&f\&1 +key is used for +.Dv ESC +and +.Dq \&f\&2 +for ^C. +(Only certain Superbees have this problem, depending on the +.Tn ROM . ) +.Pp +Other specific terminal problems may be corrected by adding more +capabilities of the form +.Sy x Em x . +.Ss Similar Terminals +If there are two very similar terminals, +one can be defined as being just like the other with certain exceptions. +The string capability +.Sy \&tc +can be given +with the name of the similar terminal. +This capability must be +.Em last , +and the combined length of the entries +must not exceed 1024. +The capabilities given before +.Sy \&tc +override those in the terminal type invoked by +.Sy \&tc . +A capability can be canceled by placing +.Sy \&xx@ +to the left of the +.Sy \&tc +invocation, where +.Sy \&xx +is the capability. +For example, the entry +.Bd -literal -offset indent +hn\||\|2621\-nl:ks@:ke@:tc=2621: +.Ed +.Pp +defines a +.Dq 2621\-nl +that does not have the +.Sy \&ks +or +.Sy \&ke +capabilities, +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. +.Sh FILES +.Bl -tag -width /usr/share/misc/termcap.db -compact +.It Pa /usr/share/misc/termcap +File containing terminal descriptions. +.It Pa /usr/share/misc/termcap.db +Hash database file containing terminal descriptions (see +.Xr cap_mkdb 1 ) . +.El +.Sh SEE ALSO +.Xr \&ex 1 , +.Xr cap_mkdb 1 , +.Xr more 1 , +.Xr tset 1 , +.Xr \&ul 1 , +.Xr vi 1 , +.Xr curses 3 , +.Xr printf 3 , +.Xr termcap 3 , +.Xr term 7 +.Sh CAVEATS AND BUGS +The +.Em Note : +.Nm termcap +functions +were replaced by +.Xr terminfo +in +.At V +Release 2.0. +The transition will be relatively painless if capabilities flagged as +.Dq obsolete +are avoided. +.Pp +Lines and columns are now stored by the kernel as well as in the termcap +entry. +Most programs now use the kernel information primarily; the information +in this file is used only if the kernel does not have any information. +.Pp +.Xr \&Vi +allows only 256 characters for string capabilities, and the routines +in +.Xr termlib 3 +do not check for overflow of this buffer. +The total length of a single entry (excluding only escaped newlines) +may not exceed 1024. +.Pp +Not all programs support all entries. +.Sh HISTORY +The +.Nm +file format appeared in +.Bx 3 . |