tteerrmmccaapp -- System Administration

Terminal-description language
/eettcc/tteerrmmccaapp

tteerrmmccaapp  is a  language for  describing  terminals and  their capabilities.
Terminal descriptions  are collected in the file  /eettcc/tteerrmmccaapp and are read
by ttggeetteenntt and  its related programs to ensure that  output to a particular
terminal is in a format that that terminal can understand.

COHERENT also  supports the  terminal-description language tteerrmmiinnffoo.  For a
description  of  how these  languages  differ, see  the  Lexicon entry  for
tteerrmmiinnffoo.

_O_v_e_r_v_i_e_w
A terminal  description written in tteerrmmccaapp consists of  a series of fields,
which  are separated  from each  other by  colons `:'.   Every line  in the
description, with the  exception of the last line, must  end in a backslash
`\'.   Tab  characters  are ignored.   Lines  that  begin  with  a `#'  are
comments.  A tteerrmmccaapp description must not exceed 1,024 characters.

The first  field names the terminal.  Several different  names may be used,
each separated  by a vertical  bar `|'; each  name given, however,  must be
unique within the file  /eettcc/tteerrmmccaapp.  By convention, the first listed must
be two characters long.  The second  name is the name by which the terminal
is  most commonly  known; this  name may  contain no  blanks in  it.  Other
versions of  the name may follow.   By convention, the last  version is the
full name of the terminal; here, spaces may be used for legibility.  Any of
these  may be  used to  name  your terminal  to the  COHERENT system.   For
example, the name field for the VT-100 terminal is as follows:

    d1|vt100|vt-100|pt100|pt-100|dec vt100:\

Note that the names are separated by vertical bars `|', that the field ends
with a colon, and that the  line ends with a backslash.  Using any of these
names  in an  eexxppoorrtt command  will  make  the correct  terminal description
available to programs that need to use it.

The  remaining  fields  in  the  entry  describe the  _c_a_p_a_b_i_l_i_t_i_e_s  of  the
terminal.  Each  capability field  consists of  a two-letter code,  and may
include additional information.  There are three types of capability:

_B_o_o_l_e_a_n
     This indicates  whether or not a terminal has  a specific feature.  If
     the field is present, the terminal  is assumed to have the feature; if
     it is absend,  the terminal is assumed not to  have that feature.  For
     example, the field

         aamm:

     is present,  tteerrmmccaapp assumes that the  terminal has automatic margins,
     whereas  if  that field  is  not present,  the  program using  tteerrmmccaapp
     assumes that the terminal does not have them.

_N_u_m_e_r_i_c
     This  gives  the  size  of  some  aspect  of  the  terminal.   Numeric
     capability fields  have the capability  code, followed by a  `#' and a
     number.  For example, the entry

         ccoo#8800:

     means that the terminal screen is 80 columns wide.

_S_t_r_i_n_g _c_a_p_a_b_i_l_i_t_i_e_s
     These give a sequence of characters that trigger a terminal operation.
     These fields  consist of the  capability code, an equal  sign `=', and
     the string.

     Strings often  include escape sequences.  A  ``\EE'' indicates an <EESSCC>
     character; a control character is  indicated with a carat `^' plus the
     appropriate  letter; and  the sequences  \bb, \ff, \nn,  \rr, and  \tt are,
     respectively, backspace, formfeed, newline, <rreettuurrnn>, and tab.

     An integer or an integer followed  by an asterisk in the string (e.g.,
     `_i_n_t*') indicates that execution  of the function should be delayed by
     _i_n_t  milliseconds; this  delay is termed  _p_a_d_d_i_n_g.  Thus,  deletion on
     lines on the Microterm Mime-2A is coded as:

         dl=20*^W:

     ddll is  the capability code  for _d_e_l_e_t_e, the equal  sign introduces the
     deletion  sequence, 2200*  indicates that each  line deletion  should be
     delayed by  20 milliseconds, and  ^WW indicates that  the line-deletion
     code on the Mime-2A is <ccttrrll-WW>.

     The asterisk  indicates that the  padding required is  proportional to
     the number of lines affected  by the operation.  In the above example,
     the deletion  of four  lines on  the Mime-2A generates  a total  of 80
     milliseconds  of padding;  if no asterisk  were present,  however, the
     padding would  be only 20 milliseconds, no matter  how many lines were
     deleted.  Also, when  an asterisk is used, the number  may be given to
     one decimal place, to show tenths of a millisecond of padding.

     Note  that with  string  capabilities, characters  may be  given as  a
     backslash followed by the  three octal digits of the character's ASCII
     code.  Thus, a  colon in a capability field may  be given by \007722.  To
     put a null character into the string, use \220000, because tteerrmmccaapp strips
     the high bit from each character.

     Finally, the  literal characters `^'  and `\' are given  by ``\^'' and
     ``\\''.

