Annotation of 43BSDReno/contrib/emacs-18.55/info/termcap-1, revision 1.1

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

unix.superglobalmegacorp.com

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