Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

ex(1)

more(1)

tset(1)

ul(1)

vi(1)

curses(3X)

printf(3S)

termcap(3X)

term(5V)

terminfo(5V)

TERMCAP(5)  —  FILE FORMATS

NAME

termcap − terminal capability data base

DESCRIPTION

termcap is a data base describing the capabilities of terminals.  Terminals are described in termcap source descriptions by giving a set of capabilities which they have, by describing how operations are performed, by describing padding requirements, and by specifying initialization sequences.  This database is used by applications programs such as vi(1), and libraries such as curses(3X), so they can work with a variety of terminals without changes to the programs. 

Each termcap entry consist of a number of colon-separated (:) fields.  The first field for each terminal lists the various names by which it is known, separated by bar ( | ) characters.  The first name is always two characters long, and is used by older (version 6) systems (which store the terminal type in a 16-bit word in a system-wide database).  The second name given is the most common abbreviation for the terminal (this is the one to which the environment variable TERM would normally be set).  The last name should fully identify the terminal’s make and model.  All other names are taken as synonyms for the initial terminal name.  All names but the first and last should be in lower case and contain no blanks; the last name may well contain upper case and blanks for added readability. 

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; for example, for the Hewlett-Packard 2621, 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.  Thus, a vt100 in 132-column mode would be given as: vt100−w.  The following suffixes should be used where possible:

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
−n number of lines on the screen aaa−60
−na no arrow keys (leave them in local) concept100−na
−np number of pages of memory concept100−4p
−rv reverse video concept100−rv

Terminal entries may continue onto multiple lines by giving a \ 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 #. 

Types of Capabilities

Terminal capabilities each have a two-letter code, and are of three types:

boolean These indicate particular features of the terminal.  For instance, an entry for a terminal that has automatic margins (an automatic RETURN and LINEFEED when the end of a line is reached) would contain a field with the boolean capability am. 

numeric These give the size of the display of some other attribute.  Numeric capabilities are followed by the character ‘#’, and a number.  An entry for a teminal with an 80-column display would have a field containing co#80. 

string These indicate the character sequences used to perform particular terminal operations.  String-valued capabilities, such as ce (clear-to-end-of-line sequence) are given by the two-letter code, followed by the character ‘=’, and a string (which ends at the following : field delimiter). 

A delay factor, in milliseconds may appear after the ‘=’.  Padding characters are supplied by tputs after the remainder of the string is sent.  The delay can be either a number, or a number followed by the character ‘∗’, which indicates that the proportional padding is required, in which case the number given is the amount of padding for each line affected by an operation using that capability.  (In the case of an insert-character operation, the factor is still the number of lines affected; this is always 1 unless the terminal has in and the software uses it.) 

When a ∗ 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.) 

Comments

To comment-out a capability field, insert a ‘.’ (period) as the first character in that field (following the :). 

Escape Sequence Codes

A number of escape sequences are provided in the string-valued capabilities for easy encoding of characters there:

\E maps to ESC

^X maps to CTRL-X for any appropriate character X

\n maps to LINEFEED

\r maps to RETURN

\t maps to TAB

\b maps to BACKSPACE

\f maps to FORMFEED

Finally, characters may be given as three octal digits after a backslash (for example, \123), and the characters ^ (caret) and \ (backslash) may be given as \^ and \\ respectively. 

If it is necessary to place a : in a capability it must be escaped in octal as \072. 

If it is necessary to place a NUL character in a string capability it must be encoded as \200.  (The routines that deal with termcap use C strings and strip the high bits of the output very late, so that a \200 comes out as a \000 would.) 

Parameterized Strings

Cursor addressing and other strings requiring parameters are described by a parameterized string capability, with printf(3S)-like escapes (%x) in it; other characters are passed through unchanged. For example, to address the cursor, the 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 CM capability.) 

The % escapes have the following meanings:

%% produce the character %
%d output value as in printf %d
%2 output value as in printf %2d
%3 output value as in printf %3d
%. output value as in printf %c
%+x add x to value, then do ‘%.’
%>xy if value > x then add y, no output
%r reverse order of two parameters, no output
%i increment by one, no output
%n exclusive-or all parameters with 0140 (Datamedia 2500)
%B BCD (16∗(value/10)) + (value%10), no output
%D Reverse coding (value − 2∗(value%16)), no output (Delta Data)