_C_a_p_a_b_i_l_i_t_y _C_o_d_e_s
The  following  table lists  tteerrmmccaapp's  capability  codes.  TTyyppee  indicates
whether the  code is  boolean, numeric, or  string; a dagger  `+' indicates
that this  capability may  include padding, and  a dagger plus  an asterisk
``+*'' indicates  that it  may be used  with the asterisk  padding function
described above.

_V_a_r_i_a_b_l_e  _T_y_p_e      _D_e_f_i_n_i_t_i_o_n
aaee........string+...End alternate set of characters
aall........string+*..Add blank line
aamm........boolean...Automatic margins
aass........string+...Start alternate set of characters
bbcc........string....Backspace character, if not <ccttrrll-HH>
bbss........boolean...Backspace character is <ccttrrll-HH>
bbtt........string+...Backtab
bbww........boolean...Backspace wraps from column 0 to last column
CCCC........string....Command character in prototype if it can be set at terminal
ccdd........string+*..Clear to end of display
ccee........string+...Clear line
cchh........string+...Horizontal cursor motion
ccll........string+*..Clear screen
ccmm........string+...Cursor motion, both vertical and horizontal
ccoo........number....Number of columns
ccrr........string+*..<rreettuurrnn>; default <ccttrrll-MM>
ccss........string+...Change scrolling region (DEC VT100 only); resembles ccmm
ccvv........string+...Vertical cursor motion
ddaa........boolean+..Display above may be retained
ddBB........number....Milliseconds of delay needed by bbss
ddbb........boolean...Display below may be retained
ddCC........number....Milliseconds of delay needed by ccrr
ddcc........string+*..Delete a character
ddFF........number....Milliseconds of delay needed by ffff
ddll........string+*..Delete a line
ddmm........string....Enter delete mode
ddNN........number....Milliseconds of delay needed by nnll
ddoo........string....Move down one line
ddTT........number....Milliseconds of delay needed by tab
eedd........string....Leave delete mode
eeii........string....Leave insert mode; use :eeii=: if this string is the same as iicc
eeoo........string....Erase overstrikes with a blank
ffff........string+*..Eject hardcopy terminal page; default <ccttrrll-LL>
hhcc........boolean...Hardcopy terminal
hhdd........string....Move half-line down, i.e., forward 1/2 line feed)
hhoo........string....Move cursor to home position; use if ccmm is not set
hhuu........string....Move half-line up, i.e., reverse 1/2 line feed
hhzz........string....Cannot print tilde `~' (Hazeltine terminals only)
iicc........string+...Insert a character
iiff........string....Name of the file that contains iiss
iimm........string....Begin insert mode; use :iimm=: if iicc has not been set
iinn........boolean...Nulls are distinguished in display
iipp........string+*..Insert padding after each character listed
iiss........string....Initialize terminal
kk00-kk99.....string....Codes sent by function keys 1 through 10 (kk00 = F10)
kkbb........string....Code sent by backspace key
kkdd........string....Code sent by down-arrow key
kkee........string....Leave ``keypad transmit'' mode
kkhh........string....Code sent by home key
kkll........string....Code sent by left-arrow key
kknn........number....No. of function keys; default is 10
kkoo........string....Entries for for all other non-function keys
kkrr........string....Code sent by right-arrow key
kkss........string....Begin ``keypad transmit'' mode
kkuu........string....Code sent by up-arrow key
ll00-ll99.....string....Function keys labels if not f0-f9
llii........number....Number of lines
llll........string....Move cursor to first column of last line (ccmm not set)
mmaa........string....Map keypad-to-cursor movement for vvii version 2
mmii........boolean...Cursor may be safely moved while in insert mode
mmll........string....Turn on memory lock for area of screen above cursor
mmss........boolean...Cursor can be moved while in standout or underline mode
mmuu........string....Turn off memory lock
nncc........boolean...<rreettuurrnn> does not work
nndd........string....Move cursor right non-destructively
nnll........string+*..Newline character; default is \nn (_O_b_s_o_l_e_t_e)
nnss........boolean...Terminal is CRT, but does not scroll
ooss........boolean...Terminal can overstrike
ppcc........string....Pad character any character other than null
PPSS........string....Print start: redirect input to auxiliary port
PPNN........string....Print end: stop redirecting input to auxiliary port
pptt........boolean...Terminal's tabs set by hardware; may need to be set with iiss
ssee........string....Exit standout mode
ssff........string+...Scroll forward
ssgg........number....Blank characters left by ssoo or ssee
ssoo........string....Enter standout mode
ssrr........string+...Reverse scroll
ttaa........string+...Tab character other than <ccttrrll-II>, or with padding
ttcc........string....Similar terminal -- must be last field in entry
ttee........string....End a program that uses ccmm
ttii........string....Begin a program that uses ccmm
uucc........string....Underscore character and skip it
uuee........string....Leave underscore mode
uugg........number....Blank characters left by uuss or uuee
uull........boolean...Terminal underlines but does not overstrike
uupp........string....Move up one line
uuss........string....Begin underscore mode
vvbb........string....Visible bell; may not move cursor
vvee........string....Exit open/visual mode
vvss........string....Begin open/visual mode
xxbb........boolean...Beehive terminal (f1=<eesscc>, f2=<ccrrttll-CC>)
xxnn........boolean...Newline is ignored after wrap
xxrr........boolean...<rreettuurrnn> behaves like ccee \rr \nn
xxss........boolean...Standout mode is not erased by writing over it
xxtt........boolean...Tabs are destructive

