home *** CD-ROM | disk | FTP | other *** search
- Subject: Terminfo/Curses Part 3 of 11
-
- : Run this shell script with "sh" not "csh"
- PATH=:/bin:/usr/bin:/usr/ucb
- export PATH
- if test ! -d =doc
- then
- echo 'Making directory "=doc"'
- mkdir =doc
- fi
- echo 'x - =doc/term.5'
- sed 's/^X//' <<'//go.sysin dd *' >=doc/term.5
- X.TH TERM 5
- X.SH NAME
- term \- format of compiled term file.
- X.SH SYNOPSIS
- X.B term
- X.SH DESCRIPTION
- X.PP
- Compiled terminfo descriptions are placed under the directory /etc/term.
- In order to avoid a linear search of a huge UNIX directory, a two
- level scheme is used: /etc/term/c/name
- where
- X.B name
- is the name of the terminal, and
- X.B c
- is the first character of
- X.BR name .
- Thus,
- X.B act4
- can be found in the file ``/etc/term/a/act4''.
- Synonyms for the same terminal are implemented by multiple
- links to the same compiled file.
- X.PP
- The format has been chosen so that it will be the same on all hardware.
- An 8 or more bit byte is assumed, but no assumptions about byte ordering
- or sign extension are made.
- X.PP
- The compiled file is created with the
- X.I compile
- program, and read by the routine
- X.IR setupterm .
- Both of these pieces of software are part of
- X.IR curses (3).
- The file is divided into six parts:
- the header,
- terminal names,
- boolean flags,
- numbers,
- strings,
- and
- string table.
- X.PP
- The header section begins the file.
- This section contains six short integers in the format
- described below.
- These integers are
- (1) the magic number (octal 0432);
- (2) the size, in bytes, of the names section;
- (3) the number of bytes in the boolean section;
- (4) the number of short integers in the numbers section;
- (5) the number of offsets (short integers) in the strings section;
- (6) the size, in bytes, of the string table.
- X.PP
- Short integers are stored in two 8 bit bytes.
- The first byte contains the least significant 8 bits of the value,
- and the second byte contains the most significant 8 bits.
- (Thus, the value represented is 256*second+first.)
- The value \-1 is represented by 0377, 0377, other negative
- value are illegal.
- \-1 generally means that a capability is missing from this terminal.
- Note that this format corresponds to the hardware of the VAX and PDP-11.
- Machines where this does not correspond to the hardware read the
- integers as two bytes and compute the result.
- X.PP
- The terminal names section comes next.
- It contains the first line of the terminfo description,
- listing the various names for the terminal,
- separated by the `|' character.
- The section is terminated with an ASCII NUL character.
- X.PP
- The boolean flags have one byte for each flag.
- This byte is either 0 or 1 as the flag is present or absent.
- The capabilities are in the same order as the file <term.h>.
- X.PP
- Between the boolean section and the number section,
- a null byte will be inserted, if necessary,
- to ensure that the number section begins on an even byte.
- All short integers are aligned on a short word boundary.
- X.PP
- The numbers section is similar to the flags section.
- Each capability takes up two bytes,
- and is stored as a short integer.
- If the value represented is \-1, the capability is taken to be missing.
- X.PP
- The strings section is also similar.
- Each capability is stored as a short integer, in the format above.
- A value of \-1 means the capability is missing.
- Otherwise, the value is taken as an offset from the beginning
- of the string table.
- Special characters in ^X or \ec notation are stored in their
- interpreted form, not the printing representation.
- Padding information $<nn> and parameter information %x are
- stored intact in uninterpreted form.
- X.PP
- The final section is the string table.
- It contains all the values of string capabilities referenced in
- the string section.
- Each string is null terminated.
- X.PP
- Note that it is possible for
- X.I setupterm
- to expect a different set of capabilities
- than are actually present in the file.
- Either the database may have been updated since
- X.I setupterm
- has been recompiled
- (resulting in extra unrecognized entries in the file)
- or the program may have been recompiled more recently
- than the database was updated
- (resulting in missing entries).
- X.I setupterm
- must be prepared for both possibilities \-
- this is why the numbers and sizes are included.
- Also, new capabilities must always be added at the end of the lists
- of boolean, number, and string capabilities.
- X.PP
- As an example, an octal dump of the description for the Microterm ACT 4
- is included:
- X.nf
- X.sp
- microterm|act4|microterm act iv,
- cr=^M, cud1=^J, ind=^J, bel=^G, am, cub1=^H,
- ed=^_, el=^^, clear=^L, cup=^T%p1%c%p2%c,
- cols#80, lines#24, cuf1=^X, cuu1=^Z, home=^],
- X.sp
- X.in 0
- X.ft CW
- 000 032 001 \e0 025 \e0 \eb \e0 212 \e0 " \e0 m i c r
- 020 o t e r m | a c t 4 | m i c r o
- 040 t e r m a c t i v \e0 \e0 001 \e0 \e0
- 060 \e0 \e0 \e0 \e0 \e0 \e0 \e0 \e0 \e0 \e0 \e0 \e0 \e0 \e0 \e0 \e0
- 100 \e0 \e0 P \e0 377 377 030 \e0 377 377 377 377 377 377 377 377
- 120 377 377 377 377 \e0 \e0 002 \e0 377 377 377 377 004 \e0 006 \e0
- 140 \eb \e0 377 377 377 377 \en \e0 026 \e0 030 \e0 377 377 032 \e0
- 160 377 377 377 377 034 \e0 377 377 036 \e0 377 377 377 377 377 377
- 200 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377
- *
- 520 377 377 377 377 \e0 377 377 377 377 377 377 377 377 377 377
- 540 377 377 377 377 377 377 007 \e0 \er \e0 \ef \e0 036 \e0 037 \e0
- 560 024 % p 1 % c % p 2 % c \e0 \en \e0 035 \e0
- 600 \eb \e0 030 \e0 032 \e0 \en \e0
- X.ft R
- X.fi
- X.PP
- Some limitations: total compiled entries cannot exceed 4096 bytes.
- The name field cannot exceed 128 bytes.
- X.SH FILES
- X/etc/term/*/* compiled terminal capability data base
- X.SH "SEE ALSO"
- terminfo(5), curses(3)
- //go.sysin dd *
- echo 'x - =doc/terminfo.5'
- sed 's/^X//' <<'//go.sysin dd *' >=doc/terminfo.5
- X.tr ||
- X.TH TERMINFO 5 8/16/82
- X.UC 4
- X.SH NAME
- terminfo \- terminal capability data base
- X.SH SYNOPSIS
- X/etc/terminfo
- X.SH DESCRIPTION
- X.I Terminfo
- is a data base describing terminals.
- It is used, for example, by
- X.IR vi (1)
- and
- X.IR curses (3).
- Terminals are described in
- X.I terminfo
- by giving a set of capabilities which they have and by describing
- how operations are performed.
- Padding requirements and initialization sequences
- are included in
- X.I terminfo.
- X.PP
- Entries in
- X.I terminfo
- consist of a number of comma-separated fields.
- White space after each comma is ignored.
- The first entry for each terminal gives the names which 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 and blanks for readability.
- X.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 ``hp2621''.
- This name should not contain hyphens, except that synonyms may
- be chosen that do not conflict with other names.
- 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 vt100-w.
- The following suffixes should be used where possible:
- X.LP
- X.nf
- X.ta 1i 5i
- \fBSuffix Meaning Example\fP
- -w Wide mode (more than 80 columns) vt100-w
- -am With auto. margins (usually default) vt100-am
- -nam Without automatic margins vt100-nam
- -\fIn\fP Number of lines on the screen aaa-60
- -na No arrow keys (leave them in local) c100-na
- -\fIn\fPp Number of pages of memory c100-4p
- -rv Reverse video c100-rv
- X.fi
- X.SH CAPABILITIES
- The variable is the name by which the programmer (at the terminfo level)
- accesses the capability.
- The capname is the short name used in the text of the database,
- and is used by a person updating the database.
- X.P
- Capability names have no hard length limit, but an informal limit of 5
- characters has been adopted to keep them short.
- Whenever possible, names are chosen to be the same as or similar to
- the ANSI X3.64-1979 standard. Semantics are also intended to match
- those of the specification.
- X.LP
- X.nf
- (P) indicates padding may be specified
- (G) indicates that the string is passed through tparm with
- parms as given (#\fIi\fP).
- (*) indicates that padding may be based on the number of
- lines affected
- (#\fIi\fP) indicates the \fIi\fP\uth\d parameter.
-
- X.ta \w'enter_alt_charset_mode 'u +\w'Capname 'u
- \fBVariable Capname Description\fR
- X.I Booleans:
- auto_left_margin, bw cub1 wraps from column 0 to last column
- auto_right_margin, am Terminal has automatic margins
- beehive_glitch, xsb Beehive (f1=escape, f2=ctrl C)
- ceol_standout_glitch, xhp Standout not erased by overwriting (hp)
- eat_newline_glitch, xenl newline ignored after 80 cols (Concept)
- erase_overstrike, eo Can erase overstrikes with a blank
- generic_type, gn Generic line type (e.g. dialup, switch).
- hard_copy, hc Hardcopy terminal
- has_meta_key, km Has a meta key (shift, sets parity bit)
- has_status_line, hs Has extra ``status line''
- insert_null_glitch, in Insert mode distinguishes nulls
- memory_above, da Display may be retained above the screen
- memory_below, db Display may be retained below the screen
- move_insert_mode, mir Safe to move while in insert mode
- move_standout_mode, msgr Safe to move in standout modes
- over_strike, os Terminal overstrikes
- status_line_esc_ok, eslok Escape can be used on the status line
- teleray_glitch, xt Tabs destructive, magic so char (Teleray 1061)
- tilde_glitch, hz Hazeltine; can't print ~'s
- transparent_underline, ul underline character overstrikes
- xon_xoff, xon Terminal uses xon/xoff handshaking
-
- X.I Numbers:
- columns, cols Number of columns in a line
- init_tabs, it Tabs initially every # spaces
- lines, lines Number of lines on screen or page
- lines_of_memory, lm Lines of memory if > lines. 0 means varies
- magic_cookie_glitch, xmc Number of blank chars left by smso or rmso
- padding_baud_rate, pb Lowest baud rate where cr/nl padding is needed
- virtual_terminal, vt Virtual terminal number (CB/Unix)
- width_status_line, wsl No. columns in status line
-
- X.I Strings:
- back_tab, cbt Back tab (P)
- bell, bel Audible signal (bell) (P)
- carriage_return, cr Carriage return (P*)
- change_scroll_region, csr change to lines #1 through #2 (vt100) (PG)
- clear_all_tabs, tbc Clear all tab stops. (P)
- clear_screen, clear Clear screen (P*)
- clr_eol, el Clear to end of line (P)
- clr_eos, ed Clear to end of display (P*)
- column_address, hpa Set cursor column (PG)
- command_character, CC Term. settable cmd char in prototype
- cursor_address, cup Screen relative cursor motion to row #1 col #2 (PG)
- cursor_down, cud1 Down one line
- cursor_home, home Home cursor (if no cup)
- cursor_invisible, civis Make cursor invisible
- cursor_left, cub1 Move cursor left one space.
- cursor_mem_address, mrcup Memory relative cursor addressing
- cursor_normal, cnorm Make cursor appear normal (undo vs/vi)
- cursor_right, cuf1 Non-destructive space (cursor right)
- cursor_to_ll, ll Last line, first column (if no cup)
- cursor_up, cuu1 Upline (cursor up)
- cursor_visible, cvvis Make cursor very visible
- delete_character, dch1 Delete character (P*)
- delete_line, dl1 Delete line (P*)
- dis_status_line, dsl Disable status line
- down_half_line, hd Half-line down (forward 1/2 linefeed)
- enter_alt_charset_mode, smacs Start alternate character set (P)
- enter_blink_mode, blink Turn on blinking
- enter_bold_mode, bold Turn on bold (extra bright) mode
- enter_ca_mode, smcup String to begin programs that use cup
- enter_delete_mode, smdc Delete mode (enter)
- enter_dim_mode, dim Turn on half-bright mode
- enter_insert_mode, smir Insert mode (enter);
- enter_protected_mode, prot Turn on protected mode
- enter_reverse_mode, rev Turn on reverse video mode
- enter_secure_mode, invis Turn on blank mode (chars invisible)
- enter_standout_mode, smso Begin stand out mode
- enter_underline_mode, smul Start underscore mode
- erase_chars ech Erase #1 characters (PG)
- exit_alt_charset_mode, rmacs End alternate character set (P)
- exit_attribute_mode, sgr0 Turn off all attributes
- exit_ca_mode, rmcup String to end programs that use cup
- exit_delete_mode, rmdc End delete mode
- exit_insert_mode, rmir End insert mode
- exit_standout_mode, rmso End stand out mode
- exit_underline_mode, rmul End underscore mode
- flash_screen, flash Visible bell (may not move cursor)
- form_feed, ff Hardcopy terminal page eject (P*)
- from_status_line, fsl Return from status line
- init_1string, is1 Terminal initialization string
- init_2string, is2 Terminal initialization string
- init_3string, is3 Terminal initialization string
- init_file, if Name of file containing is
- insert_character, ich1 Insert character (P)
- insert_line, il1 Add new blank line (P*)
- insert_padding, ip Insert pad after character inserted (P*)
- key_backspace, kbs Sent by backspace key
- key_catab, ktbc Sent by clear-all-tabs key.
- key_clear, kclr Sent by clear screen or erase key.
- key_ctab, kctab Sent by clear-tab key
- key_dc, kdch1 Sent by delete character key.
- key_dl, kdl1 Sent by delete line key.
- key_down, kcud1 Sent by terminal down arrow key
- key_eic, krmir Sent by rmir or smir in insert mode.
- key_eol, kel Sent by clear-to-end-of-line key.
- key_eos, ked Sent by clear-to-end-of-screen key.
- key_f0, kf0 Sent by function key f0.
- key_f1, kf1 Sent by function key f1.
- key_f10, kf10 Sent by function key f10.
- key_f2, kf2 Sent by function key f2.
- key_f3, kf3 Sent by function key f3.
- key_f4, kf4 Sent by function key f4.
- key_f5, kf5 Sent by function key f5.
- key_f6, kf6 Sent by function key f6.
- key_f7, kf7 Sent by function key f7.
- key_f8, kf8 Sent by function key f8.
- key_f9, kf9 Sent by function key f9.
- key_home, khome Sent by home key.
- key_ic, kich1 Sent by ins char/enter ins mode key.
- key_il, kil1 Sent by insert line.
- key_left, kcub1 Sent by terminal left arrow key
- key_npage, knp Sent by next-page key
- key_ppage, kpp Sent by previous-page key
- key_right, kcuf1 Sent by terminal right arrow key
- key_sf, kind Sent by scroll-forward/down key
- key_sr, kri Sent by scroll-backward/up key
- key_stab, khts Sent by set-tab key
- key_up, kcuu1 Sent by terminal up arrow key
- keypad_local, rmkx Out of "keypad transmit" mode
- keypad_xmit, smkx Put terminal in "keypad transmit" mode
- label_f0, lf0 Labels on function key f0 if not f0
- label_f1, lf1 Labels on function key f1 if not f1
- label_f10, lf10 Labels on function key f10 if not f10
- label_f2, lf2 Labels on function key f2 if not f2
- label_f3, lf3 Labels on function key f3 if not f3
- label_f4, lf4 Labels on function key f4 if not f4
- label_f5, lf5 Labels on function key f5 if not f5
- label_f6, lf6 Labels on function key f6 if not f6
- label_f7, lf7 Labels on function key f7 if not f7
- label_f8, lf8 Labels on function key f8 if not f8
- label_f9, lf9 Labels on function key f9 if not f9
- meta_on, smm Turn on "meta mode" (8th bit)
- meta_off, rmm Turn off "meta mode"
- newline, nel Newline (behaves like cr followed by lf)
- pad_char, pad Pad character (rather than null)
- parm_dch, dch Delete #1 chars (PG*)
- parm_delete_line, dl Delete #1 lines (PG*)
- parm_down_cursor, cud Move cursor down #1 lines. (PG*)
- parm_ich, ich Insert #1 blank chars (PG*)
- parm_index, indn Scroll forward #1 lines (PG)
- parm_insert_line, il Add #1 new blank lines (PG*)
- parm_left_cursor, cub Move cursor left #1 spaces (PG)
- parm_right_cursor, cuf Move cursor right #1 spaces. (PG*)
- parm_rindex, rin Scroll backward #1 lines (PG)
- parm_up_cursor, cuu Move cursor up #1 lines. (PG*)
- pkey_key, pfkey Prog funct key #1 to type string #2
- pkey_local, pfloc Prog funct key #1 to execute string #2
- pkey_xmit, pfx Prog funct key #1 to xmit string #2
- print_screen, mc0 Print contents of the screen
- prtr_off, mc4 Turn off the printer
- prtr_on, mc5 Turn on the printer
- repeat_char, rep Repeat char #1 #2 times. (PG*)
- reset_1string, rs1 Reset terminal completely to sane modes.
- reset_2string, rs2 Reset terminal completely to sane modes.
- reset_3string, rs3 Reset terminal completely to sane modes.
- reset_file, rf Name of file containing reset string.
- restore_cursor, rc Restore cursor to position of last sc.
- row_address, vpa Vertical position absolute (set row). (PG)
- save_cursor, sc Save cursor position. (P)
- scroll_forward, ind Scroll text up (P)
- scroll_reverse, ri Scroll text down (P)
- set_attributes, sgr Define the video attributes (PG9)
- set_tab, hts Set a tab in all rows, current column.
- set_window, wind Current window is lines #1-#2 cols #3-#4
- tab, ht Tab to next 8 space hardware tab stop.
- to_status_line, tsl Go to status line, column #1
- underline_char, uc Underscore one char and move past it
- up_half_line, hu Half-line up (reverse 1/2 linefeed)
- X.fi
- X.PP
- X.B A Sample Entry
- X.PP
- The following entry, which describes the Concept\-100, is among the more
- complex entries in the
- X.I terminfo
- file as of this writing.
- X.PP
- X.nf
- X.ta .3i
- concept100\||\|c100|\|\|concept\||\|c104\||\|c100-4p\||\|concept 100,
- is2=\eEU\eEf\eE7\eE5\eE8\eEl\eENH\eEK\eE\e200\eEo&\e200\eEo\e47\eE,
- cr=^M, cud1=^J, ind=^J, bel=^G, smcup=\eEU\eEv 8p\eEp\er,
- rmcup=\eEv $<6>\eEp\er\en, il1=\eE^R$<3*>, am, cub1=^H,
- ed=\eE^C$<16*>, el=\eE^U$<16>, clear=^L$<2*>,
- cup=\eEa%p1%' '%+%c%p2%' '%+%c, cols#80, dch1=\eE^A$<16*>,
- dl1=\eE^B$<3*>, rmir=\eE\e200, eo, smir=\eE^P, in, ip=$<16*>,
- lines#24, mir, cuf1=\eE=, ht=\et$<8>, kbs=^h, ul, cuu1=\eE;,
- db, smul=\eEG, rmul=\eEg, xenl, cvvis=\eEW, cnorm=\eEw,
- flash=\eEk$<20>\eEK, pb#9600, vt#8, smul=\eEG, rmul=\eEg,
- smso=\eEE\eED, rmso=\eEd\eEe, dim=\eEE, rev=\eED, blink=\eEC,
- prot=\eEI, invis=\eEH, sgr0=\eEN\e200, rep=\eEr%p1%c%p2%' '%+%c$<.2*>,
- smkx=\eEX, rmkx=\eEx, kcuu1=\eE;, kcud1=\eE<, kcub1=\eE>,
- kcuf1=\eE=, khome=\eE?, kf1=\eE5, kf2=\eE6, kf3=\eE7,
- X.fi
- X.PP
- Entries may continue onto multiple lines by placing white space at
- the beginning of each line except the first.
- Comments may be included on lines beginning with ``#''.
- Capabilities in
- X.I terminfo
- are of three types:
- Boolean capabilities which indicate that the terminal has
- some particular feature, numeric capabilities giving the size of the terminal
- or the size of particular delays, and string
- capabilities, which give a sequence which can be used to perform particular
- terminal operations.
- X.PP
- X.B Types of Capabilities
- X.PP
- All capabilities have short codes. For instance, the fact that
- the Concept has \*(lqautomatic margins\*(rq (i.e. an automatic return and linefeed
- when the end of a line is reached) is indicated by the capability \fBam\fR.
- Hence the description of the Concept includes \fBam\fR.
- Numeric capabilities are followed by the character `#' and then the value.
- Thus \fBcols\fR which indicates the number of columns the terminal has
- gives the value `80' for the Concept.
- X.PP
- XFinally, string valued capabilities, such as \fBel\fR (clear to end of line
- sequence) are given by the two character code, an `=', and then a string
- ending at the next following `,'. A delay in milliseconds may appear
- anywhere in such a capability, enclosed in $<..> brackets,
- as in \fBel\fP=\eEK$<3>,
- and padding characters are supplied by
- X.I tputs
- to provide this delay.
- The delay can be either a number, e.g. `20', or a number followed by
- an `*', i.e. `3*'. A `*' indicates that the padding required is proportional
- to the number of lines affected by the operation, and the amount given is
- the per-affected-unit padding required.
- (In the case of insert character, the factor is still the number of
- X.IR lines
- affected.
- This is always one unless the terminal has \fBxenl\fP 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 unit to tenths of milliseconds.
- (Only one decimal place is allowed.)
- X.PP
- A number of escape sequences are provided in the string valued capabilities
- for easy encoding of characters there. A \fB\eE\fR (or \fB\ee\fP)
- maps to an \s-2ESCAPE\s0
- character, \fB^x\fR maps to a control-x for any appropriate x, and the sequences
- \fB\en \er \et \eb \ef \es\fR give a newline,
- return, tab, backspace, formfeed and space, respectively.
- XFinally, characters may be given as three octal digits after a \fB\e\fR,
- and the characters \fB^\fR, \fB\e\fR and comma may be given
- as \fB\e^\fR, \fB\e\e\fR and \fB\e,\fR.
- X.PP
- XFor convenience when testing entries, individual capabilities may be easily
- commented out by directly preceding the name of the capability by a period.
- Thus the entry
- X.DT
- X.nf
- 33\||\|tty33\||\|tty\||\|model 33 teletype,
- cr=^M, cud1=^J, .ind=^J, bel=^G, cols#72, hc, os,
- X.fi
- X.ad
- is equivalent to the entry
- X.DT
- X.nf
- 33\||\|tty33\||\|tty\||\|model 33 teletype,
- cr=^M, cud1=^J, bel=^G, cols#72, hc, os,
- X.fi
- X.ad
- the \fBind\fP capability having been 'commented out'.
- X.br
- X.ne 5
- X.PP
- X.B Preparing Descriptions
- X.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
- X.I terminfo
- and to build up a description gradually, using partial descriptions
- with
- X.I vi
- to check that they are correct.
- Be aware that a very unusual terminal may expose deficiencies in
- the ability of the
- X.I terminfo
- file to describe it
- or bugs in
- X.I vi.
- To easily test a new terminal description you can set the environment variable
- TERMINFO to a pathname of a file containing the description you are working
- on and the editor will look there rather than in
- X.I /etc/terminfo.
- To get the padding for insert line right (if the terminal manufacturer
- did not document it) a severe test is to edit /etc/passwd at 9600 baud,
- delete 16 or so lines from the middle of the screen, then hit the `u'
- key several times quickly.
- If the terminal messes up, more padding is usually needed.
- A similar test can be used for insert character.
- X.PP
- X.B Basic capabilities
- X.PP
- The number of columns on each line for the terminal is given by the
- \fBcols\fR numeric capability. If the terminal is a \s-2CRT\s0, then the
- number of lines on the screen is given by the \fBlines\fR capability.
- If the terminal wraps around to the beginning of the next line when
- it reaches the right margin, then it should have the \fBam\fR capability.
- If the terminal can clear its screen, then this is given by the
- \fBclear\fR string capability.
- If the terminal overstrikes
- (rather than clearing a position when a character is struck over)
- then it should have the \fBos\fR capability.
- If the terminal is a printing terminal, with no soft copy unit,
- give it both
- X.B hc
- and
- X.BR os .
- X.RB ( os
- applies to storage scope terminals, such as Tektronix 4010
- series, as well as hard copy and APL terminals.)
- If there is a code to move the cursor to the left edge of the current
- row, give this as
- X.BR cr .
- (Normally this will be carriage return, control M.)
- If there is a code to produce an audible signal (bell, beep, etc)
- give this as
- X.BR bel .
- X.PP
- If there is a code to move the cursor one position to the left
- (such as backspace) that capability should be given as
- X.BR cub1 .
- Similarly, codes to move forward, up, and down should be
- given as
- X.BR cuf1 ,
- X.BR cuu1 ,
- and
- X.BR cud1 .
- These local cursor motions should not alter the text they pass over,
- for example, you would not normally use `\fBcuf1\fP=\es' because the
- space would erase the character moved over.
- X.PP
- A very important point here is that the local cursor motions encoded
- in
- X.I terminfo
- are undefined at the left and top edges of a \s-2CRT\s0 terminal.
- Programs should never attempt to backspace around the left edge,
- unless
- X.B bw
- is given,
- and never attempt to go up locally off the top.
- In order to scroll text up, a program will go to the bottom of the screen
- and send the
- X.B ind
- (index) string.
- X.PP
- To scroll text down, a program goes to the top of the screen and sends the
- X.B ri
- (reverse index) string.
- The strings
- X.B ind
- and
- X.B ri
- are undefined when not on their respective edges of the screen.
- X.PP
- The \fBam\fR capability tells whether the cursor sticks at the right
- edge of the screen when text is output, but this does not necessarily
- apply to a
- X.B cuf1
- from the last column.
- The only local motion which is defined from the left edge is if
- X.B bw
- is given, then a
- X.B cub1
- from the left edge will move to the right edge of the previous row.
- If
- X.B bw
- is not given, the effect is undefined.
- This is useful for drawing a box around the edge of the screen, for example.
- If the terminal has switch selectable automatic margins,
- the
- X.I terminfo
- file usually assumes that this is on, i.e. \fBam\fR.
- If the terminal has a command which moves to the first column of the next
- line, that command can be given as
- X.B nel
- (newline).
- It does not matter if the command clears the remainder of the current line,
- so if the terminal has no
- X.B cr
- and
- X.B lf
- it may still be possible to craft a working
- X.B nel
- out of one or both of them.
- X.PP
- These capabilities suffice to describe hardcopy and \*(lqglass-tty\*(rq terminals.
- Thus the model 33 teletype is described as
- X.PP
- X.DT
- X.nf
- 33\||\|tty33\||\|tty\||\|model 33 teletype,
- cr=^M, cud1=^J, ind=^J, bel=^G, cols#72, hc, os,
- X.PP
- while the Lear Siegler \s-2ADM\-3\s0 is described as
- X.PP
- X.DT
- X.nf
- adm3\||\|3\||\|lsi adm3,
- cr=^M, cud1=^J, ind=^J, bel=^G,
- am, cub1=^H, clear=^Z, lines#24, cols#80,
- X.fi
- X.PP
- X.B Parameterized Strings
- X.PP
- Cursor addressing and other strings requiring parameters
- in the terminal are described by a
- parameterized string capability, with
- X.IR printf (3s)
- like escapes \fB%x\fR in it.
- XFor example, to address the cursor, the
- X.B cup
- capability is given, using two parameters:
- the row and column to address to.
- (Rows and columns are numbered from zero and refer to the
- physical screen visible to the user, not to any unseen memory.)
- If the terminal has memory relative cursor addressing,
- that can be indicated by
- X.BR mrcup .
- X.PP
- The parameter mechanism uses a stack and special \fB%\fP codes
- to manipulate it. Typically a sequence will push one of the
- parameters onto the stack and then print it in some format.
- Often more complex operations are necessary.
- X.PP
- The \fB%\fR encodings have the following meanings:
- X.PP
- X.DT
- X.nf
- X.ta .5i 1.5i
- %% outputs `%'
- %d print pop() as in printf
- %2d print pop() like %2d
- %02d print pop() like %02d
- %3d print pop() like %3d
- %03d print pop() like %03d
- %c print pop() like %c
- %s print pop() like %s
-
- %p[1-9] push ith parm
- %P[a-z] set variable [a-z] to pop()
- %g[a-z] get variable [a-z] and push it
- %'c' char constant c
- %{nn} integer constant nn
-
- %+ %- %* %/ %m
- arithmetic (%m is mod): push(pop() op pop())
- %& %| %^ bit operations: push(pop() op pop())
- %= %> %< logical operations: push(pop() op pop())
- %! %~ unary operations push(op pop())
- %i add 1 to first two parms (for ANSI terminals)
-
- %? expr %t thenpart %e elsepart %;
- if-then-else, %e elsepart is optional.
- else-if's are possible ala Algol 68:
- %? c1 %t %e c2 %t %e c3 %t %e c4 %t %e %;
- X.fi
- X.PP
- It should be noted that the binary operators above (e.g. %+, %-, %m, etc.)
- all work in the usual fashion, i.e.
- X.ce
- %gx %gy %m
- yields \fBx mod y\fR not \fBy mod x\fR.
- X.PP
- Consider the HP2645, which, to get to row 3 and column 12, needs
- to be sent \eE&a12c03Y padded for 6 milliseconds. Note that the order
- of the rows and columns is inverted here, and that the row and column
- are printed as two digits.
- Thus its \fBcup\fR capability is \*(lqcup=\eE&%p2%2dc%p1%2dY$<6>\*(rq.
- X.PP
- The Microterm \s-2ACT-IV\s0 needs the current row and column sent
- preceded by a \fB^T\fR, with the row and column simply encoded in binary,
- \*(lqcup=^T%p1%c%p2%c\*(rq.
- Terminals which use \*(lq%c\*(rq need to be able to
- backspace the cursor (\fBcub1\fR),
- and to move the cursor up one line on the screen (\fBcuu1\fR).
- This is necessary because it is not always safe to transmit \fB\en\fR,
- \fB^D\fR and \fB\er\fR, as the system may change or discard them.
- (The library routines dealing with terminfo set tty modes so that
- tabs are never expanded, so \et is safe to send.
- This turns out to be essential for the Ann Arbor 4080.)
- X.PP
- A final example is the \s-2LSI ADM\s0-3a, which uses row and column
- offset by a blank character, thus \*(lqcup=\eE=%p1%' '%+%c%p2%' '%+%c\*(rq.
- After sending `\eE=', this pushes the first parameter, pushes the
- ASCII value for a space (32), adds them (pushing the sum on the stack
- in place of the two previous values) and outputs that value as a character.
- Then the same is done for the second parameter.
- More complex arithmetic is possible using the stack.
- X.PP
- If the terminal has row or column absolute cursor addressing,
- these can be given as single parameter capabilities
- X.B hpa
- (horizontal position absolute)
- and
- X.B vpa
- (vertical position absolute).
- Sometimes these are shorter than the more general two parameter
- sequence (as with the hp2645) and can be used in preference to
- X.B cup .
- If there are parameterized local motions (e.g. move
- X.I n
- spaces to the right) these can be given as
- X.BR cud ,
- X.BR cub ,
- X.BR cuf ,
- and
- X.BR cuu
- with a single parameter indicating how many spaces to move.
- These are primarily useful if the terminal does not have
- X.BR cup ,
- such as the Tektronix 4025.
- X.PP
- X.B Cursor motions
- X.PP
- If the terminal has a fast way to home the cursor
- (to very upper left corner of screen) then this can be given as
- \fBhome\fR; similarly a fast way of getting to the lower left hand corner
- can be given as \fBll\fR; this may involve going up with \fBcuu1\fR
- from the home position,
- but a program should never do this itself (unless \fBll\fR does) because it
- can make no assumption about the effect of moving up from the home position.
- Note that the home position is the same as addressing to (0,0):
- to the top left corner of the screen, not of memory.
- (Thus, the \eEH sequence on HP terminals cannot be used for
- X.BR home .)
- X.PP
- X.B Area clears
- X.PP
- If the terminal can clear from the current position to the end of the
- line, leaving the cursor where it is, this should be given as \fBel\fR.
- If the terminal can clear from the current position to the end of the
- display, then this should be given as \fBed\fR.
- \fBed\fR is only defined from the first column of a line.
- (Thus, it can be simulated by a request to delete a large number of lines,
- if a true
- X.B ed
- is not available.)
- X.PP
- X.B Insert/delete line
- X.PP
- If the terminal can open a new blank line before the line where the cursor
- is, this should be given as \fBil1\fR; this is done only from the first
- position of a line. The cursor must then appear on the newly blank line.
- If the terminal can delete the line which the cursor is on, then this
- should be given as \fBdl1\fR; this is done only from the first position on
- the line to be deleted.
- Versions of
- X.B il1
- and
- X.B dl1
- which take a single parameter and insert or delete that many lines can
- be given as
- X.B il
- and
- X.BR dl .
- If the terminal has a settable scrolling region (like the vt100)
- the command to set this can be described with the
- X.B csr
- capability, which takes two parameters:
- the top and bottom lines of the scrolling region.
- The cursor position is, alas, undefined after using this command.
- It is possible to get the effect of insert or delete line using
- this command \- the
- X.B sc
- and
- X.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
- X.B ri
- or
- X.B ind
- on many terminals without true insert/delete line,
- and are often faster even on terminals with those features.
- X.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
- X.BR wind .
- The four parameters are the starting and ending lines in memory
- and the starting and ending columns in memory, in that order.
- X.PP
- If the terminal can retain display memory above then the
- \fBda\fR capability should be given; if display memory can be retained
- below then \fBdb\fR should be given. These indicate
- that deleting a line or scrolling may bring non-blank lines up from below
- or that scrolling back with \fBri\fR may bring down non-blank lines.
- X.PP
- X.B Insert/delete character
- X.PP
- There are two basic kinds of intelligent terminals with respect to
- insert/delete character which can be described using
- X.I terminfo.
- The most common insert/delete character operations affect only the characters
- on the current line and shift characters off the end of the line rigidly.
- Other terminals, such as the Concept 100 and the Perkin Elmer Owl, make
- a distinction between typed and untyped blanks on the screen, shifting
- upon an insert or delete only to an untyped blank on the screen which is
- either eliminated, or expanded to two untyped blanks. You can find out
- which kind of terminal you have by clearing the screen and then typing
- text separated by cursor motions. Type \*(lqabc\ \ \ \ def\*(rq using local
- cursor motions (not spaces) between the \*(lqabc\*(rq and the \*(lqdef\*(rq.
- Then position the cursor before the \*(lqabc\*(rq and put the terminal in insert
- mode. If typing characters causes the rest of the line to shift
- rigidly and characters to fall off the end, then your terminal does
- not distinguish between blanks and untyped positions. If the \*(lqabc\*(rq
- shifts over to the \*(lqdef\*(rq which then move together around the end of the
- current line and onto the next as you insert, you have the second type of
- terminal, and should give the capability \fBin\fR, which stands for
- \*(lqinsert null\*(rq.
- While these are two logically separate attributes (one line 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.
- X.PP
- Termcap can describe both terminals which have an insert mode, and terminals
- which send a simple sequence to open a blank position on the current line.
- Give as \fBsmir\fR the sequence to get into insert mode.
- Give as \fBrmir\fR the sequence to leave insert mode.
- Now give as \fBich1\fR any sequence needed to be sent just before sending
- the character to be inserted. Most terminals with a true insert mode
- will not give \fBich1\fR, terminals which send a sequence to open a screen
- position should give it here. (Insert mode is usually
- preferable to the sequence
- to open a position on the screen if your terminal has both.)
- If post insert padding is needed, give this as a number of milliseconds
- in \fBip\fR (a string option). Any other sequence which may need to be
- sent after an insert of a single character may also be given in \fBip\fR.
- If your terminal needs both to be placed into an `insert mode' and
- a special code to precede each inserted character, then both
- X.BR smir / rmir
- and
- X.B ich1
- can be given, and both will be used.
- The
- X.B ich
- capability, with one parameter,
- X.IR n ,
- will repeat the effects of
- X.B ich1
- X.I n
- times.
- X.PP
- It is occasionally necessary to move around while in insert mode
- to delete characters on the same line (e.g. if there is a tab after
- the insertion position). If your terminal allows motion while in
- insert mode you can give the capability \fBmir\fR to speed up inserting
- in this case. Omitting \fBmir\fR will affect only speed. Some terminals
- (notably Datamedia's) must not have \fBmir\fR because of the way their
- insert mode works.
- X.PP
- XFinally, you can specify
- X.B dch1
- to delete a single character,
- X.B dch
- with one parameter,
- X.IR n ,
- to delete
- X.I n characters,
- and delete mode by giving \fBsmdc\fR and \fBrmdc\fR
- to enter and exit delete mode (any mode the terminal needs to be placed
- in for
- X.B dch1
- to work).
- X.PP
- A command to erase
- X.I n
- characters (equivalent to outputting
- X.I n
- blanks without moving the cursor)
- can be given as
- X.B ech
- with one parameter.
- X.PP
- X.B "Highlighting, underlining, and visible bells"
- X.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
- X.I 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 \fBsmso\fR and \fBrmso\fR respectively.
- If the code to change into or out of standout
- mode leaves one or even two blank spaces on the screen,
- as the TVI 912 and Teleray 1061 do,
- then \fBxmc\fR should be given to tell how many spaces are left.
- X.PP
- Codes to begin underlining and end underlining can be given as \fBsmul\fR
- and \fBrmul\fR respectively.
- If the terminal has a code to underline the current character and move
- the cursor one space to the right,
- such as the Microterm Mime,
- this can be given as \fBuc\fR.
- X.PP
- Other capabilities to enter various highlighting modes include
- X.B blink
- (blinking)
- X.B bold
- (bold or extra bright)
- X.B dim
- (dim or half bright)
- X.B invis
- (blanking or invisible text)
- X.B prot
- (protected)
- X.B rev
- (reverse video)
- X.B sgr0
- (turn off
- X.I all
- attribute modes)
- X.B smacs
- (enter alternate character set mode)
- and
- X.B rmacs
- (exit alternate character set mode).
- Turning on any of these modes singly may or may not turn off other modes.
- X.PP
- If there is a sequence to set arbitrary combinations of modes,
- this should be given as
- X.B sgr
- (set attributes),
- taking 9 parameters.
- Each parameter is either 0 or 1, as the corresponding attribute is on or off.
- The 9 parameters are, in order:
- standout, underline, reverse, blink, dim, bold, invis, protect, alternate
- character set.
- Not all modes need be supported by
- X.BR sgr ,
- only those for which corresponding separate attribute commands exist.
- X.PP
- Terminals with the ``magic cookie'' glitch
- X.RB ( xmc )
- deposit special ``cookies'' when they receive mode setting sequences,
- which affect the display algorithm, rather than having extra bits for
- each character.
- Some terminals, such as the HP 2621, automatically leave standout
- mode when they move to a new line or the cursor is addressed.
- Programs using standout mode should exit standout mode before
- moving the cursor or sending a newline,
- unless the
- X.B msgr
- capability, asserting that it is safe to move in standout mode, is present.
- X.PP
- If the terminal has
- a way of flashing the screen to indicate an error quietly (a bell replacement)
- then this can be given as \fBflash\fR; it must not move the cursor.
- X.PP
- If the cursor needs to be made more visible than normal when it is
- not on the bottom line (to make, for example, a non-blinking underline into an
- easier to find block or blinking underline)
- give this sequence as
- X.BR cvvis .
- If there is a way to make the cursor completely invisible, give that as
- X.BR civis .
- The capability
- X.BR cnorm
- should be given which undoes the effects of both of these modes.
- X.PP
- If the terminal needs to be in a special mode when running
- a program that uses these capbilities,
- the codes to enter and exit this mode can be given as \fBsmcup\fR and \fBrmcup\fR.
- This arises, for example, from terminals like the Concept with more than
- one page of memory.
- If the terminal has only memory relative cursor addressing and not screen
- relative cursor addressing, a one screen-sized window must be fixed into
- the terminal for cursor addressing to work properly.
- This is also used for the Tektronix 4025,
- where
- X.B smcup
- sets the command character to be the one used by terminfo.
- X.PP
- If your terminal correctly generates underlined characters
- (with no special codes needed)
- even though it does not overstrike,
- then you should give the capability \fBul\fR.
- If overstrikes are erasable with a blank,
- then this should be indicated by giving \fBeo\fR.
- X.PP
- X.B Keypad
- X.PP
- If the terminal has a keypad that transmits codes when the keys are pressed,
- this information can be given. Note that it is not possible to handle
- terminals where the keypad only works in local (this applies, for example,
- to the unshifted HP 2621 keys).
- If the keypad can be set to transmit or not transmit,
- give these codes as \fBsmkx\fR and \fBrmkx\fR.
- Otherwise the keypad is assumed to always transmit.
- The codes sent by the left arrow, right arrow, up arrow, down arrow,
- and home keys can be given as \fBkcub1, kcuf1, kcuu1, kcud1,
- \fRand\fB khome\fR respectively.
- If there are function keys such as f0, f1, ..., f10, the codes they send
- can be given as \fBkf0, kf1, ..., kf10\fR.
- If these keys have labels other than the default f0 through f10, the labels
- can be given as \fBlf0, lf1, ..., lf10\fR.
- The codes transmitted by certain other special keys can be given:
- X.B kbs
- (backspace),
- X.B ktbc
- (clear all tabs),
- X.B kctab
- (clear the tab stop in this column),
- X.B kclr
- (clear screen or erase key),
- X.B kdch1
- (delete character),
- X.B kdl1
- (delete line),
- X.B krmir
- (exit insert mode),
- X.B kel
- (clear to end of line),
- X.B ked
- (clear to end of screen),
- X.B kich1
- (insert character or enter insert mode),
- X.B kil1
- (insert line),
- X.B knp
- (next page),
- X.B kpp
- (previous page),
- X.B kind
- (scroll forward/down),
- X.B kri
- (scroll backward/up),
- X.B khts
- (set a tab stop in this column).
- X.PP
- X.B Tabs and Initialization
- X.PP
- If the terminal has hardware tabs, the command to advance to the next
- tab stop can be given as
- X.B ht
- (usually control I).
- A ``backtab'' command which moves leftward to the next tab stop can
- be given as
- X.BR cbt .
- By convention, if the teletype modes indicate that tabs are being
- expanded by the computer rather than being sent to the terminal,
- programs should not use
- X.B ht
- or
- X.B cbt
- even if they are present, since the user may not have the tab stops
- properly set.
- If the terminal has hardware tabs activated by control I, then
- X.B tabs
- is given, in addition to
- X.BR ht .
- This is normally used by the
- X.IR tset (1)
- command to determine whether to set the mode for hardware tab expansion.
- X.PP
- Other capabilities
- include
- X.BR is1 ,
- X.BR is2 ,
- and
- X.BR is3 ,
- initialization strings for the terminal,
- and \fBif\fR, the name of a file containing long initialization strings.
- These strings are expected to set the terminal into modes consistent
- with the rest of the terminfo description.
- They are normally sent to the terminal, by the
- X.IR tset (1)
- program, each time the user logs in.
- They will be printed in the following order:
- X.BR is1 ;
- X.BR is2 ;
- setting tabs using
- X.B tbc
- and
- X.BR hts ;
- X.BR if ;
- and finally
- X.BR is3 .
- Most initialization is done with
- X.B is2 .
- Special terminal modes can be set up without duplicating strings
- by putting the common sequences in
- X.B is2
- and special cases in
- X.B is1
- and
- X.BR is3 .
- A pair of sequences that does a harder reset from a totally unknown state
- can be analogously given as
- X.BR rs1 ,
- X.BR rs2 ,
- X.BR rf ,
- and
- X.BR rs3 ,
- analogous to
- X.B is2
- and
- X.BR if .
- These strings are output by the
- X.IR reset (1)
- program, which is used when the terminal gets into a wedged state.
- Commands are normally placed in
- X.B rs2
- and
- X.B rf
- only if they produce annoying effects on the screen and are not
- necessary when logging in.
- XFor example, the command to set the vt100 into 80 column mode would
- normally be part of
- X.BR is2 ,
- but it causes an annoying glitch of the screen and is not normally
- needed since the terminal is usually already in 80 column mode.
- X.PP
- If there are commands to set and clear tab stops, they can be given as
- X.B tbc
- (clear all tab stops)
- and
- X.B hts
- (set a tab stop in the current column of every row).
- If a more complex sequence is needed to set the tabs than can be
- described by this, the sequence can be placed in
- X.B is2
- or
- X.BR if .
- X.PP
- X.B Delays
- X.PP
- Certain capabilities control padding in the teletype driver.
- These are primarily needed by hard copy terminals, and are used
- by the
- X.IR tset (1)
- program to set teletype modes appropriately.
- Delays embedded in the capabilities
- X.B cr ,
- X.B ind ,
- X.B cub1 ,
- X.B ff ,
- and
- X.B tab
- will cause the appropriate delay bits to be set in the teletype driver.
- If
- X.B pb
- (padding baud rate)
- is given,
- these values can be ignored at baud rates below the value of
- X.B pb .
- X.PP
- X.B Miscellaneous
- X.PP
- If the terminal requires other than a null (zero) character as a pad,
- then this can be given as \fBpad\fR.
- Only the first character of the
- X.B pad
- string is used.
- X.PP
- If the terminal has an extra ``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,
- into which one can cursor address normally,
- (such as the Heathkit h19's 25th line, or the 24th line of a vt100
- which is set to a 23 line scrolling region)
- the capability
- X.B hs
- should be given.
- Special strings to go to the beginning of the status
- line and to return from the status line can be given as
- X.B tsl
- and
- X.BR fsl .
- X.RB ( fsl
- must leave the cursor position in the same place it was before
- X.BR tsl .)
- X.B tsl
- takes one parameter, which is the column number of the status line
- the cursor is to be moved to.
- If escape sequences and other special commands, such as tab, work
- while in the status line, the flag
- X.B eslok
- can be given.
- A string which turns off the status line (or otherwise erases its
- contents) should be given as
- X.B dsl .
- If the terminal has commands to save and restore the position of the cursor,
- give them as
- X.B sc
- and
- X.BR rc .
- The status line is normally assumed to be the same width as the rest
- of the screen, e.g.
- X.B cols .
- If the status line is a different width (possibly because the terminal
- does not allow an entire line to be loaded) the width, in columns,
- can be indicated with the numeric parameter
- X.B wsl .
- X.PP
- If the terminal can move up or down half a line,
- this can be indicated with
- X.B hu
- (half line up)
- and
- X.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
- X.B ff
- (usually control L).
- X.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
- X.BR rep .
- The first parameter is the character to be repeated and the second
- is the number of times to repeat it.
- Thus, tparm(repeat_char, 'x', 10) is the same as `xxxxxxxxxx'.
- X.PP
- If the terminal has a settable command character, such as the Tektronix 4025,
- this can be indicated with
- X.BR CC .
- A prototype command character is chosen which is used in all capabilities.
- This character is given in the
- X.B CC
- capability to identify it.
- The following convention is supported on some UNIX systems:
- The environment is to be searched for a
- X.B CC
- variable, and if found, all
- occurrances of the prototype character are replaced with the character
- in the environment variable.
- X.PP
- Terminal descriptions that do not represent a specific kind of known
- terminal, such as
- X.IR switch ,
- X.IR dialup ,
- X.IR patch ,
- and
- X.IR network ,
- should include the
- X.B gn
- (generic) capability so that programs can complain that they don't know
- how to talk to the terminal.
- (This capability does not apply to
- X.I virtual
- terminal descriptions for which the escape sequences are known.)
- X.PP
- If the terminal uses xon/xoff handshaking for flow control, give
- X.BR xon .
- Padding information should still be included so that routines can
- make better decisions about costs, but actual pad characters may
- not be transmitted.
- X.PP
- If the terminal has a ``meta key'' which acts as a shift key,
- setting the 8th bit of any character transmitted, this fact can
- be indicated with
- X.BR km .
- Otherwise, software will assume that the 8th bit is parity and it
- will usually be cleared.
- If strings exist to turn this ``meta mode'' on and off, they
- can be given as
- X.B smm
- and
- X.BR rmm .
- X.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
- X.BR lm .
- A value of 0 indicates that the number of lines is not fixed,
- but that there is still more memory than fits on the screen.
- X.PP
- If the terminal is one of those supported by the CB-UNIX virtual
- terminal protocol, the terminal number can be given as
- X.BR vt .
- X.PP
- Media copy
- strings which control an auxillary printer connected to the terminal
- can be given as
- X.BR mc0 :
- print the contents of the screen,
- X.BR mc4 :
- turn on the printer, and
- X.BR mc5 :
- turn off 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.
- X.PP
- Strings to program function keys can be given as
- X.BR pfkey ,
- X.BR pfloc ,
- and
- X.BR pfx .
- Each of these strings takes two parameters: the function key number to
- program (from 0 to 10) and the string to program it with.
- XFunction key numbers out of this range may program undefined keys in
- a terminal dependent manner.
- The difference between the capabilities is that
- X.B pfkey
- causes pressing the given key to be the same as the user typing the
- given string,
- X.B pfloc
- causes the string to be executed by the terminal in local, and
- X.B pfx
- causes the string to be transmitted to the computer.
- X.PP
- X.B Glitches and Braindamage
- X.PP
- Hazeltine terminals, which don't allow `~' characters to be displayed should
- indicate \fBhz\fR.
- X.PP
- Terminals which ignore a linefeed immediately after an \fBam\fR wrap,
- such as the Concept and vt100,
- should indicate \fBxenl\fR.
- X.PP
- If
- X.B el
- is required to get rid of standout
- (instead of merely writing normal text on top of it),
- \fBxhp\fP should be given.
- X.PP
- Teleray terminals, where tabs turn all characters moved over to blanks,
- should indicate \fBxt\fR (destructive tabs).
- This glitch is also taken to mean that it is not possible to position
- the cursor on top of a ``magic cookie'',
- that to erase standout mode it is instead necessary to use
- delete and insert line.
- X.PP
- The Beehive Superbee, which is unable to correctly transmit the escape
- or control C characters, has
- X.BR xsb ,
- indicating that the f1 key is used for escape and f2 for control C.
- (Only certain superbees have this problem, depending on the ROM.)
- X.PP
- Other specific terminal problems may be corrected by adding more
- capabilities of the form \fBx\fIx\fR.
- X.PP
- X.B Similar Terminals
- X.PP
- If there are two very similar terminals,
- one can be defined as being just like the other with certain exceptions.
- The string capability \fBuse\fR can be given
- with the name of the similar terminal.
- The capabilities given before
- X.B use
- override those in the terminal type invoked by
- X.BR use .
- A capability can be cancelled with \fBxx@\fR where xx is the capability.
- XFor example, the entry
- X.PP
- 2621-nl, smkx@, rmkx@, use=2621,
- X.PP
- defines a 2621-nl that does not have the \fBsmkx\fR or \fBrmkx\fR capabilities,
- and hence does not turn on the function key labels when in visual mode.
- This is useful for different modes for a terminal, or for different
- user preferences. An terminal may have as many \fBuse\fR entries as needed.
- They are handled in the order given in the description, that is, later
- X.BR use 's
- will not overwrite capabilities defined earlier in the entry.
- X.SH FILES
- X.DT
- X/etc/terminfo file containing terminal descriptions
- X.br
- X/etc/term/?/* directories containing compiled descriptions
- X.SH SEE ALSO
- ex(1), curses(3), tset(1), vi(1), ul(1), more(1)
- X.SH AUTHOR
- Pavel Curtis
- //go.sysin dd *
- exit
-