Annotation of GNUtools/emacs/info/termcap-1, revision 1.1.1.1

1.1       root        1: This is Info file ../info/termcap, produced by Makeinfo-1.49 from the
                      2: input file termcap.texi.
                      3: 
                      4:    This file documents the termcap library of the GNU system.
                      5: 
                      6:    Copyright (C) 1988 Free Software Foundation, Inc.
                      7: 
                      8:    Permission is granted to make and distribute verbatim copies of this
                      9: manual provided the copyright notice and this permission notice are
                     10: preserved on all copies.
                     11: 
                     12:    Permission is granted to copy and distribute modified versions of
                     13: this manual under the conditions for verbatim copying, provided that
                     14: the entire resulting derived work is distributed under the terms of a
                     15: permission notice identical to this one.
                     16: 
                     17:    Permission is granted to copy and distribute translations of this
                     18: manual into another language, under the above conditions for modified
                     19: versions, except that this permission notice may be stated in a
                     20: translation approved by the Foundation.
                     21: 
                     22: 
                     23: File: termcap,  Node: Top,  Next: Introduction,  Prev: (DIR),  Up: (DIR)
                     24: 
                     25: * Menu:
                     26: 
                     27: * Introduction::What is termcap?  Why this manual?
                     28: * Library::     The termcap library functions.
                     29: * Data Base::   What terminal descriptions in `/etc/termcap' look like.
                     30: * Capabilities::Definitions of the individual terminal capabilities:
                     31:                  how to write them in descriptions, and how to use
                     32:                  their values to do display updating.
                     33: * Summary::    Brief table of capability names and their meanings.
                     34: * Var Index::   Index of C functions and variables.
                     35: * Cap Index::   Index of termcap capabilities.
                     36: * Index::       Concept index.
                     37: 
                     38: 
                     39: File: termcap,  Node: Introduction,  Next: Library,  Prev: Top,  Up: Top
                     40: 
                     41: Introduction
                     42: ************
                     43: 
                     44:    "Termcap" is a library and data base that enables programs to use
                     45: display terminals in a terminal-independent manner.  It originated in
                     46: Berkeley Unix.
                     47: 
                     48:    The termcap data base describes the capabilities of hundreds of
                     49: different display terminals in great detail.  Some examples of the
                     50: information recorded for a terminal could include how many columns wide
                     51: it is, what string to send to move the cursor to an arbitrary position
                     52: (including how to encode the row and column numbers), how to scroll the
                     53: screen up one or several lines, and how much padding is needed for such
                     54: a scrolling operation.
                     55: 
                     56:    The termcap library is provided for easy access this data base in
                     57: programs that want to do terminal-independent character-based display
                     58: output.
                     59: 
                     60:    This manual describes the GNU version of the termcap library, which
                     61: has some extensions over the Unix version.  All the extensions are
                     62: identified as such, so this manual also tells you how to use the Unix
                     63: termcap.
                     64: 
                     65:    The GNU version of the termcap library is available free as source
                     66: code, for use in free programs, and runs on Unix and VMS systems (at
                     67: least).  You can find it in the GNU Emacs distribution in the files
                     68: `termcap.c' and `tparam.c'.
                     69: 
                     70:    This manual was written for the GNU project, whose goal is to
                     71: develop a complete free operating system upward-compatible with Unix
                     72: for user programs.  The project is approximately two thirds complete. 
                     73: For more information on the GNU project, including the GNU Emacs editor
                     74: and the mostly-portable optimizing C compiler, send one dollar to
                     75: 
                     76:      Free Software Foundation
                     77:      675 Mass Ave
                     78:      Cambridge, MA 02139
                     79: 
                     80: 
                     81: File: termcap,  Node: Library,  Next: Data Base,  Prev: Introduction,  Up: Top
                     82: 
                     83: The Termcap Library
                     84: *******************
                     85: 
                     86:    The termcap library is the application programmer's interface to the
                     87: termcap data base.  It contains functions for the following purposes:
                     88: 
                     89:    * Finding the description of the user's terminal type (`tgetent').
                     90: 
                     91:    * Interrogating the description for information on various topics
                     92:      (`tgetnum', `tgetflag', `tgetstr').
                     93: 
                     94:    * Computing and performing padding (`tputs').
                     95: 
                     96:    * Encoding numeric parameters such as cursor positions into the
                     97:      terminal-specific form required for display commands (`tparam',
                     98:      `tgoto').
                     99: 
                    100: * Menu:
                    101: 
                    102: * Preparation:: Preparing to use the termcap library.
                    103: * Find::        Finding the description of the terminal being used.
                    104: * Interrogate:: Interrogating the description for particular capabilities.
                    105: * Initialize::  Initialization for output using termcap.
                    106: * Padding::     Outputting padding.
                    107: * Parameters::  Encoding parameters such as cursor positions.
                    108: 
                    109: 
                    110: File: termcap,  Node: Preparation,  Next: Find,  Prev: Library,  Up: Library
                    111: 
                    112: Preparing to Use the Termcap Library
                    113: ====================================
                    114: 
                    115:    To use the termcap library in a program, you need two kinds of
                    116: preparation:
                    117: 
                    118:    * The compiler needs declarations of the functions and variables in
                    119:      the library.
                    120: 
                    121:      On GNU systems, it suffices to include the header file `termcap.h'
                    122:      in each source file that uses these functions and variables.
                    123: 
                    124:      On Unix systems, there is often no such header file.  Then you must
                    125:      explictly declare the variables as external.  You can do likewise
                    126:      for the functions, or let them be implicitly declared and cast
                    127:      their values from type `int' to the appropriate type.
                    128: 
                    129:      We illustrate the declarations of the individual termcap library
                    130:      functions with ANSI C prototypes because they show how to pass the
                    131:      arguments.  If you are not using the GNU C compiler, you probably
                    132:      cannot use function prototypes, so omit the argument types and
                    133:      names from your declarations.
                    134: 
                    135:    * The linker needs to search the library.  Usually either
                    136:      `-ltermcap' or `-ltermlib' as an argument when linking will do
                    137:      this.
                    138: 
                    139: 
                    140: File: termcap,  Node: Find,  Next: Interrogate,  Prev: Preparation,  Up: Library
                    141: 
                    142: Finding a Terminal Description: `tgetent'
                    143: =========================================
                    144: 
                    145:    An application program that is going to use termcap must first look
                    146: up the description of the terminal type in use.  This is done by calling
                    147: `tgetent', whose declaration in ANSI Standard C looks like:
                    148: 
                    149:      int tgetent (char *BUFFER, char *TERMTYPE);
                    150: 
                    151: This function finds the description and remembers it internally so that
                    152: you can interrogate it about specific terminal capabilities (*note
                    153: Interrogate::.).
                    154: 
                    155:    The argument TERMTYPE is a string which is the name for the type of
                    156: terminal to look up.  Usually you would obtain this from the environment
                    157: variable `TERM' using `getenv ("TERM")'.
                    158: 
                    159:    If you are using the GNU version of termcap, you can alternatively
                    160: ask `tgetent' to allocate enough space.  Pass a null pointer for
                    161: BUFFER, and `tgetent' itself allocates the storage using `malloc'.  In
                    162: this case the returned value on success is the address of the storage,
                    163: cast to `int'.  But normally there is no need for you to look at the
                    164: address.  Do not free the storage yourself.
                    165: 
                    166:    With the Unix version of termcap, you must allocate space for the
                    167: description yourself and pass the address of the space as the argument
                    168: BUFFER.  There is no way you can tell how much space is needed, so the
                    169: convention is to allocate a buffer 2048 characters long and assume that
                    170: is enough.  (Formerly the convention was to allocate 1024 characters and
                    171: assume that was enough.  But one day, for one kind of terminal, that was
                    172: not enough.)
                    173: 
                    174:    No matter how the space to store the description has been obtained,
                    175: termcap records its address internally for use when you later
                    176: interrogate the description with `tgetnum', `tgetstr' or `tgetflag'.  If
                    177: the buffer was allocated by termcap, it will be freed by termcap too if
                    178: you call `tgetent' again.  If the buffer was provided by you, you must
                    179: make sure that its contents remain unchanged for as long as you still
                    180: plan to interrogate the description.
                    181: 
                    182:    The return value of `tgetent' is -1 if there is some difficulty
                    183: accessing the data base of terminal types, 0 if the data base is
                    184: accessible but the specified type is not defined in it, and some other
                    185: value otherwise.
                    186: 
                    187:    Here is how you might use the function `tgetent':
                    188: 
                    189:      #ifdef unix
                    190:      static char term_buffer[2048];
                    191:      #else
                    192:      #define term_buffer 0
                    193:      #endif
                    194:      
                    195:      init_terminal_data ()
                    196:      {
                    197:        char *termtype = getenv ("TERM");
                    198:        int success;
                    199:      
                    200:        if (termtype == 0)
                    201:          fatal ("Specify a terminal type with `setenv TERM <yourtype>'.\n");
                    202:      
                    203:        success = tgetent (term_buffer, termtype);
                    204:        if (success < 0)
                    205:          fatal ("Could not access the termcap data base.\n");
                    206:        if (success == 0)
                    207:          fatal ("Terminal type `%s' is not defined.\n", termtype);
                    208:      }
                    209: 
                    210: Here we assume the function `fatal' prints an error message and exits.
                    211: 
                    212:    If the environment variable `TERMCAP' is defined, its value is used
                    213: to override the terminal type data base.  The function `tgetent' checks
                    214: the value of `TERMCAP' automatically.  If the value starts with `/'
                    215: then it is taken as a file name to use as the data base file, instead
                    216: of `/etc/termcap' which is the standard data base.  If the value does
                    217: not start with `/' then it is itself used as the terminal description,
                    218: provided that the terminal type TERMTYPE is among the types it claims
                    219: to apply to.  *Note Data Base::, for information on the format of a
                    220: terminal description.
                    221: 
                    222: 
                    223: File: termcap,  Node: Interrogate,  Next: Initialize,  Prev: Find,  Up: Library
                    224: 
                    225: Interrogating the Terminal Description
                    226: ======================================
                    227: 
                    228:    Each piece of information recorded in a terminal description is
                    229: called a "capability".  Each defined terminal capability has a
                    230: two-letter code name and a specific meaning.  For example, the number
                    231: of columns is named `co'.  *Note Capabilities::, for definitions of all
                    232: the standard capability names.
                    233: 
                    234:    Once you have found the proper terminal description with `tgetent'
                    235: (*note Find::.), your application program must "interrogate" it for
                    236: various terminal capabilities.  You must specify the two-letter code of
                    237: the capability whose value you seek.
                    238: 
                    239:    Capability values can be numeric, boolean (capability is either
                    240: present or absent) or strings.  Any particular capability always has
                    241: the same value type; for example, `co' always has a numeric value,
                    242: while `am' (automatic wrap at margin) is always a flag, and `cm'
                    243: (cursor motion command) always has a string value.  The documentation
                    244: of each capability says which type of value it has.
                    245: 
                    246:    There are three functions to use to get the value of a capability,
                    247: depending on the type of value the capability has.  Here are their
                    248: declarations in ANSI C:
                    249: 
                    250:      int tgetnum (char *NAME);
                    251:      int tgetflag (char *NAME);
                    252:      char *tgetstr (char *NAME, char **AREA);
                    253: 
                    254: `tgetnum'
                    255:      Use `tgetnum' to get a capability value that is numeric.  The
                    256:      argument NAME is the two-letter code name of the capability.  If
                    257:      the capability is present, `tgetnum' returns the numeric value
                    258:      (which is nonnegative).  If the capability is not mentioned in the
                    259:      terminal description, `tgetnum' returns -1.
                    260: 
                    261: `tgetflag'
                    262:      Use `tgetflag' to get a boolean value.  If the capability NAME is
                    263:      present in the terminal description, `tgetflag' returns 1;
                    264:      otherwise, it returns 0.
                    265: 
                    266: `tgetstr'
                    267:      Use `tgetstr' to get a string value.  It returns a pointer to a
                    268:      string which is the capability value, or a null pointer if the
                    269:      capability is not present in the terminal description.
                    270: 
                    271:      There are two ways `tgetstr' can find space to store the string
                    272:      value:
                    273: 
                    274:         * You can ask `tgetstr' to allocate the space.  Pass a null
                    275:           pointer for the argument AREA, and `tgetstr' will use
                    276:           `malloc' to allocate storage big enough for the value.
                    277:           Termcap will never free this storage or refer to it again; you
                    278:           should free it when you are finished with it.
                    279: 
                    280:           This method is more robust, since there is no need to guess
                    281:           how much space is needed.  But it is supported only by the GNU
                    282:           termcap library.
                    283: 
                    284:         * You can provide the space.  Provide for the argument AREA the
                    285:           address of a pointer variable of type `char *'.  Before
                    286:           calling `tgetstr', initialize the variable to point at
                    287:           available space. Then `tgetstr' will store the string value
                    288:           in that space and will increment the pointer variable to
                    289:           point after the space that has been used.  You can use the
                    290:           same pointer variable for many calls to `tgetstr'.
                    291: 
                    292:           There is no way to determine how much space is needed for a
                    293:           single string, and no way for you to prevent or handle
                    294:           overflow of the area you have provided.  However, you can be
                    295:           sure that the total size of all the string values you will
                    296:           obtain from the terminal description is no greater than the
                    297:           size of the description (unless you get the same capability
                    298:           twice).  You can determine that size with `strlen' on the
                    299:           buffer you provided to `tgetent'.  See below for an example.
                    300: 
                    301:           Providing the space yourself is the only method supported by
                    302:           the Unix version of termcap.
                    303: 
                    304:    Note that you do not have to specify a terminal type or terminal
                    305: description for the interrogation functions.  They automatically use the
                    306: description found by the most recent call to `tgetent'.
                    307: 
                    308:    Here is an example of interrogating a terminal description for
                    309: various capabilities, with conditionals to select between the Unix and
                    310: GNU methods of providing buffer space.
                    311: 
                    312:      char *tgetstr ();
                    313:      
                    314:      char *cl_string, *cm_string;
                    315:      int height;
                    316:      int width;
                    317:      int auto_wrap;
                    318:      
                    319:      char PC;   /* For tputs.  */
                    320:      char *BC;  /* For tgoto.  */
                    321:      char *UP;
                    322:      
                    323:      interrogate_terminal ()
                    324:      {
                    325:      #ifdef UNIX
                    326:        /* Here we assume that an explicit term_buffer
                    327:           was provided to tgetent.  */
                    328:        char *buffer
                    329:          = (char *) malloc (strlen (term_buffer));
                    330:      #define BUFFADDR &buffer
                    331:      #else
                    332:      #define BUFFADDR 0
                    333:      #endif
                    334:      
                    335:        char *temp;
                    336:      
                    337:        /* Extract information we will use.  */
                    338:        cl_string = tgetstr ("cl", BUFFADDR);
                    339:        cm_string = tgetstr ("cm", BUFFADDR);
                    340:        auto_wrap = tgetflag ("am");
                    341:        height = tgetnum ("li");
                    342:        width = tgetnum ("co");
                    343:      
                    344:        /* Extract information that termcap functions use.  */
                    345:        temp = tgetstr ("pc", BUFFADDR);
                    346:        PC = temp ? *temp : 0;
                    347:        BC = tgetstr ("le", BUFFADDR);
                    348:        UP = tgetstr ("up", BUFFADDR);
                    349:      }
                    350: 
                    351: *Note Padding::, for information on the variable `PC'.  *Note Using
                    352: Parameters::, for information on `UP' and `BC'.
                    353: 
                    354: 
                    355: File: termcap,  Node: Initialize,  Next: Padding,  Prev: Interrogate,  Up: Library
                    356: 
                    357: Initialization for Use of Termcap
                    358: =================================
                    359: 
                    360:    Before starting to output commands to a terminal using termcap, an
                    361: application program should do two things:
                    362: 
                    363:    * Initialize various global variables which termcap library output
                    364:      functions refer to.  These include `PC' and `ospeed' for padding
                    365:      (*note Output Padding::.) and `UP' and `BC' for cursor motion
                    366:      (*note tgoto::.).
                    367: 
                    368:    * Tell the kernel to turn off alteration and padding of
                    369:      horizontal-tab characters sent to the terminal.
                    370: 
                    371:    To turn off output processing in Berkeley Unix you would use `ioctl'
                    372: with code `TIOCLSET' to set the bit named `LLITOUT', and clear the bits
                    373: `ANYDELAY' using `TIOCSETN'.  In POSIX or System V, you must clear the
                    374: bit named `OPOST'.  Refer to the system documentation for details.
                    375: 
                    376:    If you do not set the terminal flags properly, some older terminals
                    377: will not work.  This is because their commands may contain the
                    378: characters that normally signify newline, carriage return and
                    379: horizontal tab--characters which the kernel thinks it ought to modify
                    380: before output.
                    381: 
                    382:    When you change the kernel's terminal flags, you must arrange to
                    383: restore them to their normal state when your program exits.  This
                    384: implies that the program must catch fatal signals such as `SIGQUIT' and
                    385: `SIGINT' and restore the old terminal flags before actually terminating.
                    386: 
                    387:    Modern terminals' commands do not use these special characters, so
                    388: if you do not care about problems with old terminals, you can leave the
                    389: kernel's terminal flags unaltered.
                    390: 
                    391: 
                    392: File: termcap,  Node: Padding,  Next: Parameters,  Prev: Initialize,  Up: Library
                    393: 
                    394: Padding
                    395: =======
                    396: 
                    397:    "Padding" means outputting null characters following a terminal
                    398: display command that takes a long time to execute.  The terminal
                    399: description says which commands require padding and how much; the
                    400: function `tputs', described below, outputs a terminal command while
                    401: extracting from it the padding information, and then outputs the
                    402: padding that is necessary.
                    403: 
                    404: * Menu:
                    405: 
                    406: * Why Pad::          Explanation of padding.
                    407: * Describe Padding:: The data base says how much padding a terminal needs.
                    408: * Output Padding::   Using `tputs' to output the needed padding.
                    409: 
                    410: 
                    411: File: termcap,  Node: Why Pad,  Next: Describe Padding,  Prev: Padding,  Up: Padding
                    412: 
                    413: Why Pad, and How
                    414: ----------------
                    415: 
                    416:    Most types of terminal have commands that take longer to execute
                    417: than they do to send over a high-speed line.  For example, clearing the
                    418: screen may take 20msec once the entire command is received.  During
                    419: that time, on a 9600 bps line, the terminal could receive about 20
                    420: additional output characters while still busy clearing the screen. 
                    421: Every terminal has a certain amount of buffering capacity to remember
                    422: output characters that cannot be processed yet, but too many slow
                    423: commands in a row can cause the buffer to fill up.  Then any additional
                    424: output that cannot be processed immediately will be lost.
                    425: 
                    426:    To avoid this problem, we normally follow each display command with
                    427: enough useless charaters (usually null characters) to fill up the time
                    428: that the display command needs to execute.  This does the job if the
                    429: terminal throws away null characters without using up space in the
                    430: buffer (which most terminals do).  If enough padding is used, no output
                    431: can ever be lost.  The right amount of padding avoids loss of output
                    432: without slowing down operation, since the time used to transmit padding
                    433: is time that nothing else could be done.
                    434: 
                    435:    The number of padding characters needed for an operation depends on
                    436: the line speed.  In fact, it is proportional to the line speed.  A 9600
                    437: baud line transmits about one character per msec, so the clear screen
                    438: command in the example above would need about 20 characters of padding.
                    439:  At 1200 baud, however, only about 3 characters of padding are needed
                    440: to fill up 20msec.
                    441: 
                    442: 
                    443: File: termcap,  Node: Describe Padding,  Next: Output Padding,  Prev: Why Pad,  Up: Padding
                    444: 
                    445: Specifying Padding in a Terminal Description
                    446: --------------------------------------------
                    447: 
                    448:    In the terminal description, the amount of padding required by each
                    449: display command is recorded as a sequence of digits at the front of the
                    450: command. These digits specify the padding time in msec.  They can be
                    451: followed optionally by a decimal point and one more digit, which is a
                    452: number of tenths of msec.
                    453: 
                    454:    Sometimes the padding needed by a command depends on the cursor
                    455: position. For example, the time taken by an "insert line" command is
                    456: usually proportional to the number of lines that need to be moved down
                    457: or cleared. An asterisk (`*') following the padding time says that the
                    458: time should be multiplied by the number of screen lines affected by the
                    459: command.
                    460: 
                    461:      :al=1.3*\E[L:
                    462: 
                    463: is used to describe the "insert line" command for a certain terminal.
                    464: The padding required is 1.3 msec per line affected.  The command itself
                    465: is `ESC [ L'.
                    466: 
                    467:    The padding time specified in this way tells `tputs' how many pad
                    468: characters to output.  *Note Output Padding::.
                    469: 
                    470:    Two special capability values affect padding for all commands. 
                    471: These are the `pc' and `pb'.  The variable `pc' specifies the character
                    472: to pad with, and `pb' the speed below which no padding is needed.  The
                    473: defaults for these variables, a null character and 0, are correct for
                    474: most terminals.  *Note Pad Specs::.
                    475: 
                    476: 
                    477: File: termcap,  Node: Output Padding,  Prev: Describe Padding,  Up: Padding
                    478: 
                    479: Performing Padding with `tputs'
                    480: -------------------------------
                    481: 
                    482:    Use the termcap function `tputs' to output a string containing an
                    483: optional padding spec of the form described above (*note Describe
                    484: Padding::.).  The function `tputs' strips off and decodes the padding
                    485: spec, outputs the rest of the string, and then outputs the appropriate
                    486: padding.  Here is its declaration in ANSI C:
                    487: 
                    488:      char PC;
                    489:      short ospeed;
                    490:      
                    491:      int tputs (char *STRING, int NLINES, int (*OUTFUN) ());
                    492: 
                    493:    Here STRING is the string (including padding spec) to be output;
                    494: NLINES is the number of lines affected by the operation, which is used
                    495: to multiply the amount of padding if the padding spec ends with a `*'. 
                    496: Finally, OUTFUN is a function (such as `fputchar') that is called to
                    497: output each character.  When actually called, OUTFUN should expect one
                    498: argument, a character.
                    499: 
                    500:    The operation of `tputs' is controlled by two global variables,
                    501: `ospeed' and `PC'.  The value of `ospeed' is supposed to be the
                    502: terminal output speed, encoded as in the `ioctl' system call which gets
                    503: the speed information.  This is needed to compute the number of padding
                    504: characters.  The value of `PC' is the character used for padding.
                    505: 
                    506:    You are responsible for storing suitable values into these variables
                    507: before using `tputs'.  The value stored into the `PC' variable should be
                    508: taken from the `pc' capability in the terminal description (*note Pad
                    509: Specs::.).  Store zero in `PC' if there is no `pc' capability.
                    510: 
                    511:    The argument NLINES requires some thought.  Normally, it should be
                    512: the number of lines whose contents will be cleared or moved by the
                    513: command. For cursor motion commands, or commands that do editing within
                    514: one line, use the value 1.  For most commands that affect multiple
                    515: lines, such as `al' (insert a line) and `cd' (clear from the cursor to
                    516: the end of the screen), NLINES should be the screen height minus the
                    517: current vertical position (origin 0).  For multiple insert and scroll
                    518: commands such as `AL' (insert multiple lines), that same value for
                    519: NLINES is correct; the number of lines being inserted is not correct.
                    520: 
                    521:    If a "scroll window" feature is used to reduce the number of lines
                    522: affected by a command, the value of NLINES should take this into
                    523: account.  This is because the delay time required depends on how much
                    524: work the terminal has to do, and the scroll window feature reduces the
                    525: work. *Note Scrolling::.
                    526: 
                    527:    Commands such as `ic' and `dc' (insert or delete characters) are
                    528: problematical because the padding needed by these commands is
                    529: proportional to the number of characters affected, which is the number
                    530: of columns from the cursor to the end of the line.  It would be nice to
                    531: have a way to specify such a dependence, and there is no need for
                    532: dependence on vertical position in these commands, so it is an obvious
                    533: idea to say that for these commands NLINES should really be the number
                    534: of columns affected. However, the definition of termcap clearly says
                    535: that NLINES is always the number of lines affected, even in this case,
                    536: where it is always 1.  It is not easy to change this rule now, because
                    537: too many programs and terminal descriptions have been written to follow
                    538: it.
                    539: 
                    540:    Because NLINES is always 1 for the `ic' and `dc' strings, there is
                    541: no reason for them to use `*', but some of them do.  These should be
                    542: corrected by deleting the `*'.  If, some day, such entries have
                    543: disappeared, it may be possible to change to a more useful convention
                    544: for the NLINES argument for these operations without breaking any
                    545: programs.
                    546: 
                    547: 
                    548: File: termcap,  Node: Parameters,  Prev: Padding,  Up: Library
                    549: 
                    550: Filling In Parameters
                    551: =====================
                    552: 
                    553:    Some terminal control strings require numeric "parameters".  For
                    554: example, when you move the cursor, you need to say what horizontal and
                    555: vertical positions to move it to.  The value of the terminal's `cm'
                    556: capability, which says how to move the cursor, cannot simply be a
                    557: string of characters; it must say how to express the cursor position
                    558: numbers and where to put them within the command.
                    559: 
                    560:    The specifications of termcap include conventions as to which
                    561: string-valued capabilities require parameters, how many parameters, and
                    562: what the parameters mean; for example, it defines the `cm' string to
                    563: take two parameters, the vertical and horizontal positions, with 0,0
                    564: being the upper left corner.  These conventions are described where the
                    565: individual commands are documented.
                    566: 
                    567:    Termcap also defines a language used within the capability
                    568: definition for specifying how and where to encode the parameters for
                    569: output.  This language uses character sequences starting with `%'. 
                    570: (This is the same idea as `printf', but the details are different.) 
                    571: The language for parameter encoding is described in this section.
                    572: 
                    573:    A program that is doing display output calls the functions `tparam'
                    574: or `tgoto' to encode parameters according to the specifications.  These
                    575: functions produce a string containing the actual commands to be output
                    576: (as well a padding spec which must be processed with `tputs'; *note
                    577: Padding::.).
                    578: 
                    579: * Menu:
                    580: 
                    581: * Encode Parameters:: The language for encoding parameters.
                    582: * Using Parameters::  Outputting a string command with parameters.
                    583: 
                    584: 
                    585: File: termcap,  Node: Encode Parameters,  Next: Using Parameters,  Prev: Parameters,  Up: Parameters
                    586: 
                    587: Describing the Encoding
                    588: -----------------------
                    589: 
                    590:    A terminal command string that requires parameters contains special
                    591: character sequences starting with `%' to say how to encode the
                    592: parameters.  These sequences control the actions of `tparam' and
                    593: `tgoto'.
                    594: 
                    595:    The parameters values passed to `tparam' or `tgoto' are considered
                    596: to form a vector.  A pointer into this vector determines the next
                    597: parameter to be processed.  Some of the `%'-sequences encode one
                    598: parameter and advance the pointer to the next parameter. Other
                    599: `%'-sequences alter the pointer or alter the parameter values without
                    600: generating output.
                    601: 
                    602:    For example, the `cm' string for a standard ANSI terminal is written
                    603: as `\E[%i%d;%dH'.  (`\E' stands for ESC.)  `cm' by convention always
                    604: requires two parameters, the vertical and horizontal goal positions, so
                    605: this string specifies the encoding of two parameters.  Here `%i'
                    606: increments the two values supplied, and each `%d' encodes one of the
                    607: values in decimal.  If the cursor position values 20,58 are encoded
                    608: with this string, the result is `\E[21;59H'.
                    609: 
                    610:    First, here are the `%'-sequences that generate output.  Except for
                    611: `%%', each of them encodes one parameter and advances the pointer to
                    612: the following parameter.
                    613: 
                    614: `%%'
                    615:      Output a single `%'.  This is the only way to represent a literal
                    616:      `%' in a terminal command with parameters.  `%%' does not use up a
                    617:      parameter.
                    618: 
                    619: `%d'
                    620:      As in `printf', output the next parameter in decimal.
                    621: 
                    622: `%2'
                    623:      Like `%02d' in `printf': output the next parameter in decimal, and
                    624:      always use at least two digits.
                    625: 
                    626: `%3'
                    627:      Like `%03d' in `printf': output the next parameter in decimal, and
                    628:      always use at least three digits.  Note that `%4' and so on are
                    629:      *not* defined.
                    630: 
                    631: `%.'
                    632:      Output the next parameter as a single character whose ASCII code is
                    633:      the parameter value.  Like `%c' in `printf'.
                    634: 
                    635: `%+CHAR'
                    636:      Add the next parameter to the character CHAR, and output the
                    637:      resulting character.  For example, `%+ ' represents 0 as a space,
                    638:      1 as `!', etc.
                    639: 
                    640:    The following `%'-sequences specify alteration of the parameters
                    641: (their values, or their order) rather than encoding a parameter for
                    642: output. They generate no output; they are used only for their side
                    643: effects on the parameters.  Also, they do not advance the "next
                    644: parameter" pointer except as explicitly stated.  Only `%i', `%r' and
                    645: `%>' are defined in standard Unix termcap.  The others are GNU
                    646: extensions.
                    647: 
                    648: `%i'
                    649:      Increment the next two parameters.  This is used for terminals that
                    650:      expect cursor positions in origin 1.  For example, `%i%d,%d' would
                    651:      output two parameters with `1' for 0, `2' for 1, etc.
                    652: 
                    653: `%r'
                    654:      Interchange the next two parameters.  This is used for terminals
                    655:      whose cursor positioning command expects the horizontal position
                    656:      first.
                    657: 
                    658: `%s'
                    659:      Skip the next parameter.  Do not output anything.
                    660: 
                    661: `%b'
                    662:      Back up one parameter.  The last parameter used will become once
                    663:      again the next parameter to be output, and the next output command
                    664:      will use it.  Using `%b' more than once, you can back up any
                    665:      number of parameters, and you can refer to each parameter any
                    666:      number of times.
                    667: 
                    668: `%>C1C2'
                    669:      Conditionally increment the next parameter.  Here C1 and C2 are
                    670:      characters which stand for their ASCII codes as numbers. If the
                    671:      next parameter is greater than the ASCII code of C1, the ASCII
                    672:      code of C2 is added to it.
                    673: 
                    674: `%a OP TYPE POS'
                    675:      Perform arithmetic on the next parameter, do not use it up, and do
                    676:      not output anything.  Here OP specifies the arithmetic operation,
                    677:      while TYPE and POS together specify the other operand.
                    678: 
                    679:      Spaces are used above to separate the operands for clarity; the
                    680:      spaces don't appear in the data base, where this sequence is
                    681:      exactly five characters long.
                    682: 
                    683:      The character OP says what kind of arithmetic operation to
                    684:      perform.  It can be any of these characters:
                    685: 
                    686:     `='
                    687:           assign a value to the next parameter, ignoring its old value.
                    688:           The new value comes from the other operand.
                    689: 
                    690:     `+'
                    691:           add the other operand to the next parameter.
                    692: 
                    693:     `-'
                    694:           subtract the other operand from the next parameter.
                    695: 
                    696:     `*'
                    697:           multiply the next parameter by the other operand.
                    698: 
                    699:     `/'
                    700:           divide the next parameter by the other operand.
                    701: 
                    702:      The "other operand" may be another parameter's value or a constant;
                    703:      the character TYPE says which.  It can be:
                    704: 
                    705:     `p'
                    706:           Use another parameter.  The character POS says which
                    707:           parameter to use.  Subtract 64 from its ASCII code to get the
                    708:           position of the desired parameter relative to this one.  Thus,
                    709:           the character `A' as POS means the parameter after the next
                    710:           one; the character `?' means the parameter before the next
                    711:           one.
                    712: 
                    713:     `c'
                    714:           Use a constant value.  The character POS specifies the value
                    715:           of the constant.  The 0200 bit is cleared out, so that 0200
                    716:           can be used to represent zero.
                    717: 
                    718:    The following `%'-sequences are special purpose hacks to compensate
                    719: for the weird designs of obscure terminals.  They modify the next
                    720: parameter or the next two parameters but do not generate output and do
                    721: not use up any parameters.  `%m' is a GNU extension; the others are
                    722: defined in standard Unix termcap.
                    723: 
                    724: `%n'
                    725:      Exclusive-or the next parameter with 0140, and likewise the
                    726:      parameter after next.
                    727: 
                    728: `%m'
                    729:      Complement all the bits of the next parameter and the parameter
                    730:      after next.
                    731: 
                    732: `%B'
                    733:      Encode the next parameter in BCD.  It alters the value of the
                    734:      parameter by adding six times the quotient of the parameter by ten.
                    735:      Here is a C statement that shows how the new value is computed:
                    736: 
                    737:           PARM = (PARM / 10) * 16 + PARM % 10;
                    738: 
                    739: `%D'
                    740:      Transform the next parameter as needed by Delta Data terminals.
                    741:      This involves subtracting twice the remainder of the parameter by
                    742:      16.
                    743: 
                    744:           PARM -= 2 * (PARM % 16);
                    745: 
                    746: 
                    747: File: termcap,  Node: Using Parameters,  Prev: Encode Parameters,  Up: Parameters
                    748: 
                    749: Sending Display Commands with Parameters
                    750: ----------------------------------------
                    751: 
                    752:    The termcap library functions `tparam' and `tgoto' serve as the
                    753: analog of `printf' for terminal string parameters.  The newer function
                    754: `tparam' is a GNU extension, more general but missing from Unix
                    755: termcap.  The original parameter-encoding function is `tgoto', which is
                    756: preferable for cursor motion.
                    757: 
                    758: * Menu:
                    759: 
                    760: * tparam::   The general case, for GNU termcap only.
                    761: * tgoto::    The special case of cursor motion.
                    762: 
                    763: 
                    764: File: termcap,  Node: tparam,  Next: tgoto,  Prev: Using Parameters,  Up: Using Parameters
                    765: 
                    766: `tparam'
                    767: ........
                    768: 
                    769:    The function `tparam' can encode display commands with any number of
                    770: parameters and allows you to specify the buffer space.  It is the
                    771: preferred function for encoding parameters for all but the `cm'
                    772: capability.  Its ANSI C declaration is as follows:
                    773: 
                    774:      char *tparam (char *CTLSTRING, char *BUFFER, int SIZE, int PARM1,...)
                    775: 
                    776:    The arguments are a control string CTLSTRING (the value of a terminal
                    777: capability, presumably), an output buffer BUFFER and SIZE, and any
                    778: number of integer parameters to be encoded.  The effect of `tparam' is
                    779: to copy the control string into the buffer, encoding parameters
                    780: according to the `%' sequences in the control string.
                    781: 
                    782:    You describe the output buffer by its address, BUFFER, and its size
                    783: in bytes, SIZE.  If the buffer is not big enough for the data to be
                    784: stored in it, `tparam' calls `malloc' to get a larger buffer.  In
                    785: either case, `tparam' returns the address of the buffer it ultimately
                    786: uses.  If the value equals BUFFER, your original buffer was used.
                    787: Otherwise, a new buffer was allocated, and you must free it after you
                    788: are done with printing the results.  If you pass zero for SIZE and
                    789: BUFFER, `tparam' always allocates the space with `malloc'.
                    790: 
                    791:    All capabilities that require parameters also have the ability to
                    792: specify padding, so you should use `tputs' to output the string
                    793: produced by `tparam'.  *Note Padding::.  Here is an example.
                    794: 
                    795:      {
                    796:        char *buf;
                    797:        char buffer[40];
                    798:      
                    799:        buf = tparam (command, buffer, 40, parm);
                    800:        tputs (buf, 1, fputchar);
                    801:        if (buf != buffer)
                    802:          free (buf);
                    803:      }
                    804: 
                    805:    If a parameter whose value is zero is encoded with `%.'-style
                    806: encoding, the result is a null character, which will confuse `tputs'.
                    807: This would be a serious problem, but luckily `%.' encoding is used only
                    808: by a few old models of terminal, and only for the `cm' capability.  To
                    809: solve the problem, use `tgoto' rather than `tparam' to encode the `cm'
                    810: capability.
                    811: 
                    812: 
                    813: File: termcap,  Node: tgoto,  Prev: tparam,  Up: Using Parameters
                    814: 
                    815: `tgoto'
                    816: .......
                    817: 
                    818:    The special case of cursor motion is handled by `tgoto'.  There are
                    819: two reasons why you might choose to use `tgoto':
                    820: 
                    821:    * For Unix compatibility, because Unix termcap does not have
                    822:      `tparam'.
                    823: 
                    824:    * For the `cm' capability, since `tgoto' has a special feature to
                    825:      avoid problems with null characters, tabs and newlines on certain
                    826:      old terminal types that use `%.' encoding for that capability.
                    827: 
                    828:    Here is how `tgoto' might be declared in ANSI C:
                    829: 
                    830:      char *tgoto (char *CSTRING, int HPOS, int VPOS)
                    831: 
                    832:    There are three arguments, the terminal description's `cm' string and
                    833: the two cursor position numbers; `tgoto' computes the parametrized
                    834: string in an internal static buffer and returns the address of that
                    835: buffer. The next time you use `tgoto' the same buffer will be reused.
                    836: 
                    837:    Parameters encoded with `%.' encoding can generate null characters,
                    838: tabs or newlines.  These might cause trouble: the null character because
                    839: `tputs' would think that was the end of the string, the tab because the
                    840: kernel or other software might expand it into spaces, and the newline
                    841: becaue the kernel might add a carriage-return, or padding characters
                    842: normally used for a newline.  To prevent such problems, `tgoto' is
                    843: careful to avoid these characters.  Here is how this works: if the
                    844: target cursor position value is such as to cause a problem (that is to
                    845: say, zero, nine or ten), `tgoto' increments it by one, then compensates
                    846: by appending a string to move the cursor back or up one position.
                    847: 
                    848:    The compensation strings to use for moving back or up are found in
                    849: global variables named `BC' and `UP'.  These are actual external C
                    850: variables with upper case names; they are declared `char *'.  It is up
                    851: to you to store suitable values in them, normally obtained from the
                    852: `le' and `up' terminal capabilities in the terminal description with
                    853: `tgetstr'.  Alternatively, if these two variables are both zero, the
                    854: feature of avoiding nulls, tabs and newlines is turned off.
                    855: 
                    856:    It is safe to use `tgoto' for commands other than `cm' only if you
                    857: have stored zero in `BC' and `UP'.
                    858: 
                    859:    Note that `tgoto' reverses the order of its operands: the horizontal
                    860: position comes before the vertical position in the arguments to
                    861: `tgoto', even though the vertical position comes before the horizontal
                    862: in the parameters of the `cm' string.  If you use `tgoto' with a
                    863: command such as `AL' that takes one parameter, you must pass the
                    864: parameter to `tgoto' as the "vertical position".
                    865: 
                    866: 
                    867: File: termcap,  Node: Data Base,  Next: Capabilities,  Prev: Library,  Up: Top
                    868: 
                    869: The Format of the Data Base
                    870: ***************************
                    871: 
                    872:    The termcap data base of terminal descriptions is stored in the file
                    873: `/etc/termcap'.  It contains terminal descriptions, blank lines, and
                    874: comments.
                    875: 
                    876:    A terminal description starts with one or more names for the
                    877: terminal type. The information in the description is a series of
                    878: "capability names" and values.  The capability names have standard
                    879: meanings (*note Capabilities::.) and their values describe the terminal.
                    880: 
                    881: * Menu:
                    882: 
                    883: * Format::            Overall format of a terminal description.
                    884: * Capability Format:: Format of capabilities within a description.
                    885: * Naming::            Naming conventions for terminal types.
                    886: * Inheriting::        Inheriting part of a description from
                    887:                         a related terminal type.
                    888: 
                    889: 
                    890: File: termcap,  Node: Format,  Next: Capability Format,  Prev: Data Base,  Up: Data Base
                    891: 
                    892: Terminal Description Format
                    893: ===========================
                    894: 
                    895:    Aside from comments (lines starting with `#', which are ignored),
                    896: each nonblank line in the termcap data base is a terminal description.
                    897: A terminal description is nominally a single line, but it can be split
                    898: into multiple lines by inserting the two characters `\ newline'. This
                    899: sequence is ignored wherever it appears in a description.
                    900: 
                    901:    The preferred way to split the description is between capabilities:
                    902: insert the four characters `: \ newline tab' immediately before any
                    903: colon. This allows each sub-line to start with some indentation.  This
                    904: works because, after the `\ newline' are ignored, the result is `: tab
                    905: :'; the first colon ends the preceding capability and the second colon
                    906: starts the next capability.  If you split with `\ newline' alone, you
                    907: may not add any indentation after them.
                    908: 
                    909:    Here is a real example of a terminal description:
                    910: 
                    911:      dw|vt52|DEC vt52:\
                    912:              :cr=^M:do=^J:nl=^J:bl=^G:\
                    913:              :le=^H:bs:cd=\EJ:ce=\EK:cl=\EH\EJ:cm=\EY%+ %+ :co#80:li#24:\
                    914:              :nd=\EC:ta=^I:pt:sr=\EI:up=\EA:\
                    915:              :ku=\EA:kd=\EB:kr=\EC:kl=\ED:kb=^H:
                    916: 
                    917:    Each terminal description begins with several names for the terminal
                    918: type. The names are separated by `|' characters, and a colon ends the
                    919: last name.  The first name should be two characters long; it exists
                    920: only for the sake of very old Unix systems and is never used in modern
                    921: systems.  The last name should be a fully verbose name such as "DEC
                    922: vt52" or "Ann Arbor Ambassador with 48 lines".  The other names should
                    923: include whatever the user ought to be able to specify to get this
                    924: terminal type, such as `vt52' or `aaa-48'.  *Note Naming::, for
                    925: information on how to choose terminal type names.
                    926: 
                    927:    After the terminal type names come the terminal capabilities,
                    928: separated by colons and with a colon after the last one.  Each
                    929: capability has a two-letter name, such as `cm' for "cursor motion
                    930: string" or `li' for "number of display lines".
                    931: 
                    932: 
                    933: File: termcap,  Node: Capability Format,  Next: Naming,  Prev: Format,  Up: Data Base
                    934: 
                    935: Writing the Capabilities
                    936: ========================
                    937: 
                    938:    There are three kinds of capabilities: flags, numbers, and strings. 
                    939: Each kind has its own way of being written in the description.  Each
                    940: defined capability has by convention a particular kind of value; for
                    941: example, `li' always has a numeric value and `cm' always a string value.
                    942: 
                    943:    A flag capability is thought of as having a boolean value: the value
                    944: is true if the capability is present, false if not.  When the
                    945: capability is present, just write its name between two colons.
                    946: 
                    947:    A numeric capability has a value which is a nonnegative number. 
                    948: Write the capability name, a `#', and the number, between two colons. 
                    949: For example, `...:li#48:...' is how you specify the `li' capability for
                    950: 48 lines.
                    951: 
                    952:    A string-valued capability has a value which is a sequence of
                    953: characters. Usually these are the characters used to perform some
                    954: display operation. Write the capability name, a `=', and the characters
                    955: of the value, between two colons.  For example,
                    956: `...:cm=\E[%i%d;%dH:...' is how the cursor motion command for a
                    957: standard ANSI terminal would be specified.
                    958: 
                    959:    Special characters in the string value can be expressed using
                    960: `\'-escape sequences as in C; in addition, `\E' stands for ESC.  `^' is
                    961: also a kind of escape character; `^' followed by CHAR stands for the
                    962: control-equivalent of CHAR.  Thus, `^a' stands for the character
                    963: control-a, just like `\001'. `\' and `^' themselves can be represented
                    964: as `\\' and `\^'.
                    965: 
                    966:    To include a colon in the string, you must write `\072'.  You might
                    967: ask, "Why can't `\:' be used to represent a colon?"  The reason is that
                    968: the interrogation functions do not count slashes while looking for a
                    969: capability.  Even if `:ce=ab\:cd:' were interpreted as giving the `ce'
                    970: capability the value `ab:cd', it would also appear to define `cd' as a
                    971: flag.
                    972: 
                    973:    The string value will often contain digits at the front to specify
                    974: padding (*note Padding::.) and/or `%'-sequences within to specify how
                    975: to encode parameters (*note Parameters::.).  Although these things are
                    976: not to be output literally to the terminal, they are considered part of
                    977: the value of the capability.  They are special only when the string
                    978: value is processed by `tputs', `tparam' or `tgoto'.  By contrast, `\'
                    979: and `^' are considered part of the syntax for specifying the characters
                    980: in the string.
                    981: 
                    982:    Let's look at the VT52 example again:
                    983: 
                    984:      dw|vt52|DEC vt52:\
                    985:              :cr=^M:do=^J:nl=^J:bl=^G:\
                    986:              :le=^H:bs:cd=\EJ:ce=\EK:cl=\EH\EJ:cm=\EY%+ %+ :co#80:li#24:\
                    987:              :nd=\EC:ta=^I:pt:sr=\EI:up=\EA:\
                    988:              :ku=\EA:kd=\EB:kr=\EC:kl=\ED:kb=^H:
                    989: 
                    990:    Here we see the numeric-valued capabilities `co' and `li', the flags
                    991: `bs' and `pt', and many string-valued capabilities.  Most of the
                    992: strings start with ESC represented as `\E'.  The rest contain control
                    993: characters represented using `^'.  The meanings of the individual
                    994: capabilities are defined elsewhere (*note Capabilities::.).
                    995: 
                    996: 
                    997: File: termcap,  Node: Naming,  Next: Inheriting,  Prev: Capability Format,  Up: Data Base
                    998: 
                    999: Terminal Type Name Conventions
                   1000: ==============================
                   1001: 
                   1002:    There are conventions for choosing names of terminal types.  For one
                   1003: thing, all letters should be in lower case.  The terminal type for a
                   1004: terminal in its most usual or most fundamental mode of operation should
                   1005: not have a hyphen in it.
                   1006: 
                   1007:    If the same terminal has other modes of operation which require
                   1008: different terminal descriptions, these variant descriptions are given
                   1009: names made by adding suffixes with hyphens.  Such alternate descriptions
                   1010: are used for two reasons:
                   1011: 
                   1012:    * When the terminal has a switch that changes its behavior.  Since
                   1013:      the computer cannot tell how the switch is set, the user must tell
                   1014:      the computer by choosing the appropriate terminal type name.
                   1015: 
                   1016:      For example, the VT-100 has a setup flag that controls whether the
                   1017:      cursor wraps at the right margin.  If this flag is set to "wrap",
                   1018:      you must use the terminal type `vt100-am'.  Otherwise you must use
                   1019:      `vt100-nam'.  Plain `vt100' is defined as a synonym for either
                   1020:      `vt100-am' or `vt100-nam' depending on the preferences of the
                   1021:      local site.
                   1022: 
                   1023:      The standard suffix `-am' stands for "automatic margins".
                   1024: 
                   1025:    * To give the user a choice in how to use the terminal.  This is done
                   1026:      when the terminal has a switch that the computer normally controls.
                   1027: 
                   1028:      For example, the Ann Arbor Ambassador can be configured with many
                   1029:      screen sizes ranging from 20 to 60 lines.  Fewer lines make bigger
                   1030:      characters but more lines let you see more of what you are editing.
                   1031:      As a result, users have different preferences.  Therefore, termcap
                   1032:      provides terminal types for many screen sizes.  If you choose type
                   1033:      `aaa-30', the terminal will be configured to use 30 lines; if you
                   1034:      choose `aaa-48', 48 lines will be used, and so on.
                   1035: 
                   1036:    Here is a list of standard suffixes and their conventional meanings:
                   1037: 
                   1038: `-w'
                   1039:      Short for "wide".  This is a mode that gives the terminal more
                   1040:      columns than usual.  This is normally a user option.
                   1041: 
                   1042: `-am'
                   1043:      "Automatic margins".  This is an alternate description for use when
                   1044:      the terminal's margin-wrap switch is on; it contains the `am'
                   1045:      flag.  The implication is that normally the switch is off and the
                   1046:      usual description for the terminal says that the switch is off.
                   1047: 
                   1048: `-nam'
                   1049:      "No automatic margins".  The opposite of `-am', this names an
                   1050:      alternative description which lacks the `am' flag.  This implies
                   1051:      that the terminal is normally operated with the margin-wrap switch
                   1052:      turned on, and the normal description of the terminal says so.
                   1053: 
                   1054: `-na'
                   1055:      "No arrows".  This terminal description initializes the terminal to
                   1056:      keep its arrow keys in local mode.  This is a user option.
                   1057: 
                   1058: `-rv'
                   1059:      "Reverse video".  This terminal description causes text output for
                   1060:      normal video to appear as reverse, and text output for reverse
                   1061:      video to come out as normal.  Often this description differs from
                   1062:      the usual one by interchanging the two strings which turn reverse
                   1063:      video on and off.
                   1064: 
                   1065:      This is a user option; you can choose either the "reverse video"
                   1066:      variant terminal type or the normal terminal type, and termcap will
                   1067:      obey.
                   1068: 
                   1069: `-s'
                   1070:      "Status".  Says to enable use of a status line which ordinary
                   1071:      output does not touch (*note Status Line::.).
                   1072: 
                   1073:      Some terminals have a special line that is used only as a status
                   1074:      line. For these terminals, there is no need for an `-s' variant;
                   1075:      the status line commands should be defined by default.  On other
                   1076:      terminals, enabling a status line means removing one screen line
                   1077:      from ordinary use and reducing the effective screen height.  For
                   1078:      these terminals, the user can choose the `-s' variant type to
                   1079:      request use of a status line.
                   1080: 
                   1081: `-NLINES'
                   1082:      Says to operate with NLINES lines on the screen, for terminals
                   1083:      such as the Ambassador which provide this as an option.  Normally
                   1084:      this is a user option; by choosing the terminal type, you control
                   1085:      how many lines termcap will use.
                   1086: 
                   1087: `-NPAGESp'
                   1088:      Says that the terminal has NPAGES pages worth of screen memory,
                   1089:      for terminals where this is a hardware option.
                   1090: 
                   1091: `-unk'
                   1092:      Says that description is not for direct use, but only for
                   1093:      reference in `tc' capabilities.  Such a description is a kind of
                   1094:      subroutine, because it describes the common characteristics of
                   1095:      several variant descriptions that would use other suffixes in
                   1096:      place of `-unk'.
                   1097: 
                   1098: 
                   1099: File: termcap,  Node: Inheriting,  Prev: Naming,  Up: Data Base
                   1100: 
                   1101: Inheriting from Related Descriptions
                   1102: ====================================
                   1103: 
                   1104:    When two terminal descriptions are similar, their identical parts do
                   1105: not need to be given twice.  Instead, one of the two can be defined in
                   1106: terms of the other, using the `tc' capability.  We say that one
                   1107: description "refers to" the other, or "inherits from" the other.
                   1108: 
                   1109:    The `tc' capability must be the last one in the terminal description,
                   1110: and its value is a string which is the name of another terminal type
                   1111: which is referred to.  For example,
                   1112: 
                   1113:      N9|aaa|ambassador|aaa-30|ann arbor ambassador/30 lines:\
                   1114:              :ti=\E[2J\E[30;0;0;30p:\
                   1115:              :te=\E[60;0;0;30p\E[30;1H\E[J:\
                   1116:              :li#30:tc=aaa-unk:
                   1117: 
                   1118: defines the terminal type `aaa-30' (also known as plain `aaa') in terms
                   1119: of `aaa-unk', which defines everything about the Ambassador that is
                   1120: independent of screen height.  The types `aaa-36', `aaa-48' and so on
                   1121: for other screen heights are likewise defined to inherit from `aaa-unk'.
                   1122: 
                   1123:    The capabilities overridden by `aaa-30' include `li', which says how
                   1124: many lines there are, and `ti' and `te', which configure the terminal
                   1125: to use that many lines.
                   1126: 
                   1127:    The effective terminal description for type `aaa' consists of the
                   1128: text shown above followed by the text of the description of `aaa-unk'. 
                   1129: The `tc' capability is handled automatically by `tgetent', which finds
                   1130: the description thus referenced and combines the two descriptions
                   1131: (*note Find::.).  Therefore, only the implementor of the terminal
                   1132: descriptions needs to think about using `tc'.  Users and application
                   1133: programmers do not need to be concerned with it.
                   1134: 
                   1135:    Since the reference terminal description is used last, capabilities
                   1136: specified in the referring description override any specifications of
                   1137: the same capabilities in the reference description.
                   1138: 
                   1139:    The referring description can cancel out a capability without
                   1140: specifying any new value for it by means of a special trick.  Write the
                   1141: capability in the referring description, with the character `@' after
                   1142: the capability name, as follows:
                   1143: 
                   1144:      NZ|aaa-30-nam|ann arbor ambassador/30 lines/no automatic-margins:\
                   1145:              :am@:tc=aaa-30:
                   1146: 
                   1147: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.