TERMCAP.5
资源名称:os_source.zip [点击查看]
上传用户:datang2001
上传日期:2007-02-01
资源大小:53269k
文件大小:49k
源码类别:
操作系统开发
开发平台:
C/C++
- ." Copyright (c) 1980 Regents of the University of California.
- ." All rights reserved. The Berkeley software License Agreement
- ." specifies the terms and conditions for redistribution.
- ."
- ." @(#)termcap.5 6.4 (Berkeley) 5/15/86
- ."
- .tr ||
- .tr *(**
- .TH TERMCAP 5 "1 November 1985"
- .UC
- .SH NAME
- termcap - terminal capability data base
- .SH SYNOPSIS
- .B /etc/termcap
- .SH DESCRIPTION
- .B Termcap^
- is a data base describing terminals,
- used,
- .IR e.g. ,
- by
- .BR vi^ (1)
- and
- .BR curses^ (3).
- Terminals are described in
- .B 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
- .BR termcap^ .
- .PP
- Entries in
- .B 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 is always two characters
- long and is used by older systems which store the terminal type
- in a 16-bit word in a system-wide data base.
- The second 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 first and last
- should be in lower case and contain no blanks;
- the last name may well contain
- upper case 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 *(lqhp2621*(rq.
- 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 *(lqvt100*(rq in 132-column mode would be *(lqvt100-w*(rq.
- The following suffixes should be used where possible:
- .sp
- .ta
- .if t .ta w'fBSuffixfP 'u +w'With automatic margins (usually default) 'u
- .if n .ta w'Suffix 'u +w'With automatic margins (usually default) 'u
- .nf
- .if t .nr Xx n(.lu-n(.i-w'fBSuffixfP With automatic margins (usually default) vt100-am'u
- .if t .in +n(Xxu/2u
- fBSuffix Meaning ExamplefP
- -w Wide mode (more than 80 columns) vt100-w
- -am With automatic margins (usually default) vt100-am
- -nam Without automatic margins vt100-nam
- -fInfP Number of lines on the screen aaa-60
- -na No arrow keys (leave them in local) concept100-na
- -fIn^fPp Number of pages of memory concept100-4p
- -rv Reverse video concept100-rv
- .fi
- .SH CAPABILITIES
- .PP
- The characters in the
- .B Notes
- field in the table have the following meanings
- (more than one may apply to a capability):
- .PP
- .ta
- .ta w'N 'u
- .nr fi w'N '
- .in +n(fiu
- .ti -n(fiu
- N indicates numeric parameter(s)
- .ti -n(fiu
- P indicates that padding may be specified
- .ti -n(fiu
- * indicates that padding may be based on the number of lines affected
- .ti -n(fiu
- o indicates capability is obsolete
- .in +n(fiu
- .PP
- *(lqObsolete*(rq capabilities have no
- .B terminfo^
- equivalents,
- since they were considered useless,
- or are subsumed by other capabilities.
- New software should not rely on them at all.
- .PP
- .if t .ta w'fBName fP'u +w'fBType fP'u +w'fBNotes fP'u
- .if n .ta w'Name 'u +w'Type 'u +w'Notes 'u " Cawf troubled by w'fB
- .if t .nr fi w'fBName Type Notes fP'
- .if n .nr fi w'Name Type Notes '
- .in +n(fiu
- .ti -n(fiu
- fBName Type Notes DescriptionfP
- .ti -n(fiu
- ae str (P) End alternate character set
- .ti -n(fiu
- AL str (NP*) Add fIn^fP new blank lines
- .ti -n(fiu
- al str (P*) Add new blank line
- .ti -n(fiu
- am bool Terminal has automatic margins
- .ti -n(fiu
- as str (P) Start alternate character set
- .ti -n(fiu
- bc str (o) Backspace if not fB^HfP
- .ti -n(fiu
- bl str (P) Audible signal (bell)
- .ti -n(fiu
- bs bool (o) Terminal can backspace with fB^HfP
- .ti -n(fiu
- bt str (P) Back tab
- .ti -n(fiu
- bw bool fBlefP (backspace) wraps from column 0 to last column
- .ti -n(fiu
- CC str Terminal settable command character in prototype
- .ti -n(fiu
- cd str (P*) Clear to end of display
- .ti -n(fiu
- ce str (P) Clear to end of line
- .ti -n(fiu
- ch str (NP) Set cursor column (horizontal position)
- .ti -n(fiu
- cl str (P*) Clear screen and home cursor
- .ti -n(fiu
- CM str (NP) Memory-relative cursor addressing
- .ti -n(fiu
- cm str (NP) Screen-relative cursor motion
- .ti -n(fiu
- co num Number of columns in a line (See BUGS section below)
- .ti -n(fiu
- cr str (P) Carriage return
- .ti -n(fiu
- cs str (NP) Change scrolling region (VT100)
- .ti -n(fiu
- ct str (P) Clear all tab stops
- .ti -n(fiu
- cv str (NP) Set cursor row (vertical position)
- .ti -n(fiu
- da bool Display may be retained above the screen
- .ti -n(fiu
- dB num (o) Milliseconds of fBbsfP delay needed (default 0)
- .ti -n(fiu
- db bool Display may be retained below the screen
- .ti -n(fiu
- DC str (NP*) Delete fIn^fP characters
- .ti -n(fiu
- dC num (o) Milliseconds of fBcrfP delay needed (default 0)
- .ti -n(fiu
- dc str (P*) Delete character
- .ti -n(fiu
- dF num (o) Milliseconds of fBfffP delay needed (default 0)
- .ti -n(fiu
- DL str (NP*) Delete fIn^fP lines
- .ti -n(fiu
- dl str (P*) Delete line
- .ti -n(fiu
- dm str Enter delete mode
- .ti -n(fiu
- dN num (o) Milliseconds of fBnlfP delay needed (default 0)
- .ti -n(fiu
- DO str (NP*) Move cursor down fIn^fP lines
- .ti -n(fiu
- do str Down one line
- .ti -n(fiu
- ds str Disable status line
- .ti -n(fiu
- dT num (o) Milliseconds of horizontal tab delay needed (default 0)
- .ti -n(fiu
- dV num (o) Milliseconds of vertical tab delay needed (default 0)
- .ti -n(fiu
- ec str (NP) Erase fIn^fP characters
- .ti -n(fiu
- ed str End delete mode
- .ti -n(fiu
- ei str End insert mode
- .ti -n(fiu
- eo bool Can erase overstrikes with a blank
- .ti -n(fiu
- EP bool (o) Even parity
- .ti -n(fiu
- es bool Escape can be used on the status line
- .ti -n(fiu
- ff str (P*) Hardcopy terminal page eject
- .ti -n(fiu
- fs str Return from status line
- .ti -n(fiu
- gn bool Generic line type (fIe.g.fP dialup, switch)
- .ti -n(fiu
- hc bool Hardcopy terminal
- .ti -n(fiu
- HD bool (o) Half-duplex
- .ti -n(fiu
- hd str Half-line down (forward 1/2 linefeed)
- .ti -n(fiu
- ho str (P) Home cursor
- .ti -n(fiu
- hs bool Has extra *(lqstatus line*(rq
- .ti -n(fiu
- hu str Half-line up (reverse 1/2 linefeed)
- .ti -n(fiu
- hz bool Cannot print ~s (Hazeltine)
- .ti -n(fiu
- i1-i3 str Terminal initialization strings (fBterminfo^fP only)
- .ti -n(fiu
- IC str (NP*) Insert fIn^fP blank characters
- .ti -n(fiu
- ic str (P*) Insert character
- .ti -n(fiu
- if str Name of file containing initialization string
- .ti -n(fiu
- im str Enter insert mode
- .ti -n(fiu
- in bool Insert mode distinguishes nulls
- .ti -n(fiu
- iP str Pathname of program for initialization (fBterminfo^fP only)
- .ti -n(fiu
- ip str (P*) Insert pad after character inserted
- .ti -n(fiu
- is str Terminal initialization string (fBtermcap^fP only)
- .ti -n(fiu
- it num Tabs initially every fIn^fP positions
- .ti -n(fiu
- K1 str Sent by keypad upper left
- .ti -n(fiu
- K2 str Sent by keypad upper right
- .ti -n(fiu
- K3 str Sent by keypad center
- .ti -n(fiu
- K4 str Sent by keypad lower left
- .ti -n(fiu
- K5 str Sent by keypad lower right
- .ti -n(fiu
- k0-k9 str Sent by function keys 0-9
- .ti -n(fiu
- kA str Sent by insert-line key
- .ti -n(fiu
- ka str Sent by clear-all-tabs key
- .ti -n(fiu
- kb str Sent by backspace key
- .ti -n(fiu
- kC str Sent by clear-screen or erase key
- .ti -n(fiu
- kD str Sent by delete-character key
- .ti -n(fiu
- kd str Sent by down-arrow key
- .ti -n(fiu
- kE str Sent by clear-to-end-of-line key
- .ti -n(fiu
- ke str Out of *(lqkeypad transmit*(rq mode
- .ti -n(fiu
- kF str Sent by scroll-forward/down key
- .ti -n(fiu
- kH str Sent by home-down key
- .ti -n(fiu
- kh str Sent by home key
- .ti -n(fiu
- kI str Sent by insert-character or enter-insert-mode key
- .ti -n(fiu
- kL str Sent by delete-line key
- .ti -n(fiu
- kl str Sent by left-arrow key
- .ti -n(fiu
- kM str Sent by insert key while in insert mode
- .ti -n(fiu
- km bool Has a *(lqmeta*(rq key (shift, sets parity bit)
- .ti -n(fiu
- kN str Sent by next-page key
- .ti -n(fiu
- kn num (o) Number of function (fBk0fP-fBk9fP) keys (default 0)
- .ti -n(fiu
- ko str (o) Termcap entries for other non-function keys
- .ti -n(fiu
- kP str Sent by previous-page key
- .ti -n(fiu
- kR str Sent by scroll-backward/up key
- .ti -n(fiu
- kr str Sent by right-arrow key
- .ti -n(fiu
- kS str Sent by clear-to-end-of-screen key
- .ti -n(fiu
- ks str Put terminal in *(lqkeypad transmit*(rq mode
- .ti -n(fiu
- kT str Sent by set-tab key
- .ti -n(fiu
- kt str Sent by clear-tab key
- .ti -n(fiu
- ku str Sent by up-arrow key
- .ti -n(fiu
- l0-l9 str Labels on function keys if not *(lqffIn^fP*(rq
- .ti -n(fiu
- LC bool (o) Lower-case only
- .ti -n(fiu
- LE str (NP) Move cursor left fIn^fP positions
- .ti -n(fiu
- le str (P) Move cursor left one position
- .ti -n(fiu
- li num Number of lines on screen or page (See BUGS section below)
- .ti -n(fiu
- ll str Last line, first column
- .ti -n(fiu
- lm num Lines of memory if > fBlifP (0 means varies)
- .ti -n(fiu
- ma str (o) Arrow key map (used by fBvi^fP version 2 only)
- .ti -n(fiu
- mb str Turn on blinking attribute
- .ti -n(fiu
- md str Turn on bold (extra bright) attribute
- .ti -n(fiu
- me str Turn off all attributes
- .ti -n(fiu
- mh str Turn on half-bright attribute
- .ti -n(fiu
- mi bool Safe to move while in insert mode
- .ti -n(fiu
- mk str Turn on blank attribute (characters invisible)
- .ti -n(fiu
- ml str (o) Memory lock on above cursor
- .ti -n(fiu
- mm str Turn on *(lqmeta mode*(rq (8th bit)
- .ti -n(fiu
- mo str Turn off *(lqmeta mode*(rq
- .ti -n(fiu
- mp str Turn on protected attribute
- .ti -n(fiu
- mr str Turn on reverse-video attibute
- .ti -n(fiu
- ms bool Safe to move in standout modes
- .ti -n(fiu
- mu str (o) Memory unlock (turn off memory lock)
- .ti -n(fiu
- nc bool (o) No correctly-working fBcrfP (Datamedia 2500, Hazeltine 2000)
- .ti -n(fiu
- nd str Non-destructive space (cursor right)
- .ti -n(fiu
- NL bool (o) fB\nfP is newline, not line feed
- .ti -n(fiu
- nl str (o) Newline character if not fB\nfP
- .ti -n(fiu
- ns bool (o) Terminal is a s-1CRTs0 but doesn't scroll
- .ti -n(fiu
- nw str (P) Newline (behaves like fBcrfP followed by fBdofP)
- .ti -n(fiu
- OP bool (o) Odd parity
- .ti -n(fiu
- os bool Terminal overstrikes
- .ti -n(fiu
- pb num Lowest baud where delays are required
- .ti -n(fiu
- pc str Pad character (default s-2NULs0)
- .ti -n(fiu
- pf str Turn off the printer
- .ti -n(fiu
- pk str Program function key fIn^fP to type string fIsfP (fBterminfo^fP only)
- .ti -n(fiu
- pl str Program function key fIn^fP to execute string fIsfP (fBterminfo^fP only)
- .ti -n(fiu
- pO str (N) Turn on the printer for fIn^fP bytes
- .ti -n(fiu
- po str Turn on the printer
- .ti -n(fiu
- ps str Print contents of the screen
- .ti -n(fiu
- pt bool (o) Has hardware tabs (may need to be set with fBisfP)
- .ti -n(fiu
- px str Program function key fIn^fP to transmit string fIsfP (fBterminfo^fP only)
- .ti -n(fiu
- r1-r3 str Reset terminal completely to sane modes (fBterminfo^fP only)
- .ti -n(fiu
- rc str (P) Restore cursor to position of last fBscfP
- .ti -n(fiu
- rf str Name of file containing reset codes
- .ti -n(fiu
- RI str (NP) Move cursor right fIn^fP positions
- .ti -n(fiu
- rp str (NP*) Repeat character fIc n^fP times
- .ti -n(fiu
- rs str Reset terminal completely to sane modes (fBtermcap^fP only)
- .ti -n(fiu
- sa str (NP) Define the video attributes
- .ti -n(fiu
- sc str (P) Save cursor position
- .ti -n(fiu
- se str End standout mode
- .ti -n(fiu
- SF str (NP*) Scroll forward fIn^fP lines
- .ti -n(fiu
- sf str (P) Scroll text up
- .ti -n(fiu
- sg num Number of garbage chars left by fBsofP or fBsefP (default 0)
- .ti -n(fiu
- so str Begin standout mode
- .ti -n(fiu
- SR str (NP*) Scroll backward fIn^fP lines
- .ti -n(fiu
- sr str (P) Scroll text down
- .ti -n(fiu
- st str Set a tab in all rows, current column
- .ti -n(fiu
- ta str (P) Tab to next 8-position hardware tab stop
- .ti -n(fiu
- tc str Entry of similar terminal - must be last
- .ti -n(fiu
- te str String to end programs that use fBtermcapfP
- .ti -n(fiu
- ti str String to begin programs that use fBtermcapfP
- .ti -n(fiu
- ts str (N) Go to status line, column fIn^fP
- .ti -n(fiu
- UC bool (o) Upper-case only
- .ti -n(fiu
- uc str Underscore one character and move past it
- .ti -n(fiu
- ue str End underscore mode
- .ti -n(fiu
- ug num Number of garbage chars left by fBusfP or fBuefP (default 0)
- .ti -n(fiu
- ul bool Underline character overstrikes
- .ti -n(fiu
- UP str (NP*) Move cursor up fIn^fP lines
- .ti -n(fiu
- up str Upline (cursor up)
- .ti -n(fiu
- us str Start underscore mode
- .ti -n(fiu
- vb str Visible bell (must not move cursor)
- .ti -n(fiu
- ve str Make cursor appear normal (undo fBvsfP/fBvifP)
- .ti -n(fiu
- vi str Make cursor invisible
- .ti -n(fiu
- vs str Make cursor very visible
- .ti -n(fiu
- vt num Virtual terminal number (not supported on all systems)
- .ti -n(fiu
- wi str (N) Set current window
- .ti -n(fiu
- ws num Number of columns in status line
- .ti -n(fiu
- xb bool Beehive (f1=s-2ESCs0, f2=^C)
- .ti -n(fiu
- xn bool Newline ignored after 80 cols (Concept)
- .ti -n(fiu
- xo bool Terminal uses xoff/xon (s-2DC3s0/s-2DC1s0) handshaking
- .ti -n(fiu
- xr bool (o) Return acts like fBce cr nlfP (Delta Data)
- .ti -n(fiu
- xs bool Standout not erased by overwriting (Hewlett-Packard)
- .ti -n(fiu
- xt bool Tabs ruin, magic fBsofP char (Teleray 1061)
- .ti -n(fiu
- xx bool (o) Tektronix 4025 insert-line
- .in -n(fiu
- .PP
- .B A Sample Entry
- .PP
- The following entry, which describes the Concept-100, is among the more
- complex entries in the
- .B termcap^
- file as of this writing.
- .PP
- .nf
- .if t .ta 8n +8n
- .if n .ta 2n +2n
- ca|||concept100|||c100|||concept|||c104|||concept100-4p|||HDS Concept-100:e
- :al=3*eE^R:am:bl=^G:cd=16*eE^C:ce=16eE^U:cl=2*^L:cm=eEa%+ %+ :e
- :co#80:.cr=9^M:db:dc=16eE^A:dl=3*eE^B:do=^J:ei=eEe200:eo:im=eE^P:in:e
- :ip=16*:is=eEUeEfeE7eE5eE8eEleENHeEKeEe200eEo&e200eEoe47eE: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=eENe200:mh=eEE:mi:mk=eEH:mp=eEI:e
- :mr=eED:nd=eE=:pb#9600:rp=0.2*eEr%.%+ :se=eEdeEe:sf=^J:so=eEEeED:e
- :.ta=8et:te=eEv e200e200e200e200e200e200eEperen:e
- :ti=eEUeEv 8peEper:ue=eEg:ul:up=eE;:us=eEG:e
- :vb=eEke200e200e200e200e200e200e200e200e200e200e200e200e200e200eEK:e
- :ve=eEw:vs=eEW:vt#8:xn:e
- :bs:cr=^M:dC#9:dT#8:nl=^J:ta=^I:pt:
- .fi
- .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 *(lq#*(rq.
- .br
- .ne 5
- .PP
- .B Types of Capabilities
- .PP
- Capabilities in
- .B 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
- .I automatic margins
- .RI ( i.e. ,
- an automatic return and linefeed
- when the end of a line is reached) is indicated by the Boolean capability
- .BR am .
- Hence the description of the Concept includes
- .BR am .
- .PP
- Numeric capabilities are followed by the character `#' then the value.
- In the example above
- .BR co ,
- which indicates the number of columns the display has,
- gives the value `80' for the Concept.
- .PP
- Finally, string-valued capabilities, such as
- .B 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
- .B tputs^
- after the remainder of the string is sent to provide this delay.
- The delay can be either a number,
- .I e.g.
- `20', or a number followed by
- an `*',
- .IR i.e. ,
- `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
- .I lines^
- affected;
- this is always 1 unless the terminal has
- .B 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.
- .B eE
- maps to an s-2ESCs0
- character,
- .B ^X
- maps to a control-X for any appropriate X,
- and the sequences
- .B en
- .B er
- .B et
- .B eb
- .B ef
- map to linefeed, return, tab, backspace, and formfeed, respectively.
- Finally, characters may be given as three octal digits after a
- .BR e ,
- and the characters
- .B ^
- and
- .B e
- may be given as
- .B e^
- and
- .BR ee .
- If it is necessary to place a
- .B :
- in a capability it must be escaped in
- octal as
- .BR e072 .
- If it is necessary to place a s-2NULs0
- character in a string capability it
- must be encoded as
- .BR e200 .
- (The routines that deal with
- .B termcap^
- use C strings and strip the high bits of the output very late, so that
- a
- .B e200
- comes out as a
- .B 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
- .B cr
- and
- .B ta
- in the example above.
- .br
- .ne 5
- .PP
- .B 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
- .B termcap^
- and to build up a description gradually, using partial descriptions
- with
- .B vi^
- to check that they are correct.
- Be aware that a very unusual terminal may expose deficiencies in
- the ability of the
- .B termcap^
- file to describe it
- or bugs in
- .BR vi^ .
- To easily test a new terminal description you can set the environment variable
- .B
- .SM TERMCAP
- to the absolute pathname of a file containing the description you are working
- on and programs will look there rather than in
- .BR /etc/termcap^ .
- .B
- .SM TERMCAP
- can also be set to the
- .B termcap^
- entry itself
- to avoid reading the file 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
- .B vi^
- to edit
- .B /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.
- .br
- .ne 5
- .PP
- .B Basic Capabilities
- .PP
- The number of columns on each line of the display is given by the
- .B co
- numeric capability.
- If the display is a s-1CRTs0, then the
- number of lines on the screen is given by the
- .B 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
- .B am
- capability.
- If the terminal can clear its screen,
- the code to do this is given by the
- .B cl
- string capability.
- If the terminal overstrikes
- (rather than clearing the position when a character is overwritten),
- it should have the
- .B os
- 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 the Tektronix 4010 series,
- as well as to hard copy and
- .SM 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,
- .BR ^M .)
- If there is a code to produce an audible signal (bell, beep,
- .IR etc.^ ),
- give this as
- .BR 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
- .BR le .
- Similarly,
- codes to move to the right, up, and down
- should be given as
- .BR nd ,
- .BR up ,
- and
- .BR do ,
- respectively.
- These
- .I local cursor motions^
- should not alter the text they pass over;
- for example, you would not normally use
- *(lqnd= *(rq
- unless the terminal has the
- .B 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
- .B termcap^
- have undefined behavior at the left and top edges of a
- .SM CRT
- display.
- Programs should never attempt to backspace around the left edge,
- unless
- .B 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
- .B sf
- (index) string.
- To scroll text down,
- a program goes to the top left corner of the screen and sends the
- .B sr
- (reverse index) string.
- The strings
- .B sf
- and
- .B sr
- have undefined behavior
- when not on their respective corners of the screen.
- Parameterized versions of the scrolling sequences are
- .B SF
- and
- .BR SR ,
- which have the same semantics as
- .B sf
- and
- .B 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
- .B 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
- .B nd
- from the last column.
- Leftward local motion is defined from the left edge only when
- .B bw
- is given; then an
- .B 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
- .B termcap^
- description usually assumes that this feature is on,
- .IR i.e. ,
- .BR am .
- If the terminal has a command
- that moves to the first column of the next line,
- that command can be given as
- .B nw
- (newline).
- It is permissible for this to clear the remainder of the current line,
- so if the terminal has no correctly-working s-2CRs0 and s-2LFs0
- it may still be possible to craft a working
- .B nw
- out of one or both of them.
- .PP
- These capabilities suffice to describe hardcopy and *(lqglass-tty*(rq terminals.
- Thus the Teletype model 33 is described as
- .PP
- .nf
- T3|||tty33|||33|||tty|||Teletype model 33:e
- :bl=^G:co#72:cr=^M:do=^J:hc:os:
- .fi
- .PP
- and the Lear Siegler s-1ADMs0-3 is described as
- .PP
- .nf
- l3|||adm3|||3|||LSI s-1ADMs0-3:e
- :am:bl=^G:cl=^Z:co#80:cr=^M:do=^J:le=^H:li#24:sf=^J:
- .fi
- .br
- .ne 5
- .PP
- .B Parameterized Strings
- .PP
- Cursor addressing and other strings requiring parameters
- are described by a
- parameterized string capability, with
- .BR printf^ (3)-like
- escapes
- .B %x
- in it,
- while other characters are passed through unchanged.
- For example, to address the cursor the
- .B 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
- .B CM
- capability.)
- .PP
- The
- .B %
- encodings have the following meanings:
- .PP
- .in +16n
- .ta +8n
- .ti -8n
- %% output `%'
- .ti -8n
- %d output value as in fBprintf^fP %d
- .ti -8n
- %2 output value as in fBprintf^fP %2d
- .ti -8n
- %3 output value as in fBprintf^fP %3d
- .ti -8n
- %. output value as in fBprintf^fP %c
- .ti -8n
- %+fIxfP add fIx^fP to value, then do %.
- .ti -8n
- %>fIxyfP if value > fIx^fP then add fIy^fP, no output
- .ti -8n
- %r reverse order of two parameters, no output
- .ti -8n
- %i increment by one, no output
- .ti -8n
- %n exclusive-or all parameters with 0140 (Datamedia 2500)
- .ti -8n
- %B BCD (16*(value/10)) + (value%10), no output
- .ti -8n
- %D Reverse coding (value - 2*(value%16)), no output (Delta Data)
- .ti -16n
- .fi
- .PP
- Consider the Hewlett-Packard 2645, which, to get to row 3 and column 12, needs
- to be sent *(lqeE&a12c03Y*(rq 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
- .B cm
- capability is *(lqcm=6eE&%r%2c%2Y*(rq.
- .PP
- The Microterm
- .SM ACT-IV
- needs the current row and column sent
- simply encoded in binary
- preceded by a
- .BR ^T ,
- *(lqcm=^T%.%.*(rq.
- Terminals that use *(lq%.*(rq need to be able to
- backspace the cursor
- .RB ( le )
- and to move the cursor up one line on the screen
- .RB ( up ).
- This is necessary because it is not always safe to transmit
- .BR en ,
- .BR ^D ,
- and
- .BR er ,
- as the system may change or discard them.
- (Programs using
- .B termcap^
- must set terminal modes so that tabs are not expanded, so
- .B et
- is safe to send.
- This turns out to be essential for the Ann Arbor 4080.)
- .PP
- A final example is the Lear Siegler s-1ADMs0-3a,
- which offsets row and column
- by a blank character, thus *(lqcm=eE=%+ %+ *(rq.
- .PP
- Row or column absolute cursor addressing
- can be given as single parameter capabilities
- .B ch
- (horizontal position absolute) and
- .B 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
- .BR cm .
- If there are parameterized local motions
- .RI ( e.g. ,
- move
- .I n^
- positions to the right)
- these can be given as
- .BR DO ,
- .BR LE ,
- .BR RI ,
- and
- .B UP
- with a single parameter indicating how many positions to move.
- These are primarily useful if the terminal does not have
- .BR cm ,
- such as the Tektronix 4025.
- .br
- .ne 5
- .PP
- .B 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
- .BR ho .
- Similarly, a fast way of getting to the lower left-hand corner
- can be given as
- .BR ll ;
- this may involve going up with
- .B up
- from the home position,
- but a program should never do this itself (unless
- .B 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 *(lqeEH*(rq sequence on Hewlett-Packard terminals
- cannot be used for
- .BR ho .)
- .br
- .ne 5
- .PP
- .B 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
- .BR ce .
- If the terminal can clear from the current position to the end of the
- display, this should be given as
- .BR cd .
- .B 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
- .B cd
- is not available.)
- .br
- .ne 5
- .PP
- .B Insert/Delete Line
- .PP
- If the terminal can open a new blank line
- before the line containing the cursor,
- this should be given as
- .BR 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
- .BR dl ;
- this must only be used from the first position on
- the line to be deleted.
- Versions of
- .B al
- and
- .B dl
- which take a single parameter
- and insert or delete that many lines
- can be given as
- .B AL
- and
- .BR DL .
- If the terminal has a settable scrolling region
- (like the VT100),
- the command to set this can be described with the
- .B 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
- .B sc
- and
- .B rc
- (save and restore cursor) commands are also useful.
- Inserting lines at the top or bottom of the screen can also be done using
- .B sr
- or
- .B 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
- .BR wi .
- The four parameters are the starting and ending lines in memory
- and the starting and ending columns in memory, in that order.
- (This
- .B terminfo^
- capability is described for completeness.
- It is unlikely that any
- .BR termcap^ -using
- program will support it.)
- .PP
- If the terminal can retain display memory above the screen, then the
- .B da
- capability should be given;
- if display memory can be retained
- below, then
- .B 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
- .B sr
- may bring down non-blank lines.
- .br
- .ne 5
- .PP
- .B Insert/Delete Character
- .PP
- There are two basic kinds of intelligent terminals with respect to
- insert/delete character that can be described using
- .BR 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 *(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, then you have the second type of
- terminal and should give the capability fBinfP, which stands for
- *(lqinsert null*(rq.
- While these are two logically separate attributes
- (one line
- .I 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
- .B 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
- .B im
- the sequence to get into insert mode.
- Give as
- .B ei
- the sequence to leave insert mode.
- Now give as
- .B 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
- .BR 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
- .BR 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
- .B ip
- (a string option).
- Any other sequence that may need to be
- sent after insertion of a single character can also be given in
- .BR ip .
- If your terminal needs to be placed into an `insert mode'
- and needs a special code preceding each inserted character,
- then both
- .BR im / ei
- and
- .B ic
- can be given, and both will be used.
- The
- .B IC
- capability, with one parameter
- .IR n^ ,
- will repeat the effects of
- .B ic
- .I n^
- times.
- .PP
- It is occasionally necessary to move around while in insert mode
- to delete characters on the same line
- .RI ( 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
- .B mi
- to speed up inserting
- in this case.
- Omitting
- .B mi
- will affect only speed.
- Some terminals
- (notably Datamedia's) must not have
- .B mi
- because of the way their
- insert mode works.
- .PP
- Finally, you can specify
- .B dc
- to delete a single character,
- .B DC
- with one parameter
- .I n^
- to delete
- .I n^
- characters,
- and delete mode by giving
- .B dm
- and
- .B ed
- to enter and exit delete mode
- (which is any mode the terminal needs to be placed in for
- .B dc
- to work).
- .br
- .ne 5
- .PP
- .B 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
- .IR "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
- .B so
- and
- .BR 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 TVI 912 and Teleray 1061 do,
- then
- .B sg
- should be given to tell how many characters are left.
- .PP
- Codes to begin underlining and end underlining can be given as
- .B us
- and
- .BR ue ,
- respectively.
- Underline mode change garbage is specified by
- .BR ug ,
- similar to
- .BR 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
- .BR uc .
- .PP
- Other capabilities to enter various highlighting modes include
- .B mb
- (blinking),
- .B md
- (bold or extra bright),
- .B mh
- (dim or half-bright),
- .B mk
- (blanking or invisible text),
- .B mp
- (protected),
- .B mr
- (reverse video),
- .B me
- (turn off
- .I all
- attribute modes),
- .B as
- (enter alternate character set mode), and
- .B 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
- .B 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
- .BR sa ,
- only those for which corresponding attribute commands exist.
- (It is unlikely that a
- .BR termcap^ -using
- program will support this capability, which is defined for compatibility
- with
- .BR terminfo^ .)
- .PP
- Terminals with the *(lqmagic cookie*(rq glitches
- .RB ( sg
- and
- .BR ug ),
- rather than maintaining extra attribute bits for each character cell,
- instead deposit special *(lqcookies*(rq,
- or *(lqgarbage characters*(rq,
- 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
- .B 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
- .BR 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
- .BR vs .
- If there is a way to make the cursor completely invisible, give that as
- .BR vi .
- The capability
- .BR 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
- .BR ul .
- If overstrikes are erasable with a blank,
- this should be indicated by giving
- .BR eo .
- .br
- .ne 5
- .PP
- .B Keypad
- .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 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
- .B ks
- and
- .BR 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
- .BR kl ,
- .BR kr ,
- .BR ku ,
- .BR kd ,
- and
- .BR kh ,
- respectively.
- If there are function keys such as f0, f1, ..., f9, the codes they send
- can be given as
- .BR k0 ,
- .BR k1 , "" ...,
- .BR k9 .
- If these keys have labels other than the default f0 through f9, the labels
- can be given as
- .BR l0 ,
- .BR l1 , "" ...,
- .BR l9 .
- The codes transmitted by certain other special keys can be given:
- .B kH
- (home down),
- .B kb
- (backspace),
- .B ka
- (clear all tabs),
- .B kt
- (clear the tab stop in this column),
- .B kC
- (clear screen or erase),
- .B kD
- (delete character),
- .B kL
- (delete line),
- .B kM
- (exit insert mode),
- .B kE
- (clear to end of line),
- .B kS
- (clear to end of screen),
- .B kI
- (insert character or enter insert mode),
- .B kA
- (insert line),
- .B kN
- (next page),
- .B kP
- (previous page),
- .B kF
- (scroll forward/down),
- .B kR
- (scroll backward/up), and
- .B 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
- .BR K1 ,
- .BR K2 ,
- .BR K3 ,
- .BR K4 ,
- and
- .BR K5 .
- These keys are useful when the effects of a 3 by 3 directional pad are needed.
- The obsolete
- .B ko
- capability formerly used to describe *(lqother*(rq function keys has been
- completely supplanted by the above capabilities.
- .PP
- The
- .B 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
- .B vi^
- which must be run on some minicomputers due to
- memory limitations.
- This field is redundant with
- .BR kl ,
- .BR kr ,
- .BR ku ,
- .BR kd ,
- and
- .BR 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
- .B vi^
- command.
- These commands are
- .B h
- for
- .BR kl ,
- .B j
- for
- .BR kd ,
- .B k
- for
- .BR ku ,
- .B l
- for
- .BR kr ,
- and
- .B H
- for
- .BR kh .
- For example, the Mime would have *(lqma=^Hh^Kj^Zk^Xl*(rq
- indicating arrow keys left (^H), down (^K), up (^Z), and right (^X).
- (There is no home key on the Mime.)
- .br
- .ne 5
- .PP
- .B Tabs and Initialization
- .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
- .B ti
- and
- .BR 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
- .B ti
- sets the command character to be the one used by
- .BR termcap^ .
- .PP
- Other capabilities
- include
- .BR is ,
- an initialization string for the terminal,
- and
- .BR 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
- .B termcap^
- description.
- They are normally sent to the terminal by the
- .B tset^
- program each time the user logs in.
- They will be printed in the following order:
- .BR is ;
- setting tabs using
- .B ct
- and
- .BR st ;
- and finally
- .BR if .
- .RI ( Terminfo^
- uses
- .B i1-i2
- instead of
- .B is
- and runs the program
- .B iP
- and prints
- .B i3
- after the other initializations.)
- A pair of sequences that does a harder reset from a totally unknown state
- can be analogously given as
- .B rs
- and
- .BR if .
- These strings are output by the
- .B reset^
- program, which is used when the terminal gets into a wedged state.
- .RI ( Terminfo^
- uses
- .B r1-r3
- instead of
- .BR rs .)
- Commands are normally placed in
- .B rs
- 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 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
- .B ta
- (usually
- .BR ^I ).
- A *(lqbacktab*(rq command which moves leftward to the previous tab stop
- can be given as
- .BR 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
- .B ta
- or
- .B 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
- .I n^
- positions when the terminal is powered up, then the numeric parameter
- .B it
- is given, showing the number of positions between tab stops.
- This is normally used by the
- .B 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
- .B 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
- .B ct
- (clear all tab stops) and
- .B 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
- .B is
- or
- .BR if .
- .br
- .ne 5
- .PP
- .B Delays
- .PP
- Certain capabilities control padding in the terminal driver.
- These are primarily needed by hardcopy terminals and are used by the
- .B tset^
- program to set terminal driver modes appropriately.
- Delays embedded in the capabilities
- .BR cr ,
- .BR sf ,
- .BR le ,
- .BR ff ,
- and
- .B ta
- will cause the appropriate delay bits to be set in the terminal driver.
- If
- .B pb
- (padding baud rate) is given, these values can be ignored at baud rates
- below the value of
- .BR pb .
- For 4.2BSD
- .BR tset^ ,
- the delays are given as numeric capabilities
- .BR dC ,
- .BR dN ,
- .BR dB ,
- .BR dF ,
- and
- .BR dT
- instead.
- .br
- .ne 5
- .PP
- .B Miscellaneous
- .PP
- If the terminal requires other than a s-2NULs0 (zero) character as a pad,
- this can be given as
- .BR pc .
- Only the first character of the
- .B pc
- string is used.
- .PP
- If the terminal has commands to save and restore the position of the
- cursor, give them as
- .B sc
- and
- .BR rc .
- .PP
- If the terminal has an extra *(lqstatus line*(rq 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
- .B 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
- .B ts
- and
- .BR fs .
- .RB ( fs
- must leave the cursor position in the same place that it was before
- .BR ts .
- If necessary, the
- .B sc
- and
- .B rc
- strings can be included in
- .B ts
- and
- .B fs
- to get this effect.)
- The capability
- .B 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
- .B es
- can be given.
- A string that turns off the status line (or otherwise erases its contents)
- should be given as
- .BR ds .
- The status line is normally assumed to be the same width as the
- rest of the screen,
- .IR i.e. ,
- .BR 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
- .BR ws .
- .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 hardcopy
- terminals.
- If a hardcopy terminal can eject to the next page (form feed),
- give this as
- .B ff
- (usually
- .BR ^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 rp .
- The first parameter is the character to be repeated and the second is
- the number of times to repeat it.
- (This is a
- .B terminfo^
- feature that is unlikely to be supported by a program that uses
- .BR termcap^ .)
- .PP
- If the terminal has a settable command character, such as the
- Tektronix 4025, this can be indicated with
- .BR CC .
- A prototype command character is chosen which is used in all capabilities.
- This character is given in the
- .B CC
- capability to identify it.
- The following convention is supported on some UNIX systems:
- The environment is to be searched for a
- .B
- .SM CC
- variable,
- and if found,
- all occurrences of the prototype character are replaced by the character
- in the environment variable.
- This use of the
- .B
- .SM CC
- environment variable
- is a very bad idea, as it conflicts with
- .BR make^ (1).
- .PP
- Terminal descriptions that do not represent a specific kind of known
- terminal, such as
- .BR switch^ ,
- .BR dialup^ ,
- .BR patch^ ,
- and
- .BR 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 uses xoff/xon (s-2DC3s0/s-2DC1s0)
- handshaking for flow control, give
- .BR 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 *(lqmeta key*(rq which acts as a shift key, setting the
- 8th bit of any character transmitted, then 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 *(lqmeta mode*(rq on and off, they can be given as
- .B mm
- and
- .BR 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
- .BR 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 UNIX system 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 ps :
- print the contents of the screen;
- .BR pf :
- turn off the printer; and
- .BR 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
- .B 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
- .BR pf ,
- is transparently passed to the printer while
- .B pO
- is in effect.
- .PP
- Strings to program function keys can be given as
- .BR pk ,
- .BR pl ,
- and
- .BR 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
- .B pk
- causes pressing the given key to be the same as the user typing the given
- string;
- .B pl
- causes the string to be executed by the terminal in local mode;
- and
- .B px
- causes the string to be transmitted to the computer.
- Unfortunately, due to lack of a definition for string parameters in
- .BR termcap^ ,
- only
- .B terminfo^
- supports these capabilities.
- .br
- .ne 5
- .PP
- .B Glitches and Braindamage
- .PP
- Hazeltine terminals, which do not allow `~' characters to be displayed,
- should indicate
- .BR hz .
- .PP
- The
- .B nc
- capability, now obsolete, formerly indicated Datamedia terminals,
- which echo
- .B er en
- for
- carriage return then ignore a following linefeed.
- .PP
- Terminals that ignore a linefeed immediately after an
- .B am
- wrap, such as the Concept, should indicate
- .BR xn .
- .PP
- If
- .B ce
- is required to get rid of standout
- (instead of merely writing normal text on top of it),
- .B xs
- should be given.
- .PP
- Teleray terminals, where tabs turn all characters moved over to blanks,
- should indicate
- .B 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
- s-2ESCs0 or ^C characters, has
- .BR xb ,
- indicating that the *(lqf1*(rq key is used for s-2ESCs0 and *(lqf2*(rq for ^C.
- (Only certain Superbees have this problem, depending on the ROM.)
- .PP
- Other specific terminal problems may be corrected by adding more
- capabilities of the form fBxfIx^fP.
- .br
- .ne 5
- .PP
- .B Similar Terminals
- .PP
- If there are two very similar terminals,
- one can be defined as being just like the other with certain exceptions.
- The string capability
- .B tc
- can be given
- with the name of the similar terminal.
- This capability must be
- .IR last^ ,
- and the combined length of the entries
- must not exceed 1024.
- The capabilities given before
- .B tc
- override those in the terminal type invoked by
- .BR tc .
- A capability can be canceled by placing
- .B xx@
- to the left of the
- .B tc
- invocation, where
- .I xx^
- is the capability.
- For example, the entry
- .PP
- hn|||2621-nl:ks@:ke@:tc=2621:
- .PP
- defines a *(lq2621-nl*(rq that does not have the
- .B ks
- or
- .B 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 AUTHOR
- William Joy
- .br
- Mark Horton added underlining and keypad support
- .SH FILES
- .TP 15
- .B /etc/termcap
- file containing terminal descriptions
- .B /usr/etc/termcap
- file containing more terminal descriptions (Minix-vmd)
- .SH SEE ALSO
- .BR elvis (1),
- .BR more (1),
- .BR termcap (3),
- .BR printf (3).
- .SH "CAVEATS AND BUGS"
- 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
- Not all programs support all entries.
- .PP
- The Minix
- .BR termcap (3)
- does not understand everything described here, unlike the one Minix-vmd uses.