Consider the Hewlett-Packard 2645, which, to get to row 3 and column 12, needs to be sent \E&a12c03Y padded for 6 milliseconds.  Note: 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 cm capability is ‘:cm=6\E&%r%2c%2Y:’.  Terminals that use ‘%.’ need to be able to backspace the cursor (le) and to move the cursor up one line on the screen (up).  This is necessary because it is not always safe to transmit \n, ^D, and \r, as the system may change or discard them.  (Programs using termcap must set terminal modes so that TAB characters are not expanded, making \t safe to send.  This turns out to be essential for the Ann Arbor 4080.) 

A final example is the Lear Siegler ADM−3a, which offsets row and column by a blank character, thus it requires ‘:cm=\E=%+ %+:’. 

Row or column absolute cursor addressing can be given as single-parameter capabilities ch (horizontal position absolute) and 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 cm.  If there are parameterized local motions (for example, move n positions to the right) these can be given as DO, LE, RI, and UP with a single parameter indicating how many positions to move.  These are primarily useful if the terminal does not have cm, such as the Tektronix 4025. 

Delays

Certain capabilities control padding in the terminal driver.  These are primarily needed by hardcopy terminals and are used by the tset (1) program to set terminal driver modes appropriately.  Delays embedded in the capabilities cr, sf, le, ff, and ta will set the appropriate delay bits in the terminal driver.  If pb (padding baud rate) is given, these values can be ignored at baud rates below the value of pb.  For 4.2BSD tset, the delays are given as numeric capabilities dC, dN, dB, dF, and dT instead. 

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 tc can be given with the name of the similar terminal.  This capability must be last, and the combined length of the entries must not exceed 1024. The capabilities given before tc override those in the terminal type invoked by tc.  A capability can be canceled by placing xx@ to the left of the tc invocation, where xx is the capability.  For example, the entry

hn|2621−nl:ks@:ke@:tc=2621:

defines a 2621−nl that does not have the ks or 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. 

CAPABILITIES

The characters in the Notes field in the next table have the following meanings (more than one may apply to a capability):

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

Obsolete capabilities have no terminfo equivalents, since they were considered useless, or are subsumed by other capabilities.  New software should not rely on them. 

