Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ terminfo(4) — Atari System V 1.1-06

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

curses(3X)

ls(1)

pg(1)

printf(3S)

stty(1)

tic(1M)

tput(1)

tty(1)

vi(1)





   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


   NAME
         terminfo - terminal capability data base

   SYNOPSIS
         /usr/share/lib/terminfo/?/*

   DESCRIPTION
         terminfo is a database produced by tic that describes the
         capabilities of devices such as terminals and printers.  Devices are
         described in terminfo source files by specifying a set of
         capabilities, by quantifying certain aspects of the device, and by
         specifying character sequences that effect particular results.  This
         database is often used by screen oriented applications such as vi and
         curses programs, as well as by some UNIX system commands such as ls
         and more.  This usage allows them to work with a variety of devices
         without changes to the programs.

         terminfo source files consist of one or more device descriptions.
         Each description consists of a header (beginning in column 1) and one
         or more lines that list the features for that particular device.
         Every line in a terminfo source file must end in a comma (,).  Every
         line in a terminfo source file except the header must be indented
         with one or more white spaces (either spaces or tabs).

         Entries in terminfo source files consist of a number of comma-
         separated fields.  White space after each comma is ignored.  Embedded
         commas must be escaped by using a backslash.  The following example
         shows the format of a terminfo source file.
            alias1 | alias2 | ... | aliasn | longname,
            <white space> am, lines #24,
            <white space> home=\Eeh,
         The first line, commonly referred to as the header line, must begin
         in column one and must contain at least two aliases separated by
         vertical bars.  The last field in the header line must be the long
         name of the device and it may contain any string.  Alias names must
         be unique in the terminfo database and they must conform to UNIX
         system file naming conventions [see tic(1M)]; they cannot, for
         example, contain white space or slashes.

         Every device must be assigned a name, such as "vt100".  Device names
         (except the long name) should be chosen using the following
         conventions.  The name should not contain hyphens because hyphens are
         reserved for use when adding suffixes that indicate special modes.

         These special modes may be modes that the hardware can be in, or user
         preferences.  To assign a special mode to a particular device, append
         a suffix consisting of a hyphen and an indicator of the mode to the
         device name.  For example, the -w suffix means "wide mode"; when
         specified, it allows for a width of 132 columns instead of the
         standard 80 columns.  Therefore, if you want to use a vt100 device
         set to wide mode, name the device "vt100-w."  Use the following


   8/91                                                                 Page 1









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         suffixes where possible.
               Suffix                 Meaning                  Example
               -w       Wide mode (more than 80 columns)       5410-w
               -am      With auto. margins (usually default)   vt100-am
               -nam     Without automatic margins              vt100-nam
               -n       Number of lines on the screen          2300-40
               -na      No arrow keys (leave them in local)    c100-na
               -np      Number of pages of memory              c100-4p
               -rv      Reverse video                          4415-rv

         The terminfo reference manual page is organized in two sections:
         "DEVICE CAPABILITIES" and "PRINTER CAPABILITIES."

      PART 1: DEVICE CAPABILITIES
         Capabilities in terminfo are of three types:  Boolean capabilities
         (which show that a device has or does not have a particular feature),
         numeric capabilities (which quantify particular features of a
         device), and string capabilities (which provide sequences that can be
         used to perform particular operations on devices).

         In the following table, a Variable is the name by which a C
         programmer accesses a capability (at the terminfo level).  A Capname
         is the short name for a capability specified in the terminfo source
         file.  It is used by a person updating the source file and by the
         tput command.  A Termcap Code is a two-letter sequence that
         corresponds to the termcap capability name.  (Note that termcap is no
         longer supported.)

         Capability names have no real length limit, but an informal limit of
         five characters has been adopted to keep them short.  Whenever
         possible, capability names are chosen to be the same as or similar to
         those specified by the ANSI X3.64-1979 standard.  Semantics are also
         intended to match those of the ANSI standard.

         All string capabilities listed below may have padding specified, with
         the exception of those used for input.  Input capabilities, listed
         under the Strings section in the following tables, have names
         beginning with key.  The #i symbol in the description field of the
         following tables refers to the ith parameter.

      Booleans
                                    Cap-    Termcap
         Variable                   name    Code      Description
         autoleftmargin           bw      bw        cub1 wraps from column 0
                                                      to last column
         autorightmargin          am      am        Terminal has automatic
                                                      margins
         backcolorerase           bce     be        Screen erased with back
                                                      ground color
         canchange                 ccc     cc        Terminal can re-define
                                                      existing color


   Page 2                                                                 8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


                                    Cap-    Termcap
         Variable                   name    Code      Description
         ceolstandoutglitch       xhp     xs        Standout not erased by
                                                      overwriting (hp)
         coladdrglitch            xhpa    YA        Only positive motion for hpa
                                                      /mhpa caps
         cpichangesres            cpix    YF        Changing character pitch
                                                      changes resolution
         crcancelsmicromode      crxm    YB        Using cr turns off
                                                      micro mode
         eatnewlineglitch         xenl    xn        Newline ignored after 80
                                                      columns (Concept)
         eraseoverstrike           eo      eo        Can erase overstrikes with
                                                      a blank
         generictype               gn      gn        Generic line type (e.g.,
                                                      dialup, switch)
         hardcopy                  hc      hc        Hardcopy terminal
         hardcursor                chts    HC        Cursor is hard to see
         hasmetakey               km      km        Has a meta key (shift,
                                                      sets parity bit)
         hasprintwheel            daisy   YC        Printer needs operator to
                                                      change character set
         hasstatusline            hs      hs        Has extra "status line"
         huelightnesssaturation   hls     hl        Terminal uses only HLS
                                                      color notation (Tektronix)
         insertnullglitch         in      in        Insert mode distinguishes
                                                      nulls
         lpichangesres            lpix    YG        Changing line pitch
                                                      changes resolution
         memoryabove               da      da        Display may be retained
                                                      above the screen
         memorybelow               db      db        Display may be retained
                                                      below the screen
         moveinsertmode           mir     mi        Safe to move while in
                                                      insert mode
         movestandoutmode         msgr    ms        Safe to move in standout
                                                      modes
         needsxonxoff             nxon    nx        Padding won't work, xon/
                                                      xoff required
         noescctlc                xsb     xb        Beehive (f1=escape,
                                                      f2=ctrl C)
         nonrevrmcup              nrrmc   NR        smcup does not reverse rmcup
         nopadchar                npc     NP        Pad character doesn't
                                                      exist
         overstrike                os      os        Terminal overstrikes on
                                                      hard-copy terminal
         prtrsilent                mc5i    5i        Printer won't echo on
                                                      screen
         rowaddrglitch            xvpa    YD        Only positive motion for
                                                      vpa/mvpa caps
         semiautorightmargin     sam     YE        Printing in last column


   8/91                                                                 Page 3









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


                                    Cap-    Termcap
         Variable                   name    Code      Description
                                                      causes cr
         statuslineescok         eslok   es        Escape can be used on the
                                                      status line
         desttabsmagicsmso       xt      xt        Destructive tabs, magic
                                                      smso char (t1061)
         tildeglitch               hz      hz        Hazeltine; can't print
                                                      tilde (~)
         transparentunderline      ul      ul        Underline character over-
                                                      strikes
         xonxoff                   xon     xo        Terminal uses xon/xoff
                                                      handshaking

      Numbers
                                Cap-     Termcap
         Variable               name     Code      Description
         buffercapacity        bufsz    Ya        Number of bytes buffered
                                                   before printing
         columns                cols     co        Number of columns in a line
         dotvertspacing       spinv    Yb        Spacing of pins vertically in
                                                   pins per inch
         dothorzspacing       spinh    Yc        Spacing of dots horizontally
                                                   in dots per inch
         inittabs              it       it        Tabs initially every # spaces
         labelheight           lh       lh        Number of rows in each label
         labelwidth            lw       lw        Number of columns in each
                                                   label
         lines                  lines    li        Number of lines on a screen
                                                   or a page
         linesofmemory        lm       lm        Lines of memory if > lines; 0
                                                    means varies
         magiccookieglitch    xmc      sg        Number of blank characters
                                                   left by smso or rmso
         maxcolors             colors   Co        Maximum number of colors on
                                                   the screen
         maxmicroaddress      maddr    Yd        Maximum value in micro...address
         maxmicrojump         mjump    Ye        Maximum value in parm...micro
         maxpairs              pairs    pa        Maximum number of color-pairs
                                                   on the screen
         microcolsize         mcs      Yf        Character step size when in
                                                   micro mode
         microlinesize        mls      Yg        Line step size when in micro
                                                   mode
         nocolorvideo         ncv      NC        Video attributes that can't
                                                   be used with colors
         numberofpins         npins    Yh        Number of pins in print-head
         numlabels             nlab     Nl        Number of labels on screen
                                                   (start at 1)
         outputreschar        orc      Yi        Horizontal resolution in
                                                   units per character


   Page 4                                                                 8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


                                Cap-     Termcap
         Variable               name     Code      Description
         outputresline        orl      Yj        Vertical resolution in units
                                                   per line
         outputreshorzinch   orhi     Yk        Horizontal resolution in
                                                   units per inch
         outputresvertinch   orvi     Yl        Vertical resolution in units
                                                   per inch
         paddingbaudrate      pb       pb        Lowest baud rate where
                                                   padding needed
         virtualterminal       vt       vt        Virtual terminal number (UNIX
                                                   system)
         widecharsize         widcs    Yn        Character step size when in
                                                   double wide mode
         widthstatusline      wsl      ws        Number of columns in status
                                                   line

      Strings
                                     Cap-     Termcap
         Variable                    name     Code     Description
         acschars                   acsc     ac       Graphic charset pairs
                                                       aAbBcC
         altscancodeesc            scesca   S8       Alternate escape for scan
                                                       code emulation (default
                                                       is for vt100)
         backtab                    cbt      bt       Back tab
         bell                        bel      bl       Audible signal (bell)
         bitimagerepeat            birep    Zy       Repeat bit-image cell #1
                                                       #2 times (use tparm)
         bitimagenewline           binel    Zz       Move to next row of the
                                                       bit image (use tparm)
         bitimagecarriagereturn   bicr     Yv       Move to beginning of same
                                                       row (use tparm)
         carriagereturn             cr       cr       Carriage return
         changecharpitch           cpi      ZA       Change number of
                                                       characters per inch
         changelinepitch           lpi      ZB       Change number of lines
                                                       per inch
         changereshorz             chr      ZC       Change horizontal
                                                       resolution
         changeresvert             cvr      ZD       Change vertical
                                                       resolution
         changescrollregion        csr      cs       Change to lines #1
                                                       through #2 (vt100)
         charpadding                rmp      rP       Like ip but when in
                                                       replace mode
         charsetnames              csnm     Zy       List of character set
                                                       names
         clearalltabs              tbc      ct       Clear all tab stops
         clearmargins               mgc      MC       Clear all margins (top,
                                                       bottom, and sides)


   8/91                                                                 Page 5









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


                                     Cap-     Termcap
         Variable                    name     Code     Description
         clearscreen                clear    cl       Clear screen and home
                                                       cursor
         clrbol                     el1      cb       Clear to beginning of
                                                       line, inclusive
         clreol                     el       ce       Clear to end of line
         clreos                     ed       cd       Clear to end of display
         codesetinit               csin     ci       Init sequence for
                                                       multiple codesets
         colornames                 colornm  Yw       Give name for color #1
         columnaddress              hpa      ch       Horizontal position
                                                       absolute
         commandcharacter           cmdch    CC       Terminal settable cmd
                                                       character in prototype
         cursoraddress              cup      cm       Move to row #1 col #2
         cursordown                 cud1     do       Down one line
         cursorhome                 home     ho       Home cursor (if no cup)
         cursorinvisible            civis    vi       Make cursor invisible
         cursorleft                 cub1     le       Move left one space.
         cursormemaddress          mrcup    CM       Memory relative cursor
                                                       addressing
         cursornormal               cnorm    ve       Make cursor appear normal
                                                       (undo vs/vi)
         cursorright                cuf1     nd       Non-destructive space
                                                       (cursor or carriage right)
         cursortoll                ll       ll       Last line, first column
                                                       (if no cup)
         cursorup                   cuu1     up       Upline (cursor up)
         cursorvisible              cvvis    vs       Make cursor very visible
         definebitimageregion     defbi    Yx       Define rectangular bit-
                                                       image region (use tparm)
         definechar                 defc     ZE       Define a character in a
                                                       character set†
         deletecharacter            dch1     dc       Delete character
         deleteline                 dl1      dl       Delete line
         devicetype                 devt     dv       Indicate language/codeset
                                                       support
         disstatusline             dsl      ds       Disable status line
         displaypcchar             dispc    S1       Display PC character
         downhalfline              hd       hd       Half-line down (forward
                                                       1/2 linefeed)
         enaacs                     enacs    eA       Enable alternate
                                                       character set
         endbitimageregion        endbi    Yy       End a bit-image region
                                                       (use tparm)
         enteraltcharsetmode      smacs    as       Start alternate character
                                                       set
         enterammode               smam     SA       Turn on automatic margins
         enterblinkmode            blink    mb       Turn on blinking
         enterboldmode             bold     md       Turn on bold (extra


   Page 6                                                                 8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


                                     Cap-     Termcap
         Variable                    name     Code     Description
                                                       bright) mode
         entercamode               smcup    ti       String to begin programs
                                                       that use cup
         enterdeletemode           smdc     dm       Delete mode (enter)
         enterdimmode              dim      mh       Turn on half-bright mode
         enterdoublewidemode       swidm    ZF       Enable double wide
                                                       printing
         enterdraftquality         sdrfq    ZG       Set draft quality print
         enterinsertmode           smir     im       Insert mode (enter)
         enteritalicsmode          sitm     ZH       Enable italics
         enterleftwardmode         slm      ZI       Enable leftward carriage
                                                       motion
         entermicromode            smicm    ZJ       Enable micro motion
                                                       capabilities
         enternearletterquality   snlq     ZK       Set near-letter quality
                                                       print
         enternormalquality        snrmq    ZL       Set normal quality print
         enterpccharsetmode       smpch    S2       Enter PC character
                                                       display mode
         enterprotectedmode        prot     mp       Turn on protected mode
         enterreversemode          rev      mr       Turn on reverse video
                                                       mode
         enterscancodemode         smsc     S4       Enter PC scancode mode
         entersecuremode           invis    mk       Turn on blank mode
                                                       (characters invisible)
         entershadowmode           sshm     ZM       Enable shadow printing
         enterstandoutmode         smso     so       Begin standout mode
         entersubscriptmode        ssubm    ZN       Enable subscript printing
         entersuperscriptmode      ssupm    ZO       Enable superscript
                                                       printing
         enterunderlinemode        smul     us       Start underscore mode
         enterupwardmode           sum      ZP       Enable upward carriage
                                                       motion
         enterxonmode              smxon    SX       Turn on xon/xoff
                                                       handshaking
         erasechars                 ech      ec       Erase #1 characters
         exitaltcharsetmode       rmacs    ae       End alternate character
                                                       set
         exitammode                rmam     RA       Turn off automatic
                                                       margins
         exitattributemode         sgr0     me       Turn off all attributes
         exitcamode                rmcup    te       String to end programs
                                                       that use cup
         exitdeletemode            rmdc     ed       End delete mode
         exitdoublewidemode        rwidm    ZQ       Disable double wide
                                                       printing
         exitinsertmode            rmir     ei       End insert mode
         exititalicsmode           ritm     ZR       Disable italics
         exitleftwardmode          rlm      ZS       Enable rightward (normal)


   8/91                                                                 Page 7









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


                                     Cap-     Termcap
         Variable                    name     Code     Description
                                                       carriage motion
         exitmicromode             rmicm    ZT       Disable micro motion
                                                       capabilities
         exitpccharsetmode        rmpch    S3       Disable PC character
                                                       display mode
         exitscancodemode          rmsc     S5       Disable PC scancode mode
         exitshadowmode            rshm     ZU       Disable shadow printing
         exitstandoutmode          rmso     se       End standout mode
         exitsubscriptmode         rsubm    ZV       Disable subscript
                                                       printing
         exitsuperscriptmode       rsupm    ZW       Disable superscript
                                                       printing
         exitunderlinemode         rmul     ue       End underscore mode
         exitupwardmode            rum      ZX       Enable downward (normal)
                                                       carriage motion
         exitxonmode               rmxon    RX       Turn off xon/xoff
                                                       handshaking
         flashscreen                flash    vb       Visible bell (may not
                                                       move cursor)
         formfeed                   ff       ff       Hardcopy terminal page
                                                       eject
         fromstatusline            fsl      fs       Return from status line
         init1string                is1      i1       Terminal or printer
                                                       initialization string
         init2string                is2      is       Terminal or printer
                                                       initialization string
         init3string                is3      i3       Terminal or printer
                                                       initialization string
         initfile                   if       if       Name of initialization
                                                       file
         initprog                   iprog    iP       Path name of program for
                                                       initialization
         initializecolor            initc    Ic       Initialize the definition
                                                       of color
         initializepair             initp    Ip       Initialize color-pair
         insertcharacter            ich1     ic       Insert character
         insertline                 il1      al       Add new blank line
         insertpadding              ip       ip       Insert pad after
                                                       character inserted






         The ``key'' strings are sent by specific keys.  The ``key''
         descriptions include the macro, defined in curses.h, for the code
         returned by the curses routine getch when the key is pressed [see
         curs_getch(3X)].


   Page 8                                                                 8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


                           Cap-   Termcap
         Variable          name   Code     Description
         keya1            ka1    K1       KEYA1, upper left of keypad
         keya3            ka3    K3       KEYA3, upper right of keypad
         keyb2            kb2    K2       KEYB2, center of keypad
         keybackspace     kbs    kb       KEYBACKSPACE, sent by backspace
                                           key
         keybeg           kbeg   @1       KEYBEG, sent by beg(inning) key
         keybtab          kcbt   kB       KEYBTAB, sent by back-tab key
         keyc1            kc1    K4       KEYC1, lower left of keypad
         keyc3            kc3    K5       KEYC3, lower right of keypad
         keycancel        kcan   @2       KEYCANCEL, sent by cancel key
         keycatab         ktbc   ka       KEYCATAB, sent by clear-all-
                                           tabs key
         keyclear         kclr   kC       KEYCLEAR, sent by clear-screen
                                           or erase key
         keyclose         kclo   @3       KEYCLOSE, sent by close key
         keycommand       kcmd   @4       KEYCOMMAND, sent by cmd
                                           (command) key
         keycopy          kcpy   @5       KEYCOPY, sent by copy key
         keycreate        kcrt   @6       KEYCREATE, sent by create key
         keyctab          kctab  kt       KEYCTAB, sent by clear-tab key
         keydc            kdch1  kD       KEYDC, sent by delete-character
                                           key
         keydl            kdl1   kL       KEYDL, sent by delete-line key
         keydown          kcud1  kd       KEYDOWN, sent by terminal
                                           down-arrow key
         keyeic           krmir  kM       KEYEIC, sent by rmir or smir in
                                           insert mode
         keyend           kend   @7       KEYEND, sent by end key
         keyenter         kent   @8       KEYENTER, sent by enter/send
                                           key
         keyeol           kel    kE       KEYEOL, sent by clear-to-end-of
                                           -line key
         keyeos           ked    kS       KEYEOS, sent by clear-to-end-of
                                           -screen key
         keyexit          kext   @9       KEYEXIT, sent by exit key
         keyf0            kf0    k0       KEYF(0), sent by function key
                                           f0
         keyf1            kf1    k1       KEYF(1), sent by function key
                                           f1
         keyf2            kf2    k2       KEYF(2), sent by function key
                                           f2
         keyf3            kf3    k3       KEYF(3), sent by function key
                                           f3
         keyf4            kf4    k4       KEYF(4), sent by function key
                                           f4
         keyf5            kf5    k5       KEYF(5), sent by function key
                                           f5
         keyf6            kf6    k6       KEYF(6), sent by function key
                                           f6


   8/91                                                                 Page 9









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


                           Cap-   Termcap
         Variable          name   Code     Description
         keyf7            kf7    k7       KEYF(7), sent by function key
                                           f7
         keyf8            kf8    k8       KEYF(8), sent by function key
                                           f8
         keyf9            kf9    k9       KEYF(9), sent by function key
                                           f9
         keyf10           kf10   k;       KEYF(10), sent by function key
                                           f10
         keyf11           kf11   F1       KEYF(11), sent by function key
                                           f11
         keyf12           kf12   F2       KEYF(12), sent by function key
                                           f12
         keyf13           kf13   F3       KEYF(13), sent by function key
                                           f13
         keyf14           kf14   F4       KEYF(14), sent by function key
                                           f14
         keyf15           kf15   F5       KEYF(15), sent by function key
                                           f15
         keyf16           kf16   F6       KEYF(16), sent by function key
                                           f16
         keyf17           kf17   F7       KEYF(17), sent by function key
                                           f17
         keyf18           kf18   F8       KEYF(18), sent by function key
                                           f18
         keyf19           kf19   F9       KEYF(19), sent by function key
                                           f19
         keyf20           kf20   FA       KEYF(20), sent by function key
                                           f20
         keyf21           kf21   FB       KEYF(21), sent by function key
                                           f21
         keyf22           kf22   FC       KEYF(22), sent by function key
                                           f22
         keyf23           kf23   FD       KEYF(23), sent by function key
                                           f23
         keyf24           kf24   FE       KEYF(24), sent by function key
                                           f24
         keyf25           kf25   FF       KEYF(25), sent by function key
                                           f25
         keyf26           kf26   FG       KEYF(26), sent by function key
                                           f26
         keyf27           kf27   FH       KEYF(27), sent by function key
                                           f27
         keyf28           kf28   FI       KEYF(28), sent by function key
                                           f28
         keyf29           kf29   FJ       KEYF(29), sent by function key
                                           f29
         keyf30           kf30   FK       KEYF(30), sent by function key
                                           f30
         keyf31           kf31   FL       KEYF(31), sent by function key


   Page 10                                                                8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


                           Cap-   Termcap
         Variable          name   Code     Description
                                           f31
         keyf32           kf32   FM       KEYF(32), sent by function key
                                           f32
         keyf33           kf33   FN       KEYF(13), sent by function key
                                           f13
         keyf34           kf34   FO       KEYF(34), sent by function key
                                           f34
         keyf35           kf35   FP       KEYF(35), sent by function key
                                           f35
         keyf36           kf36   FQ       KEYF(36), sent by function key
                                           f36
         keyf37           kf37   FR       KEYF(37), sent by function key
                                           f37
         keyf38           kf38   FS       KEYF(38), sent by function key
                                           f38
         keyf39           kf39   FT       KEYF(39), sent by function key
                                           f39
         keyf40           kf40   FU       KEYF(40), sent by function key
                                           f40
         keyf41           kf41   FV       KEYF(41), sent by function key
                                           f41
         keyf42           kf42   FW       KEYF(42), sent by function key
                                           f42
         keyf43           kf43   FX       KEYF(43), sent by function key
                                           f43
         keyf44           kf44   FY       KEYF(44), sent by function key
                                           f44
         keyf45           kf45   FZ       KEYF(45), sent by function key
                                           f45
         keyf46           kf46   Fa       KEYF(46), sent by function key
                                           f46
         keyf47           kf47   Fb       KEYF(47), sent by function key
                                           f47
         keyf48           kf48   Fc       KEYF(48), sent by function key
                                           f48
         keyf49           kf49   Fd       KEYF(49), sent by function key
                                           f49
         keyf50           kf50   Fe       KEYF(50), sent by function key
                                           f50
         keyf51           kf51   Ff       KEYF(51), sent by function key
                                           f51
         keyf52           kf52   Fg       KEYF(52), sent by function key
                                           f52
         keyf53           kf53   Fh       KEYF(53), sent by function key
                                           f53
         keyf54           kf54   Fi       KEYF(54), sent by function key
                                           f54
         keyf55           kf55   Fj       KEYF(55), sent by function key
                                           f55


   8/91                                                                Page 11









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


                           Cap-   Termcap
         Variable          name   Code     Description
         keyf56           kf56   Fk       KEYF(56), sent by function key
                                           f56
         keyf57           kf57   Fl       KEYF(57), sent by function key
                                           f57
         keyf58           kf58   Fm       KEYF(58), sent by function key
                                           f58
         keyf59           kf59   Fn       KEYF(59), sent by function key
                                           f59
         keyf60           kf60   Fo       KEYF(60), sent by function key
                                           f60
         keyf61           kf61   Fp       KEYF(61), sent by function key
                                           f61
         keyf62           kf62   Fq       KEYF(62), sent by function key
                                           f62
         keyf63           kf63   Fr       KEYF(63), sent by function key
                                           f63
         keyfind          kfnd   @0       KEYFIND, sent by find key
         keyhelp          khlp   %1       KEYHELP, sent by help key
         keyhome          khome  kh       KEYHOME, sent by home key
         keyic            kich1  kI       KEYIC, sent by ins-char/enter
                                           ins-mode key
         keyil            kil1   kA       KEYIL, sent by insert-line key
         keyleft          kcub1  kl       KEYLEFT, sent by terminal left
                                           -arrow key
         keyll            kll    kH       KEYLL, sent by home-down key
         keymark          kmrk   %2       KEYMARK, sent by mark key
         keymessage       kmsg   %3       KEYMESSAGE, sent by message key
         keymove          kmov   %4       KEYMOVE, sent by move key
         keynext          knxt   %5       KEYNEXT, sent by next-object
                                           key
         keynpage         knp    kN       KEYNPAGE, sent by next-page key
         keyopen          kopn   %6       KEYOPEN, sent by open key
         keyoptions       kopt   %7       KEYOPTIONS, sent by options key
         keyppage         kpp    kP       KEYPPAGE, sent by previous-page
                                           key
         keyprevious      kprv   %8       KEYPREVIOUS, sent by previous-
                                           object key
         keyprint         kprt   %9       KEYPRINT, sent by print or copy key
         keyredo          krdo   %0       KEYREDO, sent by redo key
         keyreference     kref   &1       KEYREFERENCE, sent by ref
                                           (erence) key
         keyrefresh       krfr   &2       KEYREFRESH, sent by refresh key
         keyreplace       krpl   &3       KEYREPLACE, sent by replace key
         keyrestart       krst   &4       KEYRESTART, sent by restart key
         keyresume        kres   &5       KEYRESUME, sent by resume key
         keyright         kcuf1  kr       KEYRIGHT, sent by terminal
                                           right-arrow key
         keysave          ksav   &6       KEYSAVE, sent by save key
         keysbeg          kBEG   &9       KEYSBEG, sent by shifted


   Page 12                                                                8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


                           Cap-   Termcap
         Variable          name   Code     Description
                                           beginning key
         keyscancel       kCAN   &0       KEYSCANCEL, sent by shifted
                                           cancel key
         keyscommand      kCMD   *1       KEYSCOMMAND, sent by shifted
                                           command key
         keyscopy         kCPY   *2       KEYSCOPY, sent by shifted copy
                                           key
         keyscreate       kCRT   *3       KEYSCREATE, sent by shifted
                                           create key
         keysdc           kDC    *4       KEYSDC, sent by shifted delete-
                                           char key
         keysdl           kDL    *5       KEYSDL, sent by shifted delete-
                                           line key
         keyselect        kslt   *6       KEYSELECT, sent by select key
         keysend          kEND   *7       KEYSEND, sent by shifted end
                                           key
         keyseol          kEOL   *8       KEYSEOL, sent by shifted clear-
                                           line key
         keysexit         kEXT   *9       KEYSEXIT, sent by shifted exit
                                           key
         keysf            kind   kF       KEYSF, sent by scroll-forward/
                                           down key
         keysfind         kFND   *0       KEYSFIND, sent by shifted find
                                           key
         keyshelp         kHLP   #1       KEYSHELP, sent by shifted help
                                           key
         keyshome         kHOM   #2       KEYSHOME, sent by shifted home
                                           key
         keysic           kIC    #3       KEYSIC, sent by shifted input
                                           key
         keysleft         kLFT   #4       KEYSLEFT, sent by shifted left-
                                           arrow key
         keysmessage      kMSG   %a       KEYSMESSAGE, sent by shifted
                                           message key
         keysmove         kMOV   %b       KEYSMOVE, sent by shifted move
                                           key
         keysnext         kNXT   %c       KEYSNEXT, sent by shifted next
                                           key
         keysoptions      kOPT   %d       KEYSOPTIONS, sent by shifted
                                           options key
         keysprevious     kPRV   %e       KEYSPREVIOUS, sent by shifted
                                           prev key
         keysprint        kPRT   %f       KEYSPRINT, sent by shifted
                                           print key
         keysr            kri    kR       KEYSR, sent by scroll-backward/
                                           up key
         keysredo         kRDO   %g       KEYSREDO, sent by shifted redo
                                           key
         keysreplace      kRPL   %h       KEYSREPLACE, sent by shifted


   8/91                                                                Page 13









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


                           Cap-   Termcap
         Variable          name   Code     Description
                                           replace key
         keysright        kRIT   %i       KEYSRIGHT, sent by shifted
                                           right-arrow key
         keysrsume        kRES   %j       KEYSRSUME, sent by shifted
                                           resume key
         keyssave         kSAV   !1       KEYSSAVE, sent by shifted save
                                           key
         keyssuspend      kSPD   !2       KEYSSUSPEND, sent by shifted
                                           suspend key
         keystab          khts   kT       KEYSTAB, sent by set-tab key
         keysundo         kUND   !3       KEYSUNDO, sent by shifted undo
                                           key
         keysuspend       kspd   &7       KEYSUSPEND, sent by
                                           suspend key
         keyundo          kund   &8       KEYUNDO, sent by undo key
         keyup            kcuu1  ku       KEYUP, sent by terminal up-
                                           arrow key
         keypadlocal      rmkx   ke       Out of ``keypad-transmit'' mode
         keypadxmit       smkx   ks       Put terminal in ``keypad-
                                           transmit'' mode
         labf0            lf0    l0       Labels on function key f0 if not
                                           f0
         labf1            lf1    l1       Labels on function key f1 if not
                                           f1
         labf2            lf2    l2       Labels on function key f2 if not
                                           f2
         labf3            lf3    l3       Labels on function key f3 if not
                                           f3
         labf4            lf4    l4       Labels on function key f4 if not
                                           f4
         labf5            lf5    l5       Labels on function key f5 if not
                                           f5
         labf6            lf6    l6       Labels on function key f6 if not
                                           f6
         labf7            lf7    l7       Labels on function key f7 if not
                                           f7
         labf8            lf8    l8       Labels on function key f8 if not
                                           f8
         labf9            lf9    l9       Labels on function key f9 if not
                                           f9
         labf10           lf10   la       Labels on function key f10 if
                                           not f10
         labeloff         rmln   LF       Turn off soft labels
         labelon          smln   LO       Turn on soft labels
         metaoff          rmm    mo       Turn off "meta mode"
         metaon           smm    mm       Turn on "meta mode" (8th bit)
         microcolumnaddresspa   ZY       Like columnaddress for micro
                                           adjustment
         microdown        mcud1  ZZ       Like cursordown for micro


   Page 14                                                                8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


                           Cap-   Termcap
         Variable          name   Code     Description
                                           adjustment
         microleft        mcub1  Za       Like cursorleft for micro
                                           adjustment
         microright       mcuf1  Zb       Like cursorright for micro
                                           adjustment
         microrowaddress mvpa   Zc       Like rowaddress for micro
                                           adjustment
         microup          mcuu1  Zd       Like cursorup for micro
                                           adjustment
         newline           nel    nw       Newline (behaves like cr
                                           followed by lf)
         orderofpins     porder Ze       Matches software bits to print-
                                           head pins
         origcolors       oc     oc       Set all color(-pair)s to the
                                           original ones
         origpair         op     op       Set default color-pair to the
                                           original one
         padchar          pad    pc       Pad character (rather than null)
         parmdch          dch    DC       Delete #1 chars
         parmdeleteline  dl     DL       Delete #1 lines
         parmdowncursor  cud    DO       Move down #1 lines.
         parmdownmicro   mcud   Zf       Like parmdowncursor for micro
                                           adjust.
         parmich          ich    IC       Insert #1 blank chars
         parmindex        indn   SF       Scroll forward #1 lines.
         parminsertline  il     AL       Add #1 new blank lines
         parmleftcursor  cub    LE       Move cursor left #1 spaces
         parmleftmicro   mcub   Zg       Like parmleftcursor for micro
                                           adjust.
         parmrightcursor cuf    RI       Move right #1 spaces.
         parmrightmicro  mcuf   Zh       Like parmrightcursor for micro
                                           adjust.
         parmrindex       rin    SR       Scroll backward #1 lines.
         parmupcursor    cuu    UP       Move cursor up #1 lines.
         parmupmicro     mcuu   Zi       Like parmupcursor for micro
                                           adjust.
         pctermoptions   pctrm  S6       PC terminal options
         pkeykey          pfkey  pk       Prog funct key #1 to type string
                                           #2
         pkeylocal        pfloc  pl       Prog funct key #1 to execute
                                           string #2
         pkeyplab         pfxl   xl       Prog key #1 to xmit string #2
                                           and show string #3
         pkeyxmit         pfx    px       Prog funct key #1 to xmit string
                                           #2
         plabnorm         pln    pn       Prog label #1 to show string #2
         printscreen      mc0    ps       Print contents of the screen
         prtrnon          mc5p   pO       Turn on the printer for #1 bytes
         prtroff          mc4    pf       Turn off the printer


   8/91                                                                Page 15









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


                           Cap-   Termcap
         Variable          name   Code     Description
         prtron           mc5    po       Turn on the printer
         repeatchar       rep    rp       Repeat char #1 #2 times
         reqforinput     rfi    RF       Send next input char (for ptys)
         reset1string     rs1    r1       Reset terminal completely to
                                           sane modes
         reset2string     rs2    r2       Reset terminal completely to
                                           sane modes
         reset3string     rs3    r3       Reset terminal completely to
                                           sane modes
         resetfile        rf     rf       Name of file containing reset
                                           string
         restorecursor    rc     rc       Restore cursor to position of
                                           last sc
         rowaddress       vpa    cv       Vertical position absolute
         savecursor       sc     sc       Save cursor position
         scancodeescape   scesc  S7       Escape for scancode emulation
         scrollforward    ind    sf       Scroll text up
         scrollreverse    ri     sr       Scroll text down
         selectcharset   scs    Zj       Select character set
         set0desseq      s0ds   s0       Shift into codeset 0
                                           (EUC set 0, ASCII)
         set1desseq      s1ds   s1       Shift into codeset 1
         set2desseq      s2ds   s2       Shift into codeset 2
         set3desseq      s3ds   s3       Shift into codeset 3
         setabackground  setab  AB       Set background color using ANSI
                                           escape
         setaforeground  setaf  AF       Set foreground color using ANSI
                                           escape
         setattributes    sgr    sa       Define the video attributes
                                           #1-#9
         setbackground    setb   Sb       Set current background color
         setbottommargin smgb   Zk       Set bottom margin at current
                                           line
         setbottommarginparmp  Zl       Set bottom margin at line #1 or
                                           #2 lines from bottom
         setcolorband    setcolorz       Change to ribbon color #1
         setcolorpair    scp    sp       Set current color-pair
         setforeground    setf   Sf       Set current foreground color1
         setleftmargin   smgl   ML       Set left margin at current line
         setleftmarginparmglp  Zm       Set left (right) margin at
                                           column #1 (#2)
         setlrmargin     smglr  ML       Sets both left and right margins
         setpagelength   slines YZ       Set page length to #1 lines (use
                                           tparm)
         setrightmargin  smgr   MR       Set right margin at current
                                           column
         setrightmarginparmrp  Zn       Set right margin at column #1
         settab           hts    st       Set a tab in all rows, current
                                           column


   Page 16                                                                8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


                           Cap-   Termcap
         Variable          name   Code     Description
         settbmargin     smgtb  MT       Sets both top and bottom margins
         settopmargin    smgt   Zo       Set top margin at current line
         settopmarginparmmgtp  Zp       Set top (bottom) margin at line
                                           #1 (#2)
         setwindow        wind   wi       Current window is lines #1-#2
                                           cols #3-#4
         startbitimage   sbim   Zq       Start printing bit image
                                           graphics
         startcharsetdefscsd   Zr       Start definition of a character
                                           set
         stopbitimage    rbim   Zs       End printing bit image graphics
         stopcharsetdef rcsd   Zt       End definition of a character
                                           set
         subscriptcharactersbcs  Zu       List of ``subscript-able''
         characters
         superscriptcharacterss  Zv       List of ``superscript-able''
         characters
         tab               ht     ta       Tab to next 8-space hardware tab
                                           stop
         thesecausecr    docr   Zw       Printing any of these chars
                                           causes cr
         tostatusline    tsl    ts       Go to status line, col #1
         underlinechar    uc     uc       Underscore one char and move
                                           past it
         uphalfline      hu     hu       Half-line up (reverse 1/2
                                           linefeed)
         xoffcharacter    xoffc  XF       X-off character
         xoncharacter     xonc   XN       X-on character
         zeromotion       zerom  Zx       No motion for the subsequent
                                           character

      Sample Entry
         The following entry, which describes the AT&T 610 terminal, is among
         the more complex entries in the terminfo file as of this writing.

         610|610bct|ATT610|att610|AT&T610;80column;98key keyboard
           am, eslok, hs, mir, msgr, xenl, xon,
           cols#80, it#8, lh#2, lines#24, lw#8, nlab#8, wsl#80,
           acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
           bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z,
           civis=\E[?25l, clear=\E[H\E[J, cnorm=\E[?25h\E[?12l,
           cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\b,
           cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
           cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
           cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
           dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K,
           flash=\E[?5h$<200>\E[?5l, fsl=\E8, home=\E[H, ht=\t,
           ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\ED, .ind=\ED$<9>,
           invis=\E[8m,


   8/91                                                                Page 17









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


           is1=\E[8;0 | \E[?3;4;5;13;15l\E[13;20l\E[?7h\E[12h\E(B\E)0,
           is2=\E[0m^O, is3=\E(B\E)0, kLFT=\E[\s@, kRIT=\E[\sA,
           kbs=^H, kcbt=\E[Z, kclr=\E[2J, kcub1=\E[D, kcud1=\E[B,
           kcuf1=\E[C, kcuu1=\E[A, kf1=\EOc, kf10=\ENp,
           kf11=\ENq, kf12=\ENr, kf13=\ENs, kf14=\ENt, kf2=\EOd,
           kf3=\EOe, kf4=\EOf, kf5=\EOg, kf6=\EOh, kf7=\EOi,
           kf8=\EOj, kf9=\ENo, khome=\E[H, kind=\E[S, kri=\E[T,
           ll=\E[24H, mc4=\E[?4i, mc5=\E[?5i, nel=\EE,
           pfxl=\E[%p1%d;%p2%l%02dq%?%p1%{9}%<%t\s\s\sF%p1%1d\s\s\s\s\s
         \s\s\s\s\s\s%;%p2%s,
           pln=\E[%p1%d;0;0;0q%p2%:-16.16s, rc=\E8, rev=\E[7m,
           ri=\EM, rmacs=^O, rmir=\E[4l, rmln=\E[2p, rmso=\E[m,
           rmul=\E[m, rs2=\Ec\E[?3l, sc=\E7,
           sgr=\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p4%t;5%;
         %?%p3%p1% | %t;7%;%?%p7%t;8%;m%?%p9%t^N%e^O%;,
           sgr0=\E[m^O, smacs=^N, smir=\E[4h, smln=\E[p,
           smso=\E[7m, smul=\E[4m, tsl=\E7\E[25;%i%p1%dx,

      Types of Capabilities in the Sample Entry
         The sample entry shows the formats for the three types of terminfo
         capabilities listed:  Boolean, numeric, and string.  All capabilities
         specified in the terminfo source file must be followed by commas,
         including the last capability in the source file.  In terminfo source
         files, capabilities are referenced by their capability names (as
         shown in the previous tables).

         Boolean capabilities are specified simply by their comma separated
         cap names.

         Numeric capabilities are followed by the character `#' and then a
         positive integer value.  Thus, in the sample, cols (which shows the
         number of columns available on a device) is assigned the value 80 for
         the AT&T 610.  (Values for numeric capabilities may be specified in
         decimal, octal, or hexadecimal, using normal C programming language
         conventions.)

         Finally, string-valued capabilities such as el (clear to end of line
         sequence) are listed by a two- to five-character capname, an `=', and
         a string ended by the next occurrence of a comma.  A delay in
         milliseconds may appear anywhere in such a capability, preceded by $
         and enclosed in angle brackets, as in el=\EK$<3>.  Padding characters
         are supplied by tput.  The delay can be any of the following:  a
         number, a number followed by an asterisk, such as 5*, a number
         followed by a slash, such as 5/, or a number followed by both, such
         as 5*/.  A `*' shows that the padding required is proportional to the
         number of lines affected by the operation, and the amount given is
         the per-affected-unit padding required.  (In the case of insert
         characters, the factor is still the number of lines affected.  This
         is always 1 unless the device has in and the software uses it.)  When
         a `*' is specified, it is sometimes useful to give a delay of the
         form 3.5 to specify a delay per unit to tenths of milliseconds.


   Page 18                                                                8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         (Only one decimal place is allowed.)

         A `/' indicates that the padding is mandatory.  If a device has xon
         defined, the padding information is advisory and will only be used
         for cost estimates or when the device is in raw mode.  Mandatory
         padding will be transmitted regardless of the setting of xon.  If
         padding (whether advisory or mandatory) is specified for bel or
         flash, however, it will always be used, regardless of whether xon is
         specified.

         terminfo offers notation for encoding special characters.  Both \E
         and \e map to an ESCAPE character, ^x maps to a control x for any
         appropriate x, and the sequences \n, \l, \r, \t, \b, \f, and \s give
         a newline, linefeed, return, tab, backspace, formfeed, and space,
         respectively.  Other escapes include: \^ for caret (^); \\ for
         backslash (\); \, for comma (,); \: for colon (:); and \0 for null.
         (\0 will actually produce \200, which does not terminate a string but
         behaves as a null character on most devices, providing CS7 is
         specified.  [See stty(1).]  Finally, characters may be given as three
         octal digits after a backslash (e.g., \123).

         Sometimes individual capabilities must be commented out.  To do this,
         put a period before the capability name.  For example, see the second
         ind in the example above.  Note that capabilities are defined in a
         left-to-right order and, therefore, a prior definition will override
         a later definition.

      Preparing Descriptions
         The most effective way to prepare a device description is by
         imitating the description of a similar device in terminfo and
         building up a description gradually, using partial descriptions with
         vi to check that they are correct.  Be aware that a very unusual
         device may expose deficiencies in the ability of the terminfo file to
         describe it or the inability of vi to work with that device.  To test
         a new device description, set the environment variable TERMINFO to
         the pathname of a directory containing the compiled description you
         are working on and programs will look there rather than in
         /usr/share/lib/terminfo.  To get the padding for insert-line correct
         (if the device manufacturer did not document it) a severe test is to
         comment out xon, edit a large file at 9600 baud with vi, delete 16 or
         so lines from the middle of the screen, and then press the u key
         several times quickly.  If the display is corrupted, more padding is
         usually needed.  A similar test can be used for insert-character.


      Section 1-1: Basic Capabilities
         The number of columns on each line for the device is given by the
         cols numeric capability.  If the device has a screen, then the number
         of lines on the screen is given by the lines capability.  If the
         device wraps around to the beginning of the next line when it reaches
         the right margin, then it should have the am capability.  If the


   8/91                                                                Page 19









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         terminal can clear its screen, leaving the cursor in the home
         position, then this is given by the clear string capability.  If the
         terminal overstrikes (rather than clearing a position when a
         character is struck over) then it should have the os capability.  If
         the device is a printing terminal, with no soft copy unit, specify
         both hc and os.  If there is a way to move the cursor to the left
         edge of the current row, specify this as cr.  (Normally this will be
         carriage return, control M.)  If there is a way to produce an audible
         signal (such as a bell or a beep), specify it as bel.  If, like most
         devices, the device uses the xon-xoff flow-control protocol, specify
         xon.

         If there is a way to move the cursor one position to the left (such
         as backspace), that capability should be given as cub1.  Similarly,
         sequences to move to the right, up, and down should be given as cuf1,
         cuu1, and cud1, respectively.  These local cursor motions must not
         alter the text they pass over; for example, you would not normally
         use ``cuf1=\s'' because the space would erase the character moved
         over.

         A very important point here is that the local cursor motions encoded
         in terminfo are undefined at the left and top edges of a screen
         terminal.  Programs should never attempt to backspace around the left
         edge, unless bw is specified, and should never attempt to go up
         locally off the top.  To scroll text up, a program goes to the bottom
         left corner of the screen and sends the ind (index) string.

         To scroll text down, a program goes to the top left corner of the
         screen and sends the ri (reverse index) string.  The strings ind and
         ri are undefined when not on their respective corners of the screen.

         Parameterized versions of the scrolling sequences are indn and rin.
         These versions have the same semantics as ind and ri, except that
         they take one parameter and scroll the number of lines specified by
         that parameter.  They are also undefined except at the appropriate
         edge of the screen.

         The am capability tells whether the cursor sticks at the right edge
         of the screen when text is output, but this does not necessarily
         apply to a cuf1 from the last column.  Backward motion from the left
         edge of the screen is possible only when bw is specified.  In this
         case, cub1 will move to the right edge of the previous row.  If bw is
         not given, the effect is undefined.  This is useful for drawing a box
         around the edge of the screen, for example.  If the device has switch
         selectable automatic margins, am should be specified in the terminfo
         source file.  In this case, initialization strings should turn on
         this option, if possible.  If the device has a command that moves to
         the first column of the next line, that command can be given as nel
         (newline).  It does not matter if the command clears the remainder of
         the current line, so if the device has no cr and lf it may still be
         possible to craft a working nel out of one or both of them.


   Page 20                                                                8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         These capabilities suffice to describe hardcopy and screen terminals.
         Thus the AT&T 5320 hardcopy terminal is described as follows:

            5320|att5320|AT&T 5320 hardcopy terminal,
             am, hc, os,
             cols#132,
             bel=^G, cr=\r, cub1=\b, cnd1=\n,
             dch1=\E[P, dl1=\E[M,
             ind=\n,

         while the Lear Siegler ADM-3 is described as

            adm3|lsi adm3,
            am, bel=^G, clear=^Z, cols#80, cr=^M, cub1=^H,
            cud1=^J, ind=^J, lines#24,

      Section 1-2: Parameterized Strings
         Cursor addressing and other strings requiring parameters are
         described by a parameterized string capability, with printf-like
         escapes (%x) in it.  For example, to address the cursor, the cup
         capability is given, using two parameters:  the row and column to
         address to.  (Rows and columns are numbered from zero and refer to
         the physical screen visible to the user, not to any unseen memory.)
         If the terminal has memory relative cursor addressing, that can be
         indicated by mrcup.

         The parameter mechanism uses a stack and special % codes to
         manipulate the stack in the manner of Reverse Polish Notation
         (postfix).  Typically a sequence will push one of the parameters onto
         the stack and then print it in some format.  Often more complex
         operations are necessary.  Operations are in postfix form with the
         operands in the usual order.  That is, to subtract 5 from the first
         parameter, one would use %p1%{5}%-.

         The % encodings have the following meanings:

         %%    outputs `%'

         %[[:]flags][width[.precision]][doxXs]
               as in printf, flags are [-+#] and space





         %c    print pop gives %c







   8/91                                                                Page 21









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         %p[1-9]
               push ith parm

         %P[a-z]
               set dynamic variable [a-z] to pop

         %g[a-z]
               get dynamic variable [a-z] and push it

         %P[A-Z]
               set static variable [a-z] to pop

         %g[A-Z]
               get static variable [a-z] and push it

         %'c'  push char constant c

         %{nn} push decimal constant nn

         %l    push strlen(pop)

         %+ %- %* %/ %m
               arithmetic (%m is mod):  push(pop integer2 op pop integer1)

         %& %| %^
               bit operations:  push(pop integer2 op pop integer1)

         %= %> %<
               logical operations:  push(pop integer2 op pop integer1)

         %A %O logical operations:  and, or

         %! %~ unary operations:  push(op pop)

         %i    (for ANSI terminals) add 1 to first parm, if one parm present,
               or first two parms, if more than one parm present

         %? expr %t thenpart %e elsepart %;
               if-then-else, %e elsepart is optional; else-if's are possible
               ala Algol 68:  %? c1 %t b1 %e c2 %t b2 %e c3 %t b3 %e c4 %t b4
               %e b5%;
               ci are conditions, bi are bodies.



         If the ``-'' flag is used with ``%[doxXs]'', then a colon (:) must be
         placed between the ``%'' and the ``-'' to differentiate the flag from
         the binary ``%-'' operator, e.g. ``%:-16.16s''.





   Page 22                                                                8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         Consider the Hewlett-Packard 2645, which, to get to row 3 and column
         12, needs to be sent \E&a12c03Y padded for 6 milliseconds.  Note that
         the order of the rows and columns is inverted here, and that the row
         and column are zero-padded as two digits.  Thus its cup capability
         is:
                            cup=\E&a%p2%2.2dc%p1%2.2dY$<6>

         The Micro-Term ACT-IV needs the current row and column sent preceded
         by a ^T, with the row and column simply encoded in binary,
         ``cup=^T%p1%c%p2%c''.  Devices that use ``%c'' need to be able to
         backspace the cursor (cub1), and to move the cursor up one line on
         the screen (cuu1).  This is necessary because it is not always safe
         to transmit \n, ^D, and \r, as the system may change or discard them.
         (The library routines dealing with terminfo set tty modes so that
         tabs are never expanded, so \t is safe to send.  This turns out to be
         essential for the Ann Arbor 4080.)

         A final example is the LSI ADM-3a, which uses row and column offset
         by a blank character, thus ``cup=\E=%p1%'\s'%+%c%p2%'\s'%+%c''.
         After sending ``\E='', this pushes the first parameter, pushes the
         ASCII value for a space (32), adds them (pushing the sum on the stack
         in place of the two previous values), and outputs that value as a
         character.  Then the same is done for the second parameter.  More
         complex arithmetic is possible using the stack.

      Section 1-3: Cursor Motions
         If the terminal has a fast way to home the cursor (to very upper left
         corner of screen) then this can be given as home; similarly a fast
         way of getting to the lower left-hand corner can be given as ll; this
         may involve going up with cuu1 from the home position, but a program
         should never do this itself (unless ll does) because it can make no
         assumption about the effect of moving up from the home position.
         Note that the home position is the same as addressing to (0,0):  to
         the top left corner of the screen, not of memory.  (Thus, the \EH
         sequence on Hewlett-Packard terminals cannot be used for home without
         losing some of the other features on the terminal.)

         If the device has row or column absolute-cursor addressing, these can
         be given as single parameter capabilities hpa (horizontal position
         absolute) and vpa (vertical position absolute).  Sometimes these are
         shorter than the more general two-parameter sequence (as with the
         Hewlett-Packard 2645) and can be used in preference to cup.  If there
         are parameterized local motions (e.g., move n spaces to the right)
         these can be given as cud, cub, cuf, and cuu with a single parameter
         indicating how many spaces to move.  These are primarily useful if
         the device does not have cup, such as the Tektronix 4025.



         If the device needs to be in a special mode when running a program
         that uses these capabilities, the codes to enter and exit this mode


   8/91                                                                Page 23









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         can be given as smcup and rmcup.  This arises, for example, from
         terminals, such as the Concept, with more than one page of memory.
         If the device has only memory relative cursor addressing and not
         screen relative cursor addressing, a one screen-sized window must be
         fixed into the device for cursor addressing to work properly.  This
         is also used for the Tektronix 4025, where smcup sets the command
         character to be the one used by terminfo.  If the smcup sequence will
         not restore the screen after an rmcup sequence is output (to the
         state prior to outputting rmcup), specify nrrmc.

      Section 1-4: Area Clears
         If the terminal can clear from the current position to the end of the
         line, leaving the cursor where it is, this should be given as el.  If
         the terminal can clear from the beginning of the line to the current
         position inclusive, leaving the cursor where it is, this should be
         given as el1.  If the terminal can clear from the current position to
         the end of the display, then this should be given as ed.  ed is only
         defined from the first column of a line.  (Thus, it can be simulated
         by a request to delete a large number of lines, if a true ed is not
         available.)

      Section 1-5: Insert/Delete Line
         If the terminal can open a new blank line before the line where the
         cursor is, this should be given as il1; this is done only from the
         first position of a line.  The cursor must then appear on the newly
         blank line.  If the terminal can delete the line which the cursor is
         on, then this should be given as dl1; this is done only from the
         first position on the line to be deleted.  Versions of il1 and dl1
         which take a single parameter and insert or delete that many lines
         can be given as il and dl.

         If the terminal has a settable destructive scrolling region (like the
         VT100) the command to set this can be described with the csr
         capability, which takes two parameters:  the top and bottom lines of
         the scrolling region.  The cursor position is, alas, undefined after
         using this command.  It is possible to get the effect of insert or
         delete line using this command - the sc and rc (save and restore
         cursor) commands are also useful.  Inserting lines at the top or
         bottom of the screen can also be done using ri or ind on many
         terminals without a true insert/delete line, and is often faster even
         on terminals with those features.


         To determine whether a terminal has destructive scrolling regions or
         non-destructive scrolling regions, create a scrolling region in the
         middle of the screen, place data on the bottom line of the scrolling
         region, move the cursor to the top line of the scrolling region, and
         do a reverse index (ri) followed by a delete line (dl1) or index
         (ind).  If the data that was originally on the bottom line of the
         scrolling region was restored into the scrolling region by the dl1 or
         ind, then the terminal has non-destructive scrolling regions.


   Page 24                                                                8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         Otherwise, it has destructive scrolling regions.  Do not specify csr
         if the terminal has non-destructive scrolling regions, unless ind,
         ri, indn, rin, dl, and dl1 all simulate destructive scrolling.

         If the terminal has the ability to define a window as part of memory,
         which all commands affect, it should be given as the parameterized
         string wind.  The four parameters are the starting and ending lines
         in memory and the starting and ending columns in memory, in that
         order.

         If the terminal can retain display memory above, then the da
         capability should be given; if display memory can be retained below,
         then db should be given.  These indicate that deleting a line or
         scrolling a full screen may bring non-blank lines up from below or
         that scrolling back with ri may bring down non-blank lines.

      Section 1-6: Insert/Delete Character
         There are two basic kinds of intelligent terminals with respect to
         insert/delete character operations which can be described using
         terminfo.  The most common insert/delete character operations affect
         only the characters on the current line and shift characters off the
         end of the line rigidly.  Other terminals, such as the Concept 100
         and the Perkin Elmer Owl, make a distinction between typed and
         untyped blanks on the screen, shifting upon an insert or delete only
         to an untyped blank on the screen which is either eliminated, or
         expanded to two untyped blanks.  You can determine the kind of
         terminal you have by clearing the screen and then typing text
         separated by cursor motions.  Type ``abc    def'' using local cursor
         motions (not spaces) between the abc and the def.  Then position the
         cursor before the abc and put the terminal in insert mode.  If typing
         characters causes the rest of the line to shift rigidly and
         characters to fall off the end, then your terminal does not
         distinguish between blanks and untyped positions.  If the abc shifts
         over to the def which then move together around the end of the
         current line and onto the next as you insert, you have the second
         type of terminal, and should give the capability in, which stands for
         ``insert null.''  While these are two logically separate attributes
         (one line versus multiline insert mode, and special treatment of
         untyped spaces) we have seen no terminals whose insert mode cannot be
         described with the single attribute.



         terminfo can describe both terminals that have an insert mode and
         terminals which send a simple sequence to open a blank position on
         the current line.  Give as smir the sequence to get into insert mode.
         Give as rmir the sequence to leave insert mode.  Now give as ich1 any
         sequence needed to be sent just before sending the character to be
         inserted.  Most terminals with a true insert mode will not give ich1;
         terminals that send a sequence to open a screen position should give
         it here.  (If your terminal has both, insert mode is usually


   8/91                                                                Page 25









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         preferable to ich1.  Do not give both unless the terminal actually
         requires both to be used in combination.)  If post-insert padding is
         needed, give this as a number of milliseconds padding in ip (a string
         option).  Any other sequence which may need to be sent after an
         insert of a single character may also be given in ip.  If your
         terminal needs both to be placed into an `insert mode' and a special
         code to precede each inserted character, then both smir/rmir and ich1
         can be given, and both will be used.  The ich capability, with one
         parameter, n, will insert n blanks.

         If padding is necessary between characters typed while not in insert
         mode, give this as a number of milliseconds padding in rmp.

         It is occasionally necessary to move around while in insert mode to
         delete characters on the same line (e.g., if there is a tab after the
         insertion position).  If your terminal allows motion while in insert
         mode you can give the capability mir to speed up inserting in this
         case.  Omitting mir will affect only speed.  Some terminals (notably
         Datamedia's) must not have mir because of the way their insert mode
         works.

         Finally, you can specify dch1 to delete a single character, dch with
         one parameter, n, to delete n characters, and delete mode by giving
         smdc and rmdc to enter and exit delete mode (any mode the terminal
         needs to be placed in for dch1 to work).

         A command to erase n characters (equivalent to outputting n blanks
         without moving the cursor) can be given as ech with one parameter.

      Section 1-7: Highlighting, Underlining, and Visible Bells
         Your device may have one or more kinds of display attributes that
         allow you to highlight selected characters when they appear on the
         screen.  The following display modes (shown with the names by which
         they are set) may be available:  a blinking screen (blink), bold or
         extra-bright characters (bold), dim or half-bright characters (dim),
         blanking or invisible text (invis), protected text (prot), a
         reverse-video screen (rev), and an alternate character set (smacs to
         enter this mode and rmacs to exit it).  (If a command is necessary
         before you can enter alternate character set mode, give the sequence
         in enacs or "enable alternate-character-set" mode.)  Turning on any
         of these modes singly may or may not turn off other modes.


         sgr0 should be used to turn off all video enhancement capabilities.
         It should always be specified because it represents the only way to
         turn off some capabilities, such as dim or blink.



         You should choose one display method as standout mode [see
         curses(3X)] and use it to highlight error messages and other kinds of


   Page 26                                                                8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         text to which you want to draw attention.  Choose a form of display
         that provides strong contrast but that is easy on the eyes.  (We
         recommend reverse-video plus half-bright or reverse-video alone.)
         The sequences to enter and exit standout mode are given as smso and
         rmso, respectively.  If the code to change into or out of standout
         mode leaves one or even two blank spaces on the screen, as the TVI
         912 and Teleray 1061 do, then xmc should be given to tell how many
         spaces are left.

         Sequences to begin underlining and end underlining can be specified
         as smul and rmul , respectively.  If the device has a sequence to
         underline the current character and to move the cursor one space to
         the right (such as the Micro-Term MIME), this sequence can be
         specified as uc.

         Terminals with the ``magic cookie'' glitch (xmc) deposit special
         ``cookies'' when they receive mode-setting sequences, which affect
         the display algorithm rather than having extra bits for each
         character.  Some terminals, such as the Hewlett-Packard 2621,
         automatically leave standout mode when they move to a new line or the
         cursor is addressed.  Programs using standout mode should exit
         standout mode before moving the cursor or sending a newline, unless
         the msgr capability, asserting that it is safe to move in standout
         mode, is present.

         If the terminal has a way of flashing the screen to indicate an error
         quietly (a bell replacement), then this can be given as flash; it
         must not move the cursor.  A good flash can be done by changing the
         screen into reverse video, pad for 200 ms, then return the screen to
         normal video.

         If the cursor needs to be made more visible than normal when it is
         not on the bottom line (to make, for example, a non-blinking
         underline into an easier to find block or blinking underline) give
         this sequence as cvvis.  The boolean chts should also be given.  If
         there is a way to make the cursor completely invisible, give that as
         civis.  The capability cnorm should be given which undoes the effects
         of either of these modes.

         If your terminal generates underlined characters by using the
         underline character (with no special sequences needed) even though it
         does not otherwise overstrike characters, then you should specify the
         capability ul.  For devices on which a character overstriking another
         leaves both characters on the screen, specify the capability os.  If
         overstrikes are erasable with a blank, then this should be indicated
         by specifying eo.



         If there is a sequence to set arbitrary combinations of modes, this
         should be given as sgr (set attributes), taking nine parameters.


   8/91                                                                Page 27









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         Each parameter is either 0 or non-zero, as the corresponding
         attribute is on or off.  The nine parameters are, in order:
         standout, underline, reverse, blink, dim, bold, blank, protect,
         alternate character set.  Not all modes need to be supported by sgr;
         only those for which corresponding separate attribute commands exist
         should be supported.  For example, let's assume that the terminal in
         question needs the following escape sequences to turn on various
         modes.
                       tparm
                     parameter     attribute      escape sequence
                                   none           \E[0m
                        p1         standout       \E[0;4;7m
                        p2         underline      \E[0;3m
                        p3         reverse        \E[0;4m
                        p4         blink          \E[0;5m
                        p5         dim            \E[0;7m
                        p6         bold           \E[0;3;4m
                        p7         invis          \E[0;8m
                        p8         protect        not available
                        p9         altcharset     ^O (off) ^N (on)

         Note that each escape sequence requires a 0 to turn off other modes
         before turning on its own mode.  Also note that, as suggested above,
         standout is set up to be the combination of reverse and dim.  Also,
         because this terminal has no bold mode, bold is set up as the
         combination of reverse and underline.  In addition, to allow
         combinations, such as underline+blink, the sequence to use would be
         \E[0;3;5m.  The terminal doesn't have protect mode, either, but that
         cannot be simulated in any way, so p8 is ignored.  The altcharset
         mode is different in that it is either ^O or ^N, depending on whether
         it is off or on.  If all modes were to be turned on, the sequence
         would be \E[0;3;4;5;7;8m^N.

         Now look at when different sequences are output.  For example, ;3 is
         output when either p2 or p6 is true, that is, if either underline or
         bold modes are turned on.  Writing out the above sequences, along
         with their dependencies, gives the following:






               sequence      when to output       terminfo translation
               \E[0         always                \E[0
               ;3           if p2 or p6           %?%p2%p6%|%t;3%;
               ;4           if p1 or p3 or p6     %?%p1%p3%|%p6%|%t;4%;
               ;5           if p4                 %?%p4%t;5%;
               ;7           if p1 or p5           %?%p1%p5%|%t;7%;
               ;8           if p7                 %?%p7%t;8%;
               m            always                m


   Page 28                                                                8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


               ^N or ^O     if p9 ^N, else ^O     %?%p9%t^N%e^O%;

         Putting this all together into the sgr sequence gives:

         sgr=\E[0%?%p2%p6%|%t;3%;%?%p1%p3%|%p6%
             |%t;4%;%?%p5%t;5%;%?%p1%p5%
             |%t;7%;%?%p7%t;8%;m%?%p9%t^N%e^O%;,

         Remember that sgr and sgr0 must always be specified.

      Section 1-8: Keypad
         If the device has a keypad that transmits sequences when the keys are
         pressed, this information can also be specified.  Note that it is not
         possible to handle devices where the keypad only works in local (this
         applies, for example, to the unshifted Hewlett-Packard 2621 keys).
         If the keypad can be set to transmit or not transmit, specify these
         sequences as smkx and rmkx.  Otherwise the keypad is assumed to
         always transmit.

         The sequences sent by the left arrow, right arrow, up arrow, down
         arrow, and home keys can be given as kcub1, kcuf1, kcuu1, kcud1, and
         khome, respectively.  If there are function keys such as f0, f1, ...,
         f63, the sequences they send can be specified as kf0, kf1, ..., kf63.
         If the first 11 keys have labels other than the default f0 through
         f10, the labels can be given as lf0, lf1, ..., lf10.  The codes
         transmitted by certain other special keys can be given:  kll (home
         down), kbs (backspace), ktbc (clear all tabs), kctab (clear the tab
         stop in this column), kclr (clear screen or erase key), kdch1 (delete
         character), kdl1 (delete line), krmir (exit insert mode), kel (clear
         to end of line), ked (clear to end of screen), kich1 (insert
         character or enter insert mode), kil1 (insert line), knp (next page),
         kpp (previous page), kind (scroll forward/down), kri (scroll
         backward/up), khts (set a tab stop in this column).  In addition, if
         the keypad has a 3 by 3 array of keys including the four arrow keys,
         the other five keys can be given as ka1, ka3, kb2, kc1, and kc3.
         These keys are useful when the effects of a 3 by 3 directional pad
         are needed.  Further keys are defined above in the capabilities list.

         Strings to program function keys can be specified as pfkey, pfloc,
         and pfx.  A string to program screen labels should be specified as
         pln.  Each of these strings takes two parameters: a function key
         identifier and a string to program it with.  pfkey causes pressing
         the given key to be the same as the user typing the given string;
         pfloc causes the string to be executed by the terminal in local mode;
         and pfx causes the string to be transmitted to the computer.  The
         capabilities nlab, lw and lh define the number of programmable screen
         labels and their width and height.  If there are commands to turn the
         labels on and off, give them in smln and rmln.  smln is normally
         output after one or more pln sequences to make sure that the change
         becomes visible.



   8/91                                                                Page 29









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


      Section 1-9: Tabs and Initialization
         If the device has hardware tabs, the command to advance to the next
         tab stop can be given as ht (usually control I).  A ``backtab''
         command that moves leftward to the next tab stop can be given as cbt.
         By convention, if tty modes show that tabs are being expanded by the
         computer rather than being sent to the device, programs should not
         use ht or cbt (even if they are present) because the user may not
         have the tab stops properly set.  If the device has hardware tabs
         that are initially set every n spaces when the device is powered up,
         the numeric parameter it is given, showing the number of spaces the
         tabs are set to.  This is normally used by tput init [see tput(1)] to
         determine whether to set the mode for hardware tab expansion and
         whether to set the tab stops.  If the device has tab stops that can
         be saved in nonvolatile memory, the terminfo description can assume
         that they are properly set.  If there are commands to set and clear
         tab stops, they can be given as tbc (clear all tab stops) and hts
         (set a tab stop in the current column of every row).

         Other capabilities include:  is1, is2, and is3, initialization
         strings for the device; iprog, the path name of a program to be run
         to initialize the device; and if, the name of a file containing long
         initialization strings.  These strings are expected to set the device
         into modes consistent with the rest of the terminfo description.
         They must be sent to the device each time the user logs in and be
         output in the following order:  run the program iprog; output is1;
         output is2; set the margins using mgc, smgl and smgr; set the tabs
         using tbc and hts; print the file if; and finally output is3.  This
         is usually done using the init option of tput.

         Most initialization is done with is2.  Special device modes can be
         set up without duplicating strings by putting the common sequences in
         is2 and special cases in is1 and is3.  Sequences that do a reset from
         a totally unknown state can be given as rs1, rs2, rf, and rs3,
         analogous to is1, is2, is3, and if.  (The method using files, if and
         rf, is used for a few terminals, from /usr/share/lib/tabset/*;
         however, the recommended method is to use the initialization and
         reset strings.)  These strings are output by tput reset, which is
         used when the terminal gets into a wedged state.  Commands are
         normally placed in rs1, rs2, rs3, and rf only if they produce
         annoying effects on the screen and are not necessary when logging in.
         For example, the command to set a terminal into 80-column mode would
         normally be part of is2, but on some terminals it causes an annoying
         glitch on the screen and is not normally needed because the terminal
         is usually already in 80-column mode.



         If a more complex sequence is needed to set the tabs than can be
         described by using tbc and hts, the sequence can be placed in is2 or
         if.



   Page 30                                                                8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         Any margin can be cleared with mgc.  (For instructions on how to
         specify commands to set and clear margins, see "Margins" below under
         "PRINTER CAPABILITIES.")

      Section 1-10: Delays
         Certain capabilities control padding in the tty driver.  These are
         primarily needed by hard-copy terminals, and are used by tput init to
         set tty modes appropriately.  Delays embedded in the capabilities cr,
         ind, cub1, ff, and tab can be used to set the appropriate delay bits
         to be set in the tty driver.  If pb (padding baud rate) is given,
         these values can be ignored at baud rates below the value of pb.

      Section 1-11: Status Lines
         If the terminal has an extra ``status line'' that is not normally
         used by software, this fact can be indicated.  If the status line is
         viewed as an extra line below the bottom line, into which one can
         cursor address normally (such as the Heathkit h19's 25th line, or the
         24th line of a VT100 which is set to a 23-line scrolling region), the
         capability hs should be given.  Special strings that go to a given
         column of the status line and return from the status line can be
         given as tsl and fsl.  (fsl must leave the cursor position in the
         same place it was before tsl.  If necessary, the sc and rc strings
         can be included in tsl and fsl to get this effect.)  The capability
         tsl takes one parameter, which is the column number of the status
         line the cursor is to be moved to.

         If escape sequences and other special commands, such as tab, work
         while in the status line, the flag eslok can be given.  A string
         which turns off the status line (or otherwise erases its contents)
         should be given as dsl.  If the terminal has commands to save and
         restore the position of the cursor, give them as sc and rc.  The
         status line is normally assumed to be the same width as the rest of
         the screen, e.g., cols.  If the status line is a different width
         (possibly because the terminal does not allow an entire line to be
         loaded) the width, in columns, can be indicated with the numeric
         parameter wsl.

      Section 1-12: Line Graphics
         If the device has a line drawing alternate character set, the mapping
         of glyph to character would be given in acsc.  The definition of this
         string is based on the alternate character set used in the DEC VT100
         terminal, extended slightly with some characters from the AT&T 4410v1
         terminal.




                                                     vt100+
                          glyph name                character
                          arrow pointing right          +
                          arrow pointing left           ,


   8/91                                                                Page 31









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


                          arrow pointing down           .
                          solid square block            0
                          lantern symbol                I
                          arrow pointing up             -
                          diamond                       `
                          checker board (stipple)       a
                          degree symbol                 f
                          plus/minus                    g
                          board of squares              h
                          lower right corner            j
                          upper right corner            k
                          upper left corner             l
                          lower left corner             m
                          plus                          n
                          scan line 1                   o
                          horizontal line               q
                          scan line 9                   s
                          left tee (†)                  t
                          right tee (-|)                u
                          bottom tee (|)                v
|)                   w    top tee (
                          vertical line                 x
                          bullet                        ~

         The best way to describe a new device's line graphics set is to add a
         third column to the above table with the characters for the new
         device that produce the appropriate glyph when the device is in the
         alternate character set mode.  For example,

                                              vt100+   new tty
                         glyph name            char     char
                         upper left corner      l         R
                         lower left corner      m         F
                         upper right corner     k         T
                         lower right corner     j         G
                         horizontal line        q         ,
                         vertical line          x         .

         Now write down the characters left to right, as in
         ``acsc=lRmFkTjGq\,x.''.



         In addition, terminfo allows you to define multiple character sets.
         See Section 2-5 for details.


      Section 1-13: Color Manipulation
         Let us define two methods of color manipulation:  the Tektronix
         method and the HP method.  The Tektronix method uses a set of N
         predefined colors (usually 8) from which a user can select "current"


   Page 32                                                                8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         foreground and background colors.  Thus a terminal can support up to
         N colors mixed into N*N color-pairs to be displayed on the screen at
         the same time.  When using an HP method the user cannot define the
         foreground independently of the background, or vice-versa.  Instead,
         the user must define an entire color-pair at once.  Up to M color-
         pairs, made from 2*M different colors, can be defined this way.  Most
         existing color terminals belong to one of these two classes of
         terminals.

         The numeric variables colors and pairs define the number of colors
         and color-pairs that can be displayed on the screen at the same time.
         If a terminal can change the definition of a color (for example, the
         Tektronix 4100 and 4200 series terminals), this should be specified
         with ccc (can change color).  To change the definition of a color
         (Tektronix 4200 method), use initc (initialize color).  It requires
         four arguments:  color number (ranging from 0 to colors-1) and three
         RGB (red, green, and blue) values or three HLS colors (Hue,
         Lightness, Saturation).  Ranges of RGB and HLS values are terminal
         dependent.

         Tektronix 4100 series terminals only use HLS color notation.  For
         such terminals (or dual-mode terminals to be operated in HLS mode)
         one must define a boolean variable hls; that would instruct the
         curses initcolor routine to convert its RGB arguments to HLS before
         sending them to the terminal.  The last three arguments to the initc
         string would then be HLS values.

         If a terminal can change the definitions of colors, but uses a color
         notation different from RGB and HLS, a mapping to either RGB or HLS
         must be developed.

         To set current foreground or background to a given color, use setaf
         (set ANSI foreground) and setab (set ANSI background).  They require
         one parameter:  the number of the color.  To initialize a color-pair
         (HP method), use initp (initialize pair).  It requires seven
         parameters:  the number of a color-pair (range=0 to pairs-1), and six
         RGB values:  three for the foreground followed by three for the
         background.  (Each of these groups of three should be in the order
         RGB.)  When initc or initp are used, RGB or HLS arguments should be
         in the order "red, green, blue" or "hue, lightness, saturation"),
         respectively.  To make a color-pair current, use scp (set color-
         pair).  It takes one parameter, the number of a color-pair.



         Some terminals (for example, most color terminal emulators for PCs)
         erase areas of the screen with current background color.  In such
         cases, bce (background color erase) should be defined.  The variable
         op (original pair) contains a sequence for setting the foreground and
         the background colors to what they were at the terminal start-up
         time.  Similarly, oc (original colors) contains a control sequence


   8/91                                                                Page 33









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         for setting all colors (for the Tektronix method) or color-pairs (for
         the HP method) to the values they had at the terminal start-up time.

         Some color terminals substitute color for video attributes.  Such
         video attributes should not be combined with colors.  Information
         about these video attributes should be packed into the ncv (no color
         video) variable.  There is a one-to-one correspondence between the
         nine least significant bits of that variable and the video
         attributes.  The following table depicts this correspondence.

                                            Bit      Decimal
                            Attribute     Position    Value
                           _________________________________
                           ASTANDOUT        0           1
                           AUNDERLINE       1           2
                           AREVERSE         2           4
                           ABLINK           3           8
                           ADIM             4          16
                           ABOLD            5          32
                           AINVIS           6          64
                           APROTECT         7         128
                           AALTCHARSET      8         256

         When a particular video attribute should not be used with colors, the
         corresponding ncv bit should be set to 1; otherwise it should be set
         to zero.  To determine the information to pack into the ncv variable,
         you must add together the decimal values corresponding to those
         attributes that cannot coexist with colors.  For example, if the
         terminal uses colors to simulate reverse video (bit number 2 and
         decimal value 4) and bold (bit number 5 and decimal value 32), the
         resulting value for ncv will be 36 (4 + 32).

      Section 1-14: Miscellaneous
         If the terminal requires other than a null (zero) character as a pad,
         then this can be given as pad.  Only the first character of the pad
         string is used.  If the terminal does not have a pad character,
         specify npc.

         If the terminal can move up or down half a line, this can be
         indicated with hu (half-line up) and hd (half-line down).  This is
         primarily useful for superscripts and subscripts on hardcopy
         terminals.  If a hardcopy terminal can eject to the next page (form
         feed), give this as ff (usually control L).


         If there is a command to repeat a given character a given number of
         times (to save time transmitting a large number of identical
         characters) this can be indicated with the parameterized string rep.
         The first parameter is the character to be repeated and the second is
         the number of times to repeat it.  Thus, tparm(repeatchar, 'x', 10)
         is the same as xxxxxxxxxx.


   Page 34                                                                8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         If the terminal has a settable command character, such as the
         Tektronix 4025, this can be indicated with cmdch.  A prototype
         command character is chosen which is used in all capabilities.  This
         character is given in the cmdch capability to identify it.  The
         following convention is supported on some UNIX systems:  If the
         environment variable CC exists, all occurrences of the prototype
         character are replaced with the character in CC.

         Terminal descriptions that do not represent a specific kind of known
         terminal, such as switch, dialup, patch, and network, should include
         the gn (generic) capability so that programs can complain that they
         do not know how to talk to the terminal.  (This capability does not
         apply to virtual terminal descriptions for which the escape sequences
         are known.)  If the terminal is one of those supported by the UNIX
         system virtual terminal protocol, the terminal number can be given as
         vt.  A line-turn-around sequence to be transmitted before doing reads
         should be specified in rfi.

         If the device uses xon/xoff handshaking for flow control, give xon.
         Padding information should still be included so that routines can
         make better decisions about costs, but actual pad characters will not
         be transmitted.  Sequences to turn on and off xon/xoff handshaking
         may be given in smxon and rmxon.  If the characters used for
         handshaking are not ^S and ^Q, they may be specified with xonc and
         xoffc.

         If the terminal has a ``meta key'' which acts as a shift key, setting
         the 8th bit of any character transmitted, this fact can be indicated
         with km.  Otherwise, software will assume that the 8th bit is parity
         and it will usually be cleared.  If strings exist to turn this ``meta
         mode'' on and off, they can be given as smm and rmm.

         If the terminal has more lines of memory than will fit on the screen
         at once, the number of lines of memory can be indicated with lm.  A
         value of lm#0 indicates that the number of lines is not fixed, but
         that there is still more memory than fits on the screen.

         Media copy strings which control an auxiliary printer connected to
         the terminal can be given as mc0:  print the contents of the screen,
         mc4:  turn off the printer, and mc5:  turn on the printer.  When the
         printer is on, all text sent to the terminal will be sent to the
         printer.  A variation, mc5p, takes one parameter, and leaves the
         printer on for as many characters as the value of the parameter, then
         turns the printer off.  The parameter should not exceed 255.  If the
         text is not displayed on the terminal screen when the printer is on,
         specify mc5i (silent printer).  All text, including mc4, is
         transparently passed to the printer while an mc5p is in effect.


      Section 1-15: Special Cases
         The working model used by terminfo fits most terminals reasonably


   8/91                                                                Page 35









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         well.  However, some terminals do not completely match that model,
         requiring special support by terminfo.  These are not meant to be
         construed as deficiencies in the terminals; they are just differences
         between the working model and the actual hardware.  They may be
         unusual devices or, for some reason, do not have all the features of
         the terminfo model implemented.

         Terminals that cannot display tilde (~) characters, such as certain
         Hazeltine terminals, should indicate hz.

         Terminals that ignore a linefeed immediately after an am wrap, such
         as the Concept 100, should indicate xenl.  Those terminals whose
         cursor remains on the right-most column until another character has
         been received, rather than wrapping immediately upon receiving the
         right-most character, such as the VT100, should also indicate xenl.

         If el is required to get rid of standout (instead of writing normal
         text on top of it), xhp should be given.

         Those Teleray terminals whose tabs turn all characters moved over to
         blanks, should indicate xt (destructive tabs).  This capability is
         also taken to mean that it is not possible to position the cursor on
         top of a ``magic cookie.''  Therefore, to erase standout mode, it is
         necessary, instead, to use delete and insert line.

         Those Beehive Superbee terminals which do not transmit the escape or
         control-C characters, should specify xsb, indicating that the f1 key
         is to be used for escape and the f2 key for control C.

      Section 1-16: Similar Terminals
         If there are two very similar terminals, one can be defined as being
         just like the other with certain exceptions.  The string capability
         use can be given with the name of the similar terminal.  The
         capabilities given before use override those in the terminal type
         invoked by use.  A capability can be canceled by placing xx@ to the
         left of the capability definition, where xx is the capability.  For
         example, the entry

           att4424-2|Teletype 4424 in display function group ii,
             rev@, sgr@, smul@, use=att4424,



         defines an AT&T 4424 terminal that does not have the rev, sgr, and
         smul capabilities, and hence cannot do highlighting.  This is useful
         for different modes for a terminal, or for different user
         preferences.  More than one use capability may be given.


      PART 2: PRINTER CAPABILITIES
         The terminfo database allows you to define capabilities of printers


   Page 36                                                                8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         as well as terminals.  To find out what capabilities are available
         for printers as well as for terminals, see the two lists under
         "DEVICE CAPABILITIES" that list capabilities by variable and by
         capability name.

      Section 2-1: Rounding Values
         Because parameterized string capabilities work only with integer
         values, we recommend that terminfo designers create strings that
         expect numeric values that have been rounded.  Application designers
         should note this and should always round values to the nearest
         integer before using them with a parameterized string capability.

      Section 2-2: Printer Resolution
         A printer's resolution is defined to be the smallest spacing of
         characters it can achieve.  In general printers have independent
         resolution horizontally and vertically.  Thus the vertical resolution
         of a printer can be determined by measuring the smallest achievable
         distance between consecutive printing baselines, while the horizontal
         resolution can be determined by measuring the smallest achievable
         distance between the left-most edges of consecutive printed,
         identical, characters.

         All printers are assumed to be capable of printing with a uniform
         horizontal and vertical resolution.  The view of printing that
         terminfo currently presents is one of printing inside a uniform
         matrix:  All characters are printed at fixed positions relative to
         each ``cell'' in the matrix; furthermore, each cell has the same size
         given by the smallest horizontal and vertical step sizes dictated by
         the resolution.  (The cell size can be changed as will be seen
         later.)

         Many printers are capable of ``proportional printing,'' where the
         horizontal spacing depends on the size of the character last printed.
         terminfo does not make use of this capability, although it does
         provide enough capability definitions to allow an application to
         simulate proportional printing.

         A printer must not only be able to print characters as close together
         as the horizontal and vertical resolutions suggest, but also of
         ``moving'' to a position an integral multiple of the smallest
         distance away from a previous position.  Thus printed characters can
         be spaced apart a distance that is an integral multiple of the
         smallest distance, up to the length or width of a single page.


         Some printers can have different resolutions depending on different
         ``modes.''  In ``normal mode,'' the existing terminfo capabilities
         are assumed to work on columns and lines, just like a video terminal.
         Thus the old lines capability would give the length of a page in
         lines, and the cols capability would give the width of a page in
         columns.  In ``micro mode,'' many terminfo capabilities work on


   8/91                                                                Page 37









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         increments of lines and columns.  With some printers the micro mode
         may be concomitant with normal mode, so that all the capabilities
         work at the same time.

      Section 2-3: Specifying Printer Resolution
         The printing resolution of a printer is given in several ways.  Each
         specifies the resolution as the number of smallest steps per
         distance:

                          Specification of Printer Resolution
                        Characteristic Number of Smallest Steps
                        _______________________________________
                        orhi        Steps per inch horizontally
                        orvi        Steps per inch vertically
                        orc         Steps per column
                        orl         Steps per line

         When printing in normal mode, each character printed causes movement
         to the next column, except in special cases described later; the
         distance moved is the same as the per-column resolution.  Some
         printers cause an automatic movement to the next line when a
         character is printed in the rightmost position; the distance moved
         vertically is the same as the per-line resolution.  When printing in
         micro mode, these distances can be different, and may be zero for
         some printers.
                          Specification of Printer Resolution
                            Automatic Motion after Printing
                          ___________________________________
                          Normal Mode:
                          orc        Steps moved horizontally
                          orl        Steps moved vertically
                          Micro Mode:
                          mcs        Steps moved horizontally
                          mls        Steps moved vertically

         Some printers are capable of printing wide characters.  The distance
         moved when a wide character is printed in normal mode may be
         different from when a regular width character is printed.  The
         distance moved when a wide character is printed in micro mode may
         also be different from when a regular character is printed in micro
         mode, but the differences are assumed to be related:  If the distance
         moved for a regular character is the same whether in normal mode or
         micro mode (mcs=orc), then the distance moved for a wide character is
         also the same whether in normal mode or micro mode.  This doesn't
         mean the normal character distance is necessarily the same as the
         wide character distance, just that the distances don't change with a
         change in normal to micro mode.  However, if the distance moved for a
         regular character is different in micro mode from the distance moved
         in normal mode (mcs<orc), the micro mode distance is assumed to be
         the same for a wide character printed in micro mode, as the table
         below shows.


   Page 38                                                                8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


                         Specification of Printer Resolution
                    Automatic Motion after Printing Wide Character
                    ______________________________________________
                    Normal Mode or Micro Mode (mcs = orc):
                    widcs                 Steps moved horizontally
                    Micro Mode (mcs < orc):
                    mcs                   Steps moved horizontally

         There may be control sequences to change the number of columns per
         inch (the character pitch) and to change the number of lines per inch
         (the line pitch).  If these are used, the resolution of the printer
         changes, but the type of change depends on the printer:

                         Specification of Printer Resolution
                         Changing the Character/Line Pitches
                ______________________________________________________
                cpi    Change character pitch
                cpix   If set, cpi changes orhi, otherwise changes orc
                lpi    Change line pitch
                lpix   If set, lpi changes orvi, otherwise changes orl
                chr    Change steps per column
                cvr    Change steps per line

         The cpi and lpi string capabilities are each used with a single
         argument, the pitch in columns (or characters) and lines per inch,
         respectively.  The chr and cvr string capabilities are each used with
         a single argument, the number of steps per column and line,
         respectively.

         Using any of the control sequences in these strings will imply a
         change in some of the values of orc, orhi, orl, and orvi.  Also, the
         distance moved when a wide character is printed, widcs, changes in
         relation to orc.  The distance moved when a character is printed in
         micro mode, mcs, changes similarly, with one exception:  if the
         distance is 0 or 1, then no change is assumed (see items marked with
         † in the following table).

         Programs that use cpi, lpi, chr, or cvr should recalculate the
         printer resolution (and should recalculate other values see "Effect
         of Changing Printing Resolution" under "Dot-Mapped Graphics").



                          Specification of Printer Resolution
                    Effects of Changing the Character/Line Pitches
                    _______________________________________________
                              Before                    After
                    _______________________________________________
                    Using cpi with cpix clear:
                    orhi'                          orhiorhi
                    orc'                           orc=Vcpi

   8/91                                                                Page 39









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


                    Using cpi with cpix set:
                    orhi'                          orhi=orc.Vcpi
                    orc'                           orc
                    Using lpi with lpix clear:
                    orvi'                          orviorvi
                    U
o
r
s
i
l
'
n
g lpi with lpix set: orl=Vlpi orvi' orvi=orl.Vlpi orl' orl Using chr: orhi' orhi orc' Vchr Using cvr: orvi' orvi orl' Vcvr Using cpi or chr: _orc_orc m
w
c
i
d
s
'
c
s' m
w
c
i
d
s
=
c
m
s
=
c
s
w
'
i
d
o
c
r
c
s
'orc' Vcpi, Vlpi, Vchr, and Vcvr are the arguments used with cpi, lpi, chr, and cvr, respectively. The prime marks (') indicate the old values. Section 2-4: Capabilities that Cause Movement In the following descriptions, ``movement'' refers to the motion of the ``current position.'' With video terminals this would be the cursor; with some printers this is the carriage position. Other printers have different equivalents. In general, the current position is where a character would be displayed if printed. terminfo has string capabilities for control sequences that cause movement a number of full columns or lines. It also has equivalent string capabilities for control sequences that cause movement a number of smallest steps. String Capabilities for Motion __________________________________ mcub1 Move 1 step left mcuf1 Move 1 step right mcuu1 Move 1 step up mcud1 Move 1 step down mcub Move N steps left mcuf Move N steps right mcuu Move N steps up mcud Move N steps down mhpa Move N steps from the left mvpa Move N steps from the top The latter six strings are each used with a single argument, N. Page 40 8/91
   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         Sometimes the motion is limited to less than the width or length of a
         page.  Also, some printers don't accept absolute motion to the left
         of the current position.  terminfo has capabilities for specifying
         these limits.

                                   Limits to Motion
                  __________________________________________________
                  mjump   Limit on use of mcub1, mcuf1, mcuu1, mcud1
                  maddr   Limit on use of mhpa, mvpa
                  xhpa    If set, hpa and mhpa can't move left
                  xvpa    If set, vpa and mvpa can't move up

         If a printer needs to be in a ``micro mode'' for the motion
         capabilities described above to work, there are string capabilities
         defined to contain the control sequence to enter and exit this mode.
         A boolean is available for those printers where using a carriage
         return causes an automatic return to normal mode.

                              Entering/Exiting Micro Mode
                           _________________________________
                           smicm   Enter micro mode
                           rmicm   Exit micro mode
                           crxm    Using cr exits micro mode

         The movement made when a character is printed in the rightmost
         position varies among printers.  Some make no movement, some move to
         the beginning of the next line, others move to the beginning of the
         same line.  terminfo has boolean capabilities for describing all
         three cases.

                             What Happens After Character
                            Printed in Rightmost Position
                    ______________________________________________
                    sam   Automatic move to beginning of same line

         Some printers can be put in a mode where the normal direction of
         motion is reversed.  This mode can be especially useful when there
         are no capabilities for leftward or upward motion, because those
         capabilities can be built from the motion reversal capability and the
         rightward or downward motion capabilities.  It is best to leave it up
         to an application to build the leftward or upward capabilities,
         though, and not enter them in the terminfo database.  This allows
         several reverse motions to be strung together without intervening
         wasted steps that leave and reenter reverse mode.





                            Entering/Exiting Reverse Modes
                      ___________________________________________


   8/91                                                                Page 41









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


                      slm     Reverse sense of horizontal motions
                      rlm     Restore sense of horizontal motions
                      sum     Reverse sense of vertical motions
                      rum     Restore sense of vertical motions
                      While sense of horizontal motions reversed:
                      mcub1   Move 1 step right
                      mcuf1   Move 1 step left
                      mcub    Move N steps right
                      mcuf    Move N steps left
                      cub1    Move 1 column right
                      cuf1    Move 1 column left
                      cub     Move N columns right
                      cuf     Move N columns left
                      While sense of vertical motions reversed:
                      mcuu1   Move 1 step down
                      mcud1   Move 1 step up
                      mcuu    Move N steps down
                      mcud    Move N steps up
                      cuu1    Move 1 line down
                      cud1    Move 1 line up
                      cuu     Move N lines down
                      cud     Move N lines up

         The reverse motion modes should not affect the mvpa and mhpa absolute
         motion capabilities.  The reverse vertical motion mode should,
         however, also reverse the action of the line ``wrapping'' that occurs
         when a character is printed in the right-most position.  Thus
         printers that have the standard terminfo capability am defined should
         experience motion to the beginning of the previous line when a
         character is printed in the right-most position under reverse
         vertical motion mode.

         The action when any other motion capabilities are used in reverse
         motion modes is not defined; thus, programs must exit reverse motion
         modes before using other motion capabilities.

         Two miscellaneous capabilities complete the list of new motion
         capabilities.  One of these is needed for printers that move the
         current position to the beginning of a line when certain control
         characters, such as ``line-feed'' or ``form-feed,'' are used.  The
         other is used for the capability of suspending the motion that
         normally occurs after printing a character.







                             Miscellaneous Motion Strings
           ________________________________________________________________


   Page 42                                                                8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


           docr    List of control characters causing cr
           zerom   Prevent auto motion after printing next single character

      Margins
         terminfo provides two strings for setting margins on terminals:  one
         for the left and one for the right margin.  Printers, however, have
         two additional margins, for the top and bottom margins of each page.
         Furthermore, some printers require not using motion strings to move
         the current position to a margin and then fixing the margin there,
         but require the specification of where a margin should be regardless
         of the current position.  Therefore terminfo offers six additional
         strings for defining margins with printers.

                                   Setting Margins
                      __________________________________________
                      smgl    Set left margin at current column
                      smgr    Set right margin at current column
                      smgb    Set bottom margin at current line
                      smgt    Set top margin at current line
                      smgbp   Set bottom margin at line N
                      smglp   Set left margin at column N
                      smgrp   Set right margin at column N
                      smgtp   Set top margin at line N

         The last four strings are used with one or more arguments that give
         the position of the margin or margins to set.  If both of smglp and
         smgrp are set, each is used with a single argument, N, that gives the
         column number of the left and right margin, respectively.  If both of
         smgtp and smgbp are set, each is used to set the top and bottom
         margin, respectively:  smgtp is used with a single argument, N, the
         line number of the top margin; however, smgbp is used with two
         arguments, N and M, that give the line number of the bottom margin,
         the first counting from the top of the page and the second counting
         from the bottom.  This accommodates the two styles of specifying the
         bottom margin in different manufacturers' printers.  When coding a
         terminfo entry for a printer that has a settable bottom margin, only
         the first or second parameter should be used, depending on the
         printer.  When writing an application that uses smgbp to set the
         bottom margin, both arguments must be given.

         If only one of smglp and smgrp is set, then it is used with two
         arguments, the column number of the left and right margins, in that
         order.  Likewise, if only one of smgtp and smgbp is set, then it is
         used with two arguments that give the top and bottom margins, in that
         order, counting from the top of the page.  Thus when coding a
         terminfo entry for a printer that requires setting both left and
         right or top and bottom margins simultaneously, only one of smglp and
         smgrp or smgtp and smgbp should be defined; the other should be left
         blank.  When writing an application that uses these string
         capabilities, the pairs should be first checked to see if each in the
         pair is set or only one is set, and should then be used accordingly.


   8/91                                                                Page 43









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         In counting lines or columns, line zero is the top line and column
         zero is the left-most column.  A zero value for the second argument
         with smgbp means the bottom line of the page.

         All margins can be cleared with mgc.

      Shadows, Italics, Wide Characters, Superscripts, Subscripts
         Five new sets of strings are used to describe the capabilities
         printers have of enhancing printed text.

                                  Enhanced Printing
                 ____________________________________________________
                 sshm    Enter shadow-printing mode
                 rshm    Exit shadow-printing mode
                 sitm    Enter italicizing mode
                 ritm    Exit italicizing mode
                 swidm   Enter wide character mode
                 rwidm   Exit wide character mode
                 ssupm   Enter superscript mode
                 rsupm   Exit superscript mode
                 supcs   List of characters available as superscripts
                 ssubm   Enter subscript mode
                 rsubm   Exit subscript mode
                 subcs   List of characters available as subscripts

         If a printer requires the sshm control sequence before every
         character to be shadow-printed, the rshm string is left blank.  Thus
         programs that find a control sequence in sshm but none in rshm should
         use the sshm control sequence before every character to be shadow-
         printed; otherwise, the sshm control sequence should be used once
         before the set of characters to be shadow-printed, followed by rshm.
         The same is also true of each of the sitm/ritm, swidm/rwidm,
         ssupm/rsupm, and ssubm/ rsubm pairs.

         Note that terminfo also has a capability for printing emboldened text
         (bold).  While shadow printing and emboldened printing are similar in
         that they ``darken'' the text, many printers produce these two types
         of print in slightly different ways.  Generally, emboldened printing
         is done by overstriking the same character one or more times.  Shadow
         printing likewise usually involves overstriking, but with a slight
         movement up and/or to the side so that the character is ``fatter.''


         It is assumed that enhanced printing modes are independent modes, so
         that it would be possible, for instance, to shadow print italicized
         subscripts.



         As mentioned earlier, the amount of motion automatically made after
         printing a wide character should be given in widcs.


   Page 44                                                                8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         If only a subset of the printable ASCII characters can be printed as
         superscripts or subscripts, they should be listed in supcs or subcs
         strings, respectively.  If the ssupm or ssubm strings contain control
         sequences, but the corresponding supcs or subcs strings are empty, it
         is assumed that all printable ASCII characters are available as
         superscripts or subscripts.

         Automatic motion made after printing a superscript or subscript is
         assumed to be the same as for regular characters.  Thus, for example,
         printing any of the following three examples will result in
         equivalent motion:

               Bi  Bi  Bi

         Note that the existing msgr boolean capability describes whether
         motion control sequences can be used while in ``standout mode.''
         This capability is extended to cover the enhanced printing modes
         added here.  msgr should be set for those printers that accept any
         motion control sequences without affecting shadow, italicized,
         widened, superscript, or subscript printing.  Conversely, if msgr is
         not set, a program should end these modes before attempting any
         motion.

      Section 2-5: Alternate Character Sets
         In addition to allowing you to define line graphics (described in
         Section 1-12), terminfo lets you define alternate character sets.
         The following capabilities cover printers and terminals with multiple
         selectable or definable character sets.

                               Alternate Character Sets
               _________________________________________________________
               scs     Select character set N
               scsd    Start definition of character set N, M characters
               defc    Define character A, B dots wide, descender D
               rcsd    End definition of character set N
               csnm    List of character set names
               daisy   Printer has manually changed print-wheels

         The scs, rcsd, and csnm strings are used with a single argument, N, a
         number from 0 to 63 that identifies the character set.  The scsd
         string is also used with the argument N and another, M, that gives
         the number of characters in the set.  The defc string is used with
         three arguments:  A gives the ASCII code representation for the
         character, B gives the width of the character in dots, and D is zero
         or one depending on whether the character is a ``descender'' or not.
         The defc string is also followed by a string of ``image-data'' bytes
         that describe how the character looks (see below).


         Character set 0 is the default character set present after the
         printer has been initialized.  Not every printer has 64 character


   8/91                                                                Page 45









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         sets, of course; using scs with an argument that doesn't select an
         available character set should cause a null result from tparm.

         If a character set has to be defined before it can be used, the scsd
         control sequence is to be used before defining the character set, and
         the rcsd is to be used after.  They should also cause a null result
         from tparm when used with an argument N that doesn't apply.  If a
         character set still has to be selected after being defined, the scs
         control sequence should follow the rcsd control sequence.  By
         examining the results of using each of the scs, scsd, and rcsd
         strings with a character set number in a call to tparm, a program can
         determine which of the three are needed.

         Between use of the scsd and rcsd strings, the defc string should be
         used to define each character.  To print any character on printers
         covered by terminfo, the ASCII code is sent to the printer.  This is
         true for characters in an alternate set as well as ``normal''
         characters.  Thus the definition of a character includes the ASCII
         code that represents it.  In addition, the width of the character in
         dots is given, along with an indication of whether the character
         should descend below the print line (such as the lower case letter
         ``g'' in most character sets).  The width of the character in dots
         also indicates the number of image-data bytes that will follow the
         defc string.  These image-data bytes indicate where in a dot-matrix
         pattern ink should be applied to ``draw'' the character; the number
         of these bytes and their form are defined below under ``Dot-Mapped
         Graphics.''

         It's easiest for the creator of terminfo entries to refer to each
         character set by number; however, these numbers will be meaningless
         to the application developer.  The csnm string alleviates this
         problem by providing names for each number.

         When used with a character set number in a call to tparm, the csnm
         string will produce the equivalent name.  These names should be used
         as a reference only.  No naming convention is implied, although
         anyone who creates a terminfo entry for a printer should use names
         consistent with the names found in user documents for the printer.
         Application developers should allow a user to specify a character set
         by number (leaving it up to the user to examine the csnm string to
         determine the correct number), or by name, where the application
         examines the csnm string to determine the corresponding character set
         number.


         These capabilities are likely to be used only with dot-matrix
         printers.  If they are not available, the strings should not be
         defined.  For printers that have manually changed print-wheels or
         font cartridges, the boolean daisy is set.




   Page 46                                                                8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


      Section 2-6: Dot-Matrix Graphics
         Dot-matrix printers typically have the capability of reproducing
         ``raster-graphics'' images.  Three new numeric capabilities and three
         new string capabilities can help a program draw raster-graphics
         images independent of the type of dot-matrix printer or the number of
         pins or dots the printer can handle at one time.
                                  Dot-Matrix Graphics
                _______________________________________________________
                npins    Number of pins, N, in print-head
                spinv    Spacing of pins vertically in pins per inch
                spinh    Spacing of dots horizontally in dots per inch
                porder   Matches software bits to print-head pins
                sbim     Start printing bit image graphics, B bits wide
                rbim     End printing bit image graphics

         The sbim sring is used with a single argument, B, the width of the
         image in dots.

         The model of dot-matrix or raster-graphics that terminfo presents is
         similar to the technique used for most dot-matrix printers:  each
         pass of the printer's print-head is assumed to produce a dot-matrix
         that is N dots high and B dots wide.  This is typically a wide,
         squat, rectangle of dots.  The height of this rectangle in dots will
         vary from one printer to the next; this is given in the npins numeric
         capability.  The size of the rectangle in fractions of an inch will
         also vary; it can be deduced from the spinv and spinh numeric
         capabilities.  With these three values an application can divide a
         complete raster-graphics image into several horizontal strips,
         perhaps interpolating to account for different dot spacing vertically
         and horizontally.

         The sbim and rbim strings are used to start and end a dot-matrix
         image, respectively.  The sbim string is used with a single argument
         that gives the width of the dot-matrix in dots.  A sequence of
         ``image-data bytes'' are sent to the printer after the sbim string
         and before the rbim string.  The number of bytes is a integral
         multiple of the width of the dot-matrix; the multiple and the form of
         each byte is determined by the porder string as described below.

         The porder string is a comma separated list of pin numbers optionally
         followed by an numerical offset.  The offset, if given, is separated
         from the list with a semicolon.  The position of each pin number in
         the list corresponds to a bit in an 8-bit data byte.  The pins are
         numbered consecutively from 1 to npins, with 1 being the top pin.
         Note that the term ``pin'' is used loosely here; ``ink-jet'' dot-
         matrix printers don't have pins, but can be considered to have an
         equivalent method of applying a single dot of ink to paper.  The bit
         positions in porder are in groups of 8, with the first position in
         each group the most significant bit and the last position the least
         significant bit.  An application produces 8-bit bytes in the order of
         the groups in porder.


   8/91                                                                Page 47









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


         An application computes the ``image-data bytes'' from the internal
         image, mapping vertical dot positions in each print-head pass into
         8-bit bytes, using a 1 bit where ink should be applied and 0 where no
         ink should be applied.  This can be reversed (0 bit for ink, 1 bit
         for no ink) by giving a negative pin number.  If a position is
         skipped in porder, a 0 bit is used.  If a position has a lower case
         `x' instead of a pin number, a 1 bit is used in the skipped position.
         For consistency, a lower case `o' can be used to represent a 0
         filled, skipped bit.  There must be a multiple of 8 bit positions
         used or skipped in porder; if not, 0 bits are used to fill the last
         byte in the least significant bits.  The offset, if given, is added
         to each data byte; the offset can be negative.

         Some examples may help clarify the use of the porder string.  The
         AT&T 470, AT&T 475 and C.Itoh 8510 printers provide eight pins for
         graphics.  The pins are identified top to bottom by the 8 bits in a
         byte, from least significant to most.  The porder strings for these
         printers would be 8,7,6,5,4,3,2,1.  The AT&T 478 and AT&T 479
         printers also provide eight pins for graphics.  However, the pins are
         identified in the reverse order.  The porder strings for these
         printers would be 1,2,3,4,5,6,7,8.  The AT&T 5310, AT&T 5320, DEC
         LA100, and DEC LN03 printers provide six pins for graphics.  The pins
         are identified top to bottom by the decimal values 1, 2, 4, 8, 16 and
         32.  These correspond to the low six bits in an 8-bit byte, although
         the decimal values are further offset by the value 63.  The porder
         string for these printers would be ,,6,5,4,3,2,1;63, or alternately
         o,o,6,5,4,3,2,1;63.

      Section 2-7: Effect of Changing Printing Resolution
         If the control sequences to change the character pitch or the line
         pitch are used, the pin or dot spacing may change:
                                  Dot-Matrix Graphics
                          Changing the Character/Line Pitches
                          ___________________________________
                          cpi       Change character pitch
                          cpix      If set, cpi changes spinh
                          lpi       Change line pitch
                          lpix      If set, lpi changes spinv

         Programs that use cpi or lpi should recalculate the dot spacing:



                                  Dot-Matrix Graphics
                    Effects of Changing the Character/Line Pitches
                   _________________________________________________
                             Before                     After
                   _________________________________________________
                   Using cpi with cpix clear:
                   spinh'                         spinh
                   Using cpi with cpix set:


   Page 48                                                                8/91









   terminfo(4)          (Terminal Information Utilities)           terminfo(4)


                                  Dot-Matrix Graphics
                    Effects of Changing the Character/Line Pitches
                   _________________________________________________
                             Before                     After
                   ____________________________________________orhi
                   U
s
p
s
ing
h
'lpi with lpix clear: spinh=spinh'.orhi' spinv' spinv Using lpi with lpix set: _orhi U
s
p
s
ing
v
'chr: spinv=spinv'.orhi' spinh' spinh Using cvr: spinv' spinv orhi' and orhi are the values of the horizontal resolution in steps per inch, before using cpi and after using cpi, respectively. Likewise, orvi' and orvi are the values of the vertical resolution in steps per inch, before using lpi and after using lpi, respectively. Thus, the changes in the dots per inch for dot-matrix graphics follow the changes in steps per inch for printer resolution. Section 2-8: Print Quality Many dot-matrix printers can alter the dot spacing of printed text to produce near ``letter quality'' printing or ``draft quality'' printing. Usually it is important to be able to choose one or the other because the rate of printing generally falls off as the quality improves. There are three new strings used to describe these capabilities. Print Quality _____________________________________ snlq Set near-letter quality print snrmq Set normal quality print sdrfq Set draft quality print The capabilities are listed in decreasing levels of quality. If a printer doesn't have all three levels, one or two of the strings should be left blank as appropriate. Section 2-9: Printing Rate and Buffer Size Because there is no standard protocol that can be used to keep a program synchronized with a printer, and because modern printers can buffer data before printing it, a program generally cannot determine at any time what has been printed. Two new numeric capabilities can help a program estimate what has been printed. 8/91 Page 49 terminfo(4) (Terminal Information Utilities) terminfo(4)

                                Print Rate/Buffer Size
                  ___________________________________________________
                  cps     Nominal print rate in characters per second
                  bufsz   Buffer capacity in characters

         cps is the nominal or average rate at which the printer prints
         characters; if this value is not given, the rate should be estimated
         at one-tenth the prevailing baud rate.  bufsz is the maximum number
         of subsequent characters buffered before the guaranteed printing of
         an earlier character, assuming proper flow control has been used.  If
         this value is not given it is assumed that the printer does not
         buffer characters, but prints them as they are received.

         As an example, if a printer has a 1000-character buffer, then sending
         the letter ``a'' followed by 1000 additional characters is guaranteed
         to cause the letter ``a'' to print.  If the same printer prints at
         the rate of 100 characters per second, then it should take 10 seconds
         to print all the characters in the buffer, less if the buffer is not
         full.  By keeping track of the characters sent to a printer, and
         knowing the print rate and buffer size, a program can synchronize
         itself with the printer.

         Note that most printer manufacturers advertise the maximum print
         rate, not the nominal print rate.  A good way to get a value to put
         in for cps is to generate a few pages of text, count the number of
         printable characters, and then see how long it takes to print the
         text.

         Applications that use these values should recognize the variability
         in the print rate.  Straight text, in short lines, with no embedded
         control sequences will probably print at close to the advertised
         print rate and probably faster than the rate in cps.  Graphics data
         with a lot of control sequences, or very long lines of text, will
         print at well below the advertised rate and below the rate in cps.
         If the application is using cps to decide how long it should take a
         printer to print a block of text, the application should pad the
         estimate.  If the application is using cps to decide how much text
         has already been printed, it should shrink the estimate.  The
         application will thus err in favor of the user, who wants, above all,
         to see all the output in its correct place.



   FILES




         /usr/share/lib/terminfo/?/*     compiled terminal description
                                         database



   Page 50                                                                8/91










   terminfo(4)          (Terminal Information Utilities)           terminfo(4)

         /usr/share/lib/.COREterm/?/*    subset of compiled terminal
                                         description database
         /usr/share/lib/tabset/*         tab settings for some terminals, in a
                                         format appropriate to be output to
                                         the terminal (escape sequences that
                                         set margins and tabs)

   SEE ALSO
         curses(3X), ls(1), pg(1), printf(3S), stty(1), tic(1M), tput(1),
         tty(1), vi(1).

   NOTES
         The most effective way to prepare a terminal description is by
         imitating the description of a similar terminal in terminfo and to
         build up a description gradually, using partial descriptions with a
         screen oriented editor, such as vi, to check that they are correct.
         To easily test a new terminal description the environment variable
         TERMINFO can be set to the pathname of a directory containing the
         compiled description, and programs will look there rather than in
         /usr/share/lib/terminfo.

































   8/91                                                                Page 51





Typewritten Software • bear@typewritten.org • Edmonds, WA 98026