_E_x_a_m_p_l_e_s
The following  is the  tteerrmmccaapp description  for the IBM  Personal Computer,
also  known as  aannssiippcc.  This is  the  default description  used with  your
COHERENT system console:

ap|ansipc|ansi personal computer:\
     :al=\E[L:am:bs:bt=\E[Z:bw:cd=\E[O:ce=\E[K:ch=\E[%i%d`:\
     :cl=\E[2O:cm=\E[%i%d;%dH:co#80:cs=\E[%i%d;%dr:\
     :cv=\E[%i%dd:dl=\E[M:ho=\E[H:is=\E[25f\E[2K\E[m\E[H:\
     :k0=\E[0x:k1=\E[1x:k2=\E[2x:k3=\E[3x:k4=\E[4x:k5=\E[5x:\
     :k6=\E[6x:k7=\E[7x:k8=\E[8x:k9=\E[9x:kb=^h:kd=\E[B:kh=\E[H:\
     :kl=\E[D:kr=\E[C:ku=\E[A:li#24:ll=\E[24;1H:hd=\E[C:se=\E[m:\
     :sf=\E[S:sg#0:so=\E[7m:sr=\E[T:ue=\E[m:up=\E[A:us=\E[4m:\
     :KI=\E[5x:KD=\E[3x:Kd=\E[P:KB=\E[6x:KU=\E[4x:Ku=\E[@:\
     :KM=\E[7x:KJ=\E[8x:Kt=\E[Z:KT=\t:KL=\E[1x:KR=\E[2x:KP=\E[U:\
     :Kp=\E[V:KX=\E[9x:KC=\E[0x:KE=\E[24H:KW=^F:Kw=^R:Kr=^N:do=\E[B:

The first field, which occupies line  1, gives the various aliases for this
device.  The remaining fields mean the following:

:aall=\EE[LL:\  <eesscc>LL adds  new blank line; use one  millisecond for each line
            added.
:aamm:\       Terminal has automatic margins.
:bbss:\       Backspace character is <ccttrrll>-HH (the default).
:bbtt=\EE[ZZ:\  <eesscc>[ZZ back-tabs.
:bbww:\       On this  device, a backspace  character wraps from  column 0 to
            the last column (in this case, column 79) on the previous line.
:ccdd=\EE[OO:\  <eesscc>[OO clears to the end of display.
:ccee=\EE[KK:\  <eesscc>[KK clears to end of line.
:cchh=\EE[%ii%dd`:\
            The string for horizontal cursor motion (described later).
:ccll=\EE[22OO:\ <eesscc>[22OO clears screen.
:ccmm=\EE[%ii%dd;%ddHH:\
            Cursor motion (described later).
:ccoo#8800:\    Screen has 80 columns.
:ccss=\EE[%ii%dd;%ddrr:\
            String for changing the scrolling region.
:ccvv=\EE[%ii%dddd:\
            String for vertical cursor motion.
:ddll=\EE[MM:\  <eesscc>EE[MM deletes a line.
:hhoo=\EE[HH:\  <eesscc>[HH moves cursor to home position.
:iiss=\EE[2255ff\EE[22KK\EE[mm\EE[HH:\
            The string with which the device is initialized.
:kk00=\EE[00xx:\ Function key 10 sends sequence <eesscc>[00xx.
:kk11=\EE[11xx:\ Function key 1 sends sequence <eesscc>[11xx.
:kk22=\EE[22xx:\ Function key 2 sends sequence <eesscc>[22xx.
:kk33=\EE[33xx:\ Function key 3 sends sequence <eesscc>[33xx.
:kk44=\EE[44xx:\ Function key 4 sends sequence <eesscc>[44xx.
:kk55=\EE[55xx:\ Function key 5 sends sequence <eesscc>[55xx.
:kk66=\EE[66xx:\ Function key 6 sends sequence <eesscc>[66xx.
:kk77=\EE[77xx:\ Function key 7 sends sequence <eesscc>[77xx.
:kk88=\EE[88xx:\ Function key 8 sends sequence <eesscc>[88xx.
:kk99=\EE[99xx:\ Function key 9 sends sequence <eesscc>[99xx.
:kkbb=^hh:\    Backspace key sends <CCttrrll>-HH.
:kkdd=\EE[BB:\  Down-arrow key sends <eesscc>[BB.
:kkhh=\EE[HH:\  Home key sends <eesscc>[HH.
:kkll=\EE[DD:\  Left-arrow key sends <eesscc>[DD.
:kkrr=\EE[CC:\  Right-arrow key sends <eesscc>[CC.
:kkuu=\EE[AA:\  Up-arrow key sends <eesscc>[AA.
:llii#2244:\    Terminal has 24 lines.
:llll=\EE[2244;11HH:\
            <eesscc>[2244;11HH moves  the cursor to  the first column  of the last
            line.
:hhdd=\EE[CC:\  <eesscc>[CC moves the cursor downward by one-half line.
:ssee=\EE[mm:\  <eesscc>[mm exits standout mode.
:ssff=\EE[SS:\  <eesscc>[SS scrolls the screen forward.
:ssgg#00:\     The  ssoo  and ssee  instructions  leave zero  blank  lines on  the
            screen.
:ssoo=\EE[77mm:\ <eesscc>[77mm begins standout mode.
:ssrr=\EE[TT:\  <eesscc>[TT reverse-scrolls the screen.
:uuee=\EE[mm:\  <eesscc>mm ends underline mode.
:uupp=\EE[AA:\  <eesscc>[AA moves the cursor up one line.
:uuss=\EE[44mm:\ <eesscc>44mm begins underscore mode.
:ddoo=\EE[BB:   <eesscc>EE[BB moves cursor down one line.

Note that  the last field did  _n_o_t end with a  backslash; this indicated to
the COHERENT system that the tteerrmmccaapp description was finished.

A terminal description does not have to be nearly so detailed.  If you wish
to use a new terminal, first check the following table to see if it already
appears by tteerrmmccaapp.  If it  does not, check the terminal's documentation to
see if it  mimics a terminal that is already  in /eettcc/tteerrmmccaapp, and use that
description, modifying  it if necessary and changing the  name to suit your
terminal.  If you must create  an entirely new description, first prepare a
skeleton file that contains  the following basic elements: number of lines,
number  of columns,  backspace, cursor motion,  line delete,  clear screen,
move cursor  to home  position, newline,  move cursor up  a line,  and non-
destructive  right  space.   For  example,  the  following is  the  tteerrmmccaapp
description for the Lear-Siegler ADM-3A terminal:

la|adm3a|3a|lsi adm3a:\
     :am:bs:cd=^W:ce=^X:cm=\E=%+ %+ :cl=^Z:co#80:ho=^^:li#24:\
     :nd=<ctrl-L>:up=^K:

Once you have installed  and debugged the skeleton description, add details
gradually until every feature of the terminal is described.

_C_u_r_s_o_r _M_o_t_i_o_n
The cursor motion  characteristic contains pprriinnttff-like escape sequences not
used elsewhere.  These encode the  line and column positions of the cursor,
whereas  other  characters  are passed  unchanged.   If  the  ccmm string  is
considered as a function, then its arguments are the line and the column to
which the cursor is to move; the % codes have the following meanings:

%dd   Decimal number, as in pprriinnttff. The origin is 0.

%22   Two-digit decimal number.  The same as %22dd in pprriinnttff().

%33   Three-digit decimal number.  The same as %33dd in pprriinnttff().

%.   Single byte.  The same as %cc in pprriinnttff().

%+_n  Add _n  to the current position  value.  _n may be either  a number or a
     character.

%>_n_m If the  current position value is  greater than _n+_m; then  there is no
     output.

%rr   Reverse order  of line and column, giving column  first and then line.
     No output.

%ii   Increment line and column.

%%   Give a % sign in the string.

%nn   Exclusive or line and column with 0140 (Datamedia 2500 terminal only).

%BB   Binary coded decimal (16 * (_n/10))+(_n%10).  No output.

%DD   Reverse coding (_n-(22*(_n%1166)).  No output (Delta Data terminal only).

To send  the cursor to line  3, column 12 on  the Hewlett-Packard 2645, the
terminal must  be sent <eesscc>&aa1122cc0033YY padded for  6 milliseconds.  Note that
the column is  given first and then the line,  and that the line and column
are given  as two digits  each.  Thus, the  ccmm capability for  the Hewlett-
Packard 2645 is given by:

    :cm=6\E&%r%2c%2Y:

The Microterm  ACT-IV needs the current position sent  preceded by a <CCttrrll-
TT>, with the line and column encoded in binary:

    :cm=^T%.%.:

Terminals that use  %. must be able to backspace  the cursor (bbss or bbcc) and
to  move the  cursor  up one  line  on the  screen (uupp).   This is  because
transmitting \tt,  \nn, \rr, or <ccttrrll-DD> may  have undesirable consequences or
be ignored by the system.

_S_i_m_i_l_a_r _T_e_r_m_i_n_a_l_s
If your system uses two similar terminals, one can be defined as resembling
the  other,  with  certain  exceptions.   The  code ttcc  names  the  similar
terminal.  This field  must be _l_a_s_t in the tteerrmmccaapp  entry, and the combined
length  of the  two entries cannot  exceed 1,024  characters.  Capabilities
given first  over-ride those in  the similar terminal,  and capabilities in
the similar  terminal can be cancelled  by xxxx@ where _x_x  is the capability.
For example, the entry

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

defines a  Hewlett-Packard 2621 terminal that  does not have the  kkss and kkee
capabilities,  and thus  cannot turn  on the function  keys when  in visual
mode.

_I_n_i_t_i_a_l_i_z_a_t_i_o_n
A terminal  initialization string may  be given with the  iiss capability; if
the string  is too long, it may  be read from a file given  by the iiff code.
Usually, these strings  set the tabs on a terminal  with settable tabs.  If
both iiss and iiff are given,  iiss will be printed first to clear the tabs, then
the tabs  will be set  from the file  specified by iiff.  The Hewlett-Packard
2626 has:

    :is=\E&j@\r\E3\r:if=/usr/lib/tabset/stdcrt:

_P_r_o_g_r_a_m_m_i_n_g _W_i_t_h _t_e_r_m_c_a_p
The COHERENT library lliibbtteerrmm.aa contains the following routines that extract
and use the descriptions for tteerrmmccaapp:

ttggeetteenntt() Read a tteerrmmccaapp entry.

ttggeettffllaagg()
          Check if a given  Boolean capability is present in the terminal's
          tteerrmmccaapp entry.

ttggeettnnuumm() Return the  value of a numeric tteerrmmccaapp  feature (e.g., the number
          of columns on the terminal).

ttggeettssttrr() Read and decode a tteerrmmccaapp string feature.

ttggoottoo()   Read and decode a cursor-addressing string.

ttppuuttss()   Read  and decode  the leading  padding  information of  a tteerrmmccaapp
          string feature.

See the Lexicon entry for each function for details.

The external variable oossppeeeedd is the output speed to the terminal as encoded
by ssttttyy. The  external variable PPCC is a padding  character if a NUL (<ccrrttll-
@>) is not appropriate.

The following example shows how to read a tteerrmmccaapp entry:

#include <stdio.h>

static char *CM, *SO, *SE, *CL;
static int rows, cols;
static int am;
static int errflag;
static char *ptr;
static char *tv_stype;

extern char *tgoto();         /* termcap cursor position command */
extern char *tgetstr();       /* get string code from termcap */
extern int tgetflag();        /* get boolean flag from termcap */
extern int tgetnum();         /* get numeric code from termcap */
extern void tputs();          /* termcap put data command */
extern char PC;               /* termcap's pad character */

/*
 * Get a required termcap string or exit with a message.
 */
static char *
qgetstr(ref)
char *ref;
{
                              register char *tmp;

                              if ((tmp = tgetstr(ref, &ptr)) == NULL) {
                              printf("/etc/termcap terminal %s must have a %s= entry\n",
                               tv_stype, ref);
                              errflag = 1;
                              }
                              return (tmp);
}

/*
 * Get required termcap information for this terminal type.
 */
static void
tcapopen()
{
                              extern char *getenv(), *realloc();
                              char *tcapbuf;
                              char tcbuf[1024]; /* this must hold the whole tml entry */
                              char *p;

                              /* set up termcap type */
                              if ((tv_stype = getenv("TERM")) == NULL) {
                              printf("Environment variable TERM not defined\n");
                              exit(1);
                              }

                              if (tgetent(tcbuf, tv_stype) != 1) {
                              printf("Terminal type %s not in /etc/termcap\n", tv_stype);
                              exit(1);
                              }

                              /* get far too much and shrink later */
                              if ((ptr = tcapbuf = malloc(1024)) == NULL) {
                              printf("out of space\n");
                              exit(1);
                              }

                              /* get termcap entries for later use */
                              CM = qgetstr("cm"); /* this string used by tgoto() */
                              CL = qgetstr("cl"); /* this string used to clear screen */
                              SO = qgetstr("so"); /* this string used to set standout */
                              SE = qgetstr("se"); /* this string used by clear standout */
                              if (errflag)/* set if any missing entries */
                              exit(1);

                              /* set termcap's pad char */
                              PC = (((p = tgetstr("pc", &ptr)) == NULL) ? 0 : *p);

                              if (tcapbuf != realloc(tcapbuf, (unsigned)(ptr - tcapbuf))) {
                              printf("Buffer not shrunk in place!\n");
                              exit(1);
                              }

                              if ((cols = tgetnum("co")) < 0)/* Get rows and columns */
                              cols = 80;
                              if ((rows = tgetnum("li")) < 0)
                              rows = 24;

                              am = tgetflag("am");/* automatic margins ? */
}

/*
 * output char function.
 */
static void
ttputc(c)
{
                              fputc(c, stdout);
}

/*
 * output command string, set padding to one line affected.
 * use ttputc as character output function. Use only for
 * termcap created data not your own strings.
 */
void
putpad(str)
char *str;
{
                              tputs(str, 1, ttputc);
}

/*
 * Move cursor.
 */
void
move(col, row)
{
                              putpad(tgoto(CM, col, row));
}

/*
 * Demonstrate termcap.
 */
main()
{
                              tcapopen();

                              putpad(CL);  /* clear the screen */

                              move(30, 5);
                              putpad(SO);  /* standout mode */
                              printf("Termcap Demo");
                              putpad(SE);  /* end standout mode */

                              move(0, 7);
                              printf("This terminal has %d columns and %d rows.", cols, rows);

                              if (am) {
                              move(0, 8);
                              printf("Automatic margins.");
                              }

                              move(0, rows);/* quit at bottom of screen */
                              exit(0);
}

_F_i_l_e_s
/eettcc/tteerrmmccaapp -- Terminal-description data base
/uussrr/lliibb/lliibbtteerrmm.aa -- Routines for reading a tteerrmmccaapp description

_S_e_e _A_l_s_o
AAddmmiinniisstteerriinngg  CCOOHHEERREENNTT, ccaappttooiinnffoo,  ccuurrsseess,  lliibbtteerrmm, tteerrmmiinnaall,  tteerrmmiinnffoo,
ttggeetteenntt(), ttggeettffllaagg(), ttggeettnnuumm(), ttggeettssttrr(), ttggoottoo(), ttppuuttss()
Strang,  J., Mui,  L., O'Reilly,  T.: _T_e_r_m_c_a_p  & _T_e_r_m_i_n_f_o.  Sebastopol, CA:
O'Reilly & Associates, Inc., 1991.  _H_i_g_h_l_y _r_e_c_o_m_m_e_n_d_e_d.

_N_o_t_e_s
To see which terminals are currently supported, see file /eettcc/tteerrmmccaapp.

COHERENT also  supports tteerrmmiinnffoo,  a clone  of the UNIX  System-V terminal-
description  system.  tteerrmmiinnffoo  enjoys a number  of features  not available
under tteerrmmccaapp, and is the preferred system under COHERENT.

Should you  wish to convert  to tteerrmmiinnffoo, the command  ccaappttooiinnffoo converts a
file of tteerrmmccaapp descriptions to their tteerrmmiinnffoo analogues.