Name Type Notes Description
!1 str sent by shifted save key
!2 str sent by shifted suspend key
!3 str sent by shifted undo key
#1 str sent by shifted help key
#2 str sent by shifted home key
#3 str sent by shifted input key
#4 str sent by shifted left-arrow key
%0 str sent by redo key
%1 str sent by help key
%2 str sent by mark key
%3 str sent by message key
%4 str sent by move key
%5 str sent by next-object key
%6 str sent by open key
%7 str sent by options key
%8 str sent by previous-object key
%9 str sent by print or copy key
%a str sent by shifted message key
%b str sent by shifted move key
%c str sent by shifted next-object key
%d str sent by shifted options key
%e str sent by shifted previous-object key
%f str sent by shifted print or copy key
%g str sent by shifted redo key
%h str sent by shifted replace key
%i str sent by shifted right-arrow key
%j str sent by shifted resume key
&0 str sent by shifted cancel key
&1 str sent by ref(erence) key
&2 str sent by refresh key
&3 str sent by replace key
&4 str sent by restart key
&5 str sent by resume key
&6 str sent by save key
&7 str sent by suspend key
&8 str sent by undo key
&9 str sent by shifted beg(inning) key
∗0 str sent by shifted find key
∗1 str sent by shifted cmd (command) key
∗2 str sent by shifted copy key
∗3 str sent by shifted create key
∗4 str sent by shifted delete-char key
∗5 str sent by shifted delete-line key
∗6 str sent by select key
∗7 str sent by shifted end key
∗8 str sent by shifted clear-line key
∗9 str sent by shifted exit key
5i bool printer will not echo on screen
@0 str sent by find key
@1 str sent by beg(inning) key
@2 str sent by cancel key
@3 str sent by close key
@4 str sent by cmd (command) key
@5 str sent by copy key
@6 str sent by create key
@7 str sent by end key
@8 str sent by enter/send key (unreliable)
@9 str sent by exit key
AL str (NP∗) add n new blank lines
CC str terminal settable command character in prototype
CM str (NP) memory-relative cursor motion to row m, column n
DC str (NP∗) delete n characters
DL str (NP∗) delete n lines
DO str (NP∗) move cursor down n lines
EP bool (o) even parity
F1-F9 str sent by function keys 11-19
FA-FZ str sent by function keys 20-45
Fa-Fr str sent by function keys 46-63
HC bool cursor is hard to see
HD bool (o) half-duplex
IC str (NP∗) insert n blank characters
K1 str sent by keypad upper left
K2 str sent by keypad center
K3 str sent by keypad upper right
K4 str sent by keypad lower left
K5 str sent by keypad lower right
LC bool (o) lower-case only
LE str (NP) move cursor left n positions
LF str (P) turn off soft labels
LO str (P) turn on soft labels
MC str (P) clear left and right soft margins
ML str (P) set soft left margin
MR str (P) set soft right margin
NL bool (o) \n is NEWLINE, not LINEFEED
NP bool pad character does not exist
NR bool ti does not reverse te
Nl num number of labels on screen (start at 1)
OP bool (o) odd parity
RA str (P) turn off automatic margins
RF str send next input character (for ptys)
RI str (NP) move cursor right n positions
RX str (P) turn off xoff/xon handshaking
SA str (P) turn on automatic margins
SF str (NP∗) scroll forward n lines
SR str (NP∗) scroll backward n lines
SX str (P) turn on xoff/xon handshaking
UC bool (o) upper-case only
UP str (NP∗) move cursor up n lines
XF str x-off character (default DC3)
XN str x-on character (default DC1)
ac str graphic character set pairs aAbBcC − def=VT100
ae str (P) end alternate character set
al str (P∗) add new blank line
am bool terminal has automatic margins
as str (P) start alternate character set
bc str (o) backspace if not ^H
bl str (P) audible signal (bell)
bs bool (o) terminal can backspace with ^H
bt str (P) back-tab
bw bool le (backspace) wraps from column 0 to last column
cb str (P) clear to beginning of line, inclusive
cd str (P∗) clear to end of display
ce str (P) clear to end of line
ch str (NP) set cursor column (horizontal position)
cl str (P∗) clear screen and home cursor
cm str (NP) screen-relative cursor motion to row m, column n
co num number of columns in a line
cr str (P∗) RETURN
cs str (NP) change scrolling region to lines m through n (VT100)
ct str (P) clear all tab stops
cv str (NP) set cursor row (vertical position)
dB num (o) milliseconds of bs delay needed (default 0)
dC num (o) milliseconds of cr delay needed (default 0)
dF num (o) milliseconds of ff delay needed (default 0)
dN num (o) milliseconds of nl delay needed (default 0)
dT num (o) milliseconds of horizontal tab delay needed (default 0)
dV num (o) milliseconds of vertical tab delay needed (default 0)
da bool display may be retained above the screen
db bool display may be retained below the screen
dc str (P∗) delete character
dl str (P∗) delete line
dm str enter delete mode
do str down one line
ds str disable status line
eA str (P) enable graphic character set
ec str (NP) erase n characters
ed str end delete mode
ei str end insert mode
eo bool can erase overstrikes with a blank
es bool escape can be used on the status line
ff str (P∗) hardcopy terminal page eject
fs str return from status line
gn bool generic line type (for example dialup, switch)
hc bool hardcopy terminal
hd str half-line down (forward 1/2 linefeed)
ho str (P) home cursor
hs bool has extra “status line”
hu str half-line up (reverse 1/2 linefeed)
hz bool cannot print ~s (Hazeltine)
i1 str terminal initialization string (terminfo only)
i3 str terminal initialization string (terminfo only)
iP str pathname of program for initialization (terminfo only)
ic str (P∗) insert character
if str name of file containing initialization string
im str enter insert mode
in bool insert mode distinguishes nulls
ip str (P∗) insert pad after character inserted
is str terminal initialization string
it num tab stops initially every n positions
k0-k9 str sent by function keys 0-9
k; str sent by function key 10
kA str sent by insert-line key
kB str sent by back-tab key
kC str sent by clear-screen or erase key
kD str sent by delete-character key
kE str sent by clear-to-end-of-line key
kF str sent by scroll-forward/down key
kH str sent by home-down key
kI str sent by insert-character or enter-insert-mode key
kL str sent by delete-line key
kM str sent by insert key while in insert mode
kN str sent by next-page key
kP str sent by previous-page key
kR str sent by scroll-backward/up key
kS str sent by clear-to-end-of-screen key
kT str sent by set-tab key
ka str sent by clear-all-tabs key
kb str sent by backspace key
kd str sent by down-arrow key
ke str out of “keypad transmit” mode
kh str sent by home key
kl str sent by left-arrow key
km bool has a “meta” key (shift, sets parity bit)
kn num (o) number of function (k0−k9) keys (default 0)
ko str (o) termcap entries for other non-function keys
kr str sent by right-arrow key
ks str put terminal in “keypad transmit” mode
kt str sent by clear-tab key
ku str sent by up-arrow key
l0-l9 str labels on function keys 0-9 if not f0-f9
la str label on function key 10 if not f10
le str (P) move cursor left one position
lh num number of rows in each label
li num number of lines on screen or page
ll str last line, first column
lm num lines of memory if > li (0 means varies)
lw num number of columns in each label
ma str (o) arrow key map (used by vi version 2 only)
mb str turn on blinking attribute
md str turn on bold (extra bright) attribute
me str turn off all attributes
mh str turn on half-bright attribute
mi bool safe to move while in insert mode
mk str turn on blank attribute (characters invisible)
ml str (o) memory lock on above cursor
mm str turn on “meta mode” (8th bit)
mo str turn off “meta mode”
mp str turn on protected attribute
mr str turn on reverse-video attribute
ms bool safe to move in standout modes
mu str (o) memory unlock (turn off memory lock)
nc bool (o) no correctly-working cr (Datamedia 2500, Hazeltine 2000)
nd str non-destructive space (cursor right)
nl str (o) NEWLINE character if not \n
ns bool (o) terminal is a CRT but does not scroll
nw str (P) NEWLINE (behaves like cr followed by do)
nx bool padding will not work, xoff/xon required
os bool terminal overstrikes
pO str (N) turn on the printer for n bytes
pb num lowest baud where delays are required
pc str pad character (default NUL)
pf str turn off the printer
pk str program function key n to type string s (terminfo only)
pl str program function key n to execute string s (terminfo only)
pn str (NP) program label n to show string s (terminfo only)
po str turn on the printer
ps str print contents of the screen
pt bool (o) has hardware tab stops (may need to be set with is)
px str program function key n to transmit string s (terminfo only)
r1 str reset terminal completely to sane modes (terminfo only)
r2 str reset terminal completely to sane modes (terminfo only)
r3 str reset terminal completely to sane modes (terminfo only)
rP str (P) like ip but when in replace mode
rc str (P) restore cursor to position of last sc
rf str name of file containing reset string
ri ? unkown at present
rp str (NP∗) repeat character c n times
rs str reset terminal completely to sane modes
sa str (NP) define the video attributes (9 parameters)
sc str (P) save cursor position
se str end standout mode
sf str (P) scroll text up
sg num number of garbage chars left by so or se (default 0)
so str begin standout mode
sr str (P) scroll text down
st str set a tab stop in all rows, current column
ta str (P) move cursor to next 8-position hardware tab stop
tc str entry of similar terminal − must be last
te str string to end programs that use termcap
ti str string to begin programs that use termcap
ts str (N) go to status line, column n
uc str underscore one character and move past it
ue str end underscore mode
ug num number of garbage chars left by us or ue (default 0)
ul bool underline character overstrikes
up str upline (cursor up)
us str start underscore mode
vb str visible bell (must not move cursor)
ve str make cursor appear normal (undo vs/vi)
vi str make cursor invisible
vs str make cursor very visible
vt num virtual terminal number (not supported on all systems)
wi str (N) set current window to lines i through j, columns m through n
ws num number of columns in status line
xb bool Beehive (f1=ESC, f2=^C)
xn bool NEWLINE ignored after 80 cols (Concept)
xo bool terminal uses xoff/xon handshaking
xr bool (o) RETURN acts like ce cr nl (Delta Data)
xs bool standout not erased by overwriting (Hewlett-Packard)
xt bool TAB characters destructive, magic so char (Teleray 1061)
xx bool (o) Tektronix 4025 insert-line

ENVIRONMENT

If the environment variable TERMCAP contains an absolute pathname, programs look to that file for terminal descriptions, rather than /usr/share/lib/termcap.  If the value of this varible is in the form of a termcap entry, programs use that value for the terminal description. 

FILES

/usr/share/lib/termcap
file containing terminal descriptions

SEE ALSO

ex(1), more(1), tset(1), ul(1), vi(1), curses(3X), printf(3S), termcap(3X), term(5V), terminfo(5V)

System and Network Administration

CAVEATS AND BUGS

UNIX System V uses terminfo(5V) rather than termcap.  SunOS supports either termcap or terminfo(5V) terminal databases, depending on whether you link with the termcap(3X) or curses(3V) libraries.  Transitions between the two should be relatively painless if capabilities flagged as “obsolete” are avoided. 

vi allows only 256 characters for string capabilities, and the routines in termcap(3X) do not check for overflow of this buffer.  The total length of a single entry (excluding only escaped NEWLINE characters) may not exceed 1024. 

Not all programs support all entries. 

Sun Release 4.0  —  Last change: 16 February 1988

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026