Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ terminfo(M) — OpenDesktop 3.0.0

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

captoinfo(ADM)

curses(S)

infocmp(ADM)

printf(S)

profile(M)

term(M)

terminfo(F)

tic(C)

tput(C)

vi(C)


 terminfo(M)                   06 January 1993                    terminfo(M)


 Name

    terminfo - terminal capability database

 Syntax

    /usr/lib/terminfo/?/*

 Description

    terminfo is a compiled database (see tic(C)) describing the capabilities
    of terminals.  Terminals are described in terminfo source descriptions by
    giving a set of capabilities which they have, by describing how opera-
    tions are performed, by describing padding requirements, and by specify-
    ing initialization sequences.  This database is used, for example, by
    vi(C) and curses(S), so they can work with a variety of terminals without
    changes to the programs.  To obtain the source description for a termi-
    nal, use the -I option of infocmp(ADM).  When doing an infocmp for the
    terminal you are on, there is no difference between infocmp and
    infocmp -I.

    Entries in terminfo source files consist of a number of fields separated
    by commas.  White space after each comma is ignored.  The first line of
    each terminal description in the terminfo database gives the name by
    which terminfo knows the terminal, separated by bar (|) characters.  The
    first name given is the most common abbreviation for the terminal (this
    is the one to use to set the environment variable TERM in $HOME .profile;
    see profile(M)); the last name given should be a long name fully identi-
    fying the terminal, and all others are understood as synonyms for the
    terminal name.  All names but the last should contain no blanks and must
    be unique in the first 14 characters; the last name may contain blanks
    for readability.

    Terminal names (except for the last verbose entry) should be chosen using
    the following conventions.  The particular piece of hardware making up
    the terminal should have a root name chosen, for example, for the AT&T
    4425 terminal, att4425.  Modes that the hardware can be in, or user
    preferences, should be indicated by appending a hyphen and an indicator
    of the mode.  See term(M) for examples and more information on choosing
    names and synonyms.

    PART 1: TERMINAL CAPABILITIES

    Capabilities in terminfo are of three types:  boolean capabilities (which
    show that the terminal has some particular feature), numeric capabilities
    (which specify the size of the terminal or particular features), and
    string capabilities (which provide a sequence that can be used to perform
    particular terminal operations).

    In the following tables, a ``Variable'' is the name by which a C program-
    mer accesses a capability (at the terminfo level).  A ``Capname'' is the
    short name for a capability used in the source description.  It is used
    by a person updating the database and by the tput(C) command when asking
    what the value of the capability is for a particular terminal.  A
    ``Termcap Code'' is a two-letter code that corresponds to the old termcap
    capability name.

    Capability names have no hard length limit, but an informal limit of five
    characters has been adopted to keep them short.  Whenever possible, 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 table, have names beginning with
    key.  The following indicators may appear at the end of the ``Descrip-
    tion'' for a variable.

    (G)   indicates that the string is passed through tparm() with parameters
          (parms) as given (#i)

    (*)   indicates that padding may be based on the number of lines affected

    (#i)  indicates the ith parameter

    (**)  not present in all versions of termcap.


    Booleans

    ______________________________________________________________________________________________
    Variable                   Cap-    Termcap   Description
                               name    Code
    ______________________________________________________________________________________________
    auto_left_margin           bw      bw        cub1 wraps from column 0 to last column
    auto_right_margin          am      am        Terminal has automatic margins
    back_color_erase           bce     be        Screen erased with background color
    can_change                 ccc     cc        Terminal can re-define existing color
    ceol_standout_glitch       xhp     xs        Standout not erased by overwriting (hp)
    col_addr_glitch            xhpa    YA        Only positive motion for hpa/mhpa caps
    cpi_changes_res            cpix    YF        Changing character pitch changes resolution
    cr_cancels_micro_mode      crxm    YB        Using cr turns off micro mode
    eat_newline_glitch         xenl    xn        Newline ignored after 80 columns (Concept)
    erase_overstrike           eo      eo        Can erase overstrikes with a blank
    generic_type               gn      gn        Generic line type (for example, dialup, switch)
    hard_copy                  hc      hc        Hardcopy terminal
    hard_cursor                chts    HC        Cursor is hard to see
    has_meta_key               km      km        Has a meta key (shift, sets parity bit)
    has_print_wheel            daisy   YC        Printer needs operator to change character set
    has_status_line            hs      hs        Has extra "status line"
    hue_lightness_saturation   hls     hl        Terminal uses only HLS color notation (Tektronix)
    insert_null_glitch         in      in        Insert mode distinguishes nulls
    lpi_changes_res            lpix    YG        Changing line pitch changes resolution


    memory_above               da      da        Display may be retained above the screen
    memory_below               db      db        Display may be retained below the screen
    move_insert_mode           mir     mi        Safe to move while in insert mode
    move_standout_mode         msgr    ms        Safe to move in standout modes
    needs_xon_xoff             nxon    nx        Padding won't work, xon/xoff required
    no_esc_ctlc                xsb     xb        Beehive (f1=escape, f2=ctrl C)
    no_pad_char                npc     NP        Pad character doesn't exist
    non_dest_scroll_region     ndscr   ND        Scrolling region is non-destructive
    non_rev_rmcup              nrrmc   NR        smcup does not reverse rmcup
    over_strike                os      os        Terminal overstrikes on hard-copy terminal
    prtr_silent                mc5i
    row_addr_glitch            xvpa    YD        Only positive motion for vpa/mvpa caps
    semi_auto_right_margin     sam     YE        Printing in last column causes cr
    status_line_esc_ok         eslok   es        Escape can be used on the status line
    dest_tabs_magic_smso       xt      xt        Destructive tabs, magic smso char (t1061)
    tilde_glitch               hz      hz        Hazeltine; cannot print tilde (~)
    transparent_underline      ul      ul        Underline character overstrikes
    xon_xoff                   xon     xo        Terminal uses xon/xoff handshaking


    Numbers

    _________________________________________________________________________________________
    Variable               Cap-     Termcap   Description
                           name     Code
    _________________________________________________________________________________________
    buffer_capacity        bufsz    Ya        Number of bytes buffered before printing
    columns                cols     co        Number of columns in a line
    dot_vert_spacing       spinv    Yb        Spacing of pins vertically in pins per inch
    dot_horz_spacing       spinh    Yc        Spacing of dots horizontally in dots per inch
    init_tabs              it       it        Tabs initially every # spaces
    label_height           lh       lh        Number of rows in each label
    label_width            lw       lw        Number of columns in each label
    lines                  lines    li        Number of lines on a screen or a page
    lines_of_memory        lm       lm        Lines of memory if > lines; 0 means varies
    magic_cookie_glitch    xmc      sg        Number of blank characters left by smso or rmso
    max_attributes         ma       ma        Maximum combined video attributes terminal can
                                              display
    max_colors             colors   Co        Maximum number of colors on the screen
    max_micro_address      maddr    Yd        Maximum value in micro...address
    max_micro_jump         mjump    Ye        Maximum value in parm...micro
    max_pairs              pairs    pa        Maximum number of color-pairs on the screen
    maximum_windows        wnum     MW        Maximum number of definable windows
    micro_col_size         mcs      Yf        Character step size when in micro mode
    micro_line_size        mls      Yg        Line step size when in micro mode
    no_color_video         ncv      NC        Video attributes that can't be used with colors


    number_of_pins         npins    Yh        Number of pins in print-head
    num_labels             nlab     Nl        Number of labels on screen (start at 1)
    output_res_char        orc      Yi        Horizontal resolution in units per character
    output_res_line        orl      Yj        Vertical resolution in units per line
    output_res_horz_inch   orhi     Yk        Horizontal resolution in units per inch
    output_res_vert_inch   orvi     Yl        Vertical resolution in units per inch
    padding_baud_rate      pb       pb        Lowest baud rate where padding needed
    print_rate             cps      Ym        Print rate in characters per second
    virtual_terminal       vt       vt        Virtual terminal number (UNIX system)
    wide_char_size         widcs    Yn        Character step size when in double wide mode
    width_status_line      wsl      ws        Number of columns in status line


    Strings

    ____________________________________________________________________________________________
    Variable                  Cap-   Termcap  Description
                              name   Code
    ____________________________________________________________________________________________
    acs_chars                 acsc   ac       Graphic charset pairs aAbBcC - def=vt100
    back_tab                  cbt    bt       Back tab
    bell                      bel    bl       Audible signal (bell)
    carriage_return           cr     cr       Carriage return (*)
    change_char_pitch         cpi    ZA       Change number of characters per inch**
    change_line_pitch         lpi    ZB       Change number of lines per inch**
    change_res_horz           chr    ZC       Change horizontal resolution**
    change_res_vert           cvr    ZD       Change vertical resolution**
    change_scroll_region      csr    cs       Change to lines #1 through #2 (vt100) (G)
    char_padding              rmp    rP       Like ip but when in replace mode
    char_set_names            csnm   Zy       List of character set names
    clear_all_tabs            tbc    ct       Clear all tab stops
    clear_margins             mgc    MC       Clear all margins (top, bottom, and sides)
    clear_screen              clear  cl       Clear screen and home cursor (*)
    clr_bol                   el1    cb       Clear to beginning of line, inclusive
    clr_eol                   el     ce       Clear to end of line
    clr_eos                   ed     cd       Clear to end of display (*)
    column_address            hpa    ch       Horizontal position absolute (G)
    command_character         cmdch  CC       Terminal settable cmd character in prototype
    create_window             cwin   CW       Define win #1 to go from #2,#3 to #4,#5


    cursor_address            cup    cm       Move to row #1 col #2 (G)
    cursor_down               cud1   do       Down one line
    cursor_home               home   ho       Home cursor (if no cup)
    cursor_invisible          civis  vi       Make cursor invisible
    cursor_left               cub1   le       Move left one space
    cursor_mem_address        mrcup  CM       Memory relative cursor addressing (G)
    cursor_normal             cnorm  ve       Make cursor appear normal (undo vs/vi)
    cursor_right              cuf1   nd       Non-destructive space (cursor or carriage right)
    cursor_to_ll              ll     ll       Last line, first column (if no cup)
    cursor_up                 cuu1   up       Upline (cursor up)
    cursor_visible            cvvis  vs       Make cursor very visible
    define_char               defc   ZE       Define a character in a character set**
    delete_character          dch1   dc       Delete character (*)
    delete_line               dl1    dl       Delete line (*)
    delete_phone              dial   DI       Dial phone number #1
    dis_status_line           dsl    ds       Disable status line
    display_clock             dclk   DK       Display time-of-day clock
    display_pc_char           dispc  S1       Displays PC character
    down_half_line            hd     hd       Half-line down (forward 1/2 linefeed)
    ena_acs                   enacs  eA       Enable alternate character set
    enter_alt_charset_mode    smacs  as       Start alternate character set
    enter_am_mode             smam   SA       Turn on automatic margins
    enter_blink_mode          blink  mb       Turn on blinking
    enter_bold_mode           bold   md       Turn on bold (extra bright) mode
    enter_ca_mode             smcup  ti       String to begin programs that use cup
    enter_delete_mode         smdc   dm       Delete mode (enter)
    enter_dim_mode            dim    mh       Turn on half-bright mode
    enter_doublewide_mode     swidm  ZF       Enable double wide printing
    enter_draft_quality       sdrfq  ZG       Set draft quality print
    enter_insert_mode         smir   im       Insert mode (enter)
    enter_italics_mode        sitm   ZH       Enable italics
    enter_leftward_mode       slm    ZI       Enable leftward carriage motion
    enter_micro_mode          smicm  ZJ       Enable micro motion capabilities
    enter_near_letter_quality snlq   ZK       Set near-letter quality print
    enter_normal_quality      snrmq  ZL       Set normal quality print
    enter_pc_charset_mode     smsc   S4       Enables PC-scancode mode
    enter_protected_mode      prot   mp       Turn on protected mode
    enter_reverse_mode        rev    mr       Turn on reverse video mode
    enter_secure_mode         invis  mk       Turn on blank mode (characters invisible)
    enter_shadow_mode         sshm   ZM       Enable shadow printing
    enter_standout_mode       smso   so       Begin standout mode
    enter_subscript_mode      ssubm  ZN       Enable subscript printing
    enter_superscript_mode    ssupm  ZO       Enable superscript printing
    enter_underline_mode      smul   us       Start underscore mode
    enter_upward_mode         sum    ZP       Enable upward carriage motion
    enter_xon_mode            smxon  SX       Turn on xon/xoff handshaking
    erase_chars               ech    ec       Erase #1 characters (G)
    exit_alt_charset_mode     rmacs  ae       End alternate character set
    exit_am_mode              rmam   RA       Turn off automatic margins
    exit_attribute_mode       sgr0   me       Turn off all attributes
    exit_ca_mode              rmcup  te       String to end programs that use cup
    exit_delete_mode          rmdc   ed       End delete mode
    exit_doublewide_mode      rwidm  ZQ       Disable double wide printing
    exit_insert_mode          rmir   ei       End insert mode
    exit_italics_mode         ritm   ZR       Disable italics
    exit_leftward_mode        rlm    ZS       Enable rightward (normal) carriage motion
    exit_micro_mode           rmicm  ZT       Disable micro motion capabilities
    exit_pc_charset_mode      rmsc   S5       Disables PC-scancode mode
    exit_shadow_mode          rshm   ZU       Disable shadow printing
    exit_standout_mode        rmso   se       End standout mode
    exit_subscript_mode       rsubm  ZV       Disable subscript printing
    exit_superscript_mode     rsupm  ZW       Disable superscript printing
    exit_underline_mode       rmul   ue       End underscore mode
    exit_upward_mode          rum    ZX       Enable downward (normal) carriage motion
    exit_xon_mode             rmxon  RX       Turn off xon/xoff handshaking
    fixed_pause               pause  PA       Pause for 2-3 seconds
    flash_hook                hook   fh       Flash the switch hook
    flash_screen              flash  vb       Visible bell (may not move cursor)
    form_feed                 ff     ff       Hardcopy terminal page eject (*)
    from_status_line          fsl    fs       Return from status line
    goto_window               wingo  WG       Got to window #1
    hangup                    hup    HU       Hang-up phone
    init_1string              is1    i1       Terminal or printer initialization string
    init_2string              is2    is       Terminal or printer initialization string
    init_3string              is3    i3       Terminal or printer initialization string
    init_file                 if     if       Name of initialization file
    init_prog                 iprog  iP       Path name of program for initialization
    initialize_color          initc  Ic       Initialize the definition of color
    initialize_pair           initp  Ip       Initialize color-pair
    insert_character          ich1   ic       Insert character
    insert_line               il1    al       Add new blank line (*)
    insert_padding            ip     ip       Insert pad after character inserted (*)
    key_a1                    ka1    K1       KEY_A1, 0534, upper left of keypad
    key_a3                    ka3    K3       KEY_A3, 0535, upper right of keypad
    key_b2                    kb2    K2       KEY_B2, 0536, center of keypad
    key_backspace             kbs    kb       KEY_BACKSPACE, 0407, sent by backspace key
    key_beg                   kbeg   @1       KEY_BEG, 0542, sent by beg(inning) key
    key_btab                  kcbt   kB       KEY_BTAB, 0541, sent by back-tab key
    key_c1                    kc1    K4       KEY_C1, 0537, lower left of keypad
    key_c3                    kc3    K5       KEY_C3, 0540, lower right of keypad
    key_cancel                kcan   @2       KEY_CANCEL, 0543, sent by cancel key
    key_catab                 ktbc   ka       KEY_CATAB, 0526, sent by clear-all-tabs key
    key_clear                 kclr   kC       KEY_CLEAR, 0515, sent by clear-screen or erase key
    key_close                 kclo   @3       KEY_CLOSE, 0544, sent by close key
    key_command               kcmd   @4       KEY_COMMAND, 0545, sent by cmd (command) key
    key_copy                  kcpy   @5       KEY_COPY, 0546, sent by copy key
    key_create                kcrt   @6       KEY_CREATE, 0547, sent by create key
    key_ctab                  kctab  kt       KEY_CTAB, 0525, sent by clear-tab key
    key_dc                    kdch1  kD       KEY_DC, 0512, sent by delete-character key
    key_dl                    kdl1   kL       KEY_DL, 0510, sent by delete-line key
    key_down                  kcud1  kd       KEY_DOWN, 0402, sent by terminal down-arrow key
    key_eic                   krmir  kM       KEY_EIC, 0514, sent by rmir or smir in insert mode
    key_end                   kend   @7       KEY_END, 0550, sent by end key
    key_enter                 kent   @8       KEY_ENTER, 0527, sent by enter/send key
    key_eol                   kel    kE       KEY_EOL, 0517, sent by clear-to-end-of-line key
    key_eos                   ked    kS       KEY_EOS, 0516, sent by clear-to-end-of-screen key
    key_exit                  kext   @9       KEY_EXIT, 0551, sent by exit key
    key_f0                    kf0    k0       KEY_F(0), 0410, sent by function key f0
    key_f1                    kf1    k1       KEY_F(1), 0411, sent by function key f1
    key_f2                    kf2    k2       KEY_F(2), 0412, sent by function key f2
    key_f3                    kf3    k3       KEY_F(3), 0413, sent by function key f3
    key_f4                    kf4    k4       KEY_F(4), 0414, sent by function key f4
    key_f5                    kf5    k5       KEY_F(5), 0415, sent by function key f5
    key_f6                    kf6    k6       KEY_F(6), 0416, sent by function key f6
    key_f7                    kf7    k7       KEY_F(7), 0417, sent by function key f7
    key_f8                    kf8    k8       KEY_F(8), 0420, sent by function key f8
    key_f9                    kf9    k9       KEY_F(9), 0421, sent by function key f9
    key_f10                   kf10   k;       KEY_F(10), 0422, sent by function key f10
    key_f11                   kf11   F1       KEY_F(11), 0423, sent by function key f11
    key_f12                   kf12   F2       KEY_F(12), 0424, sent by function key f12
    key_f13                   kf13   F3       KEY_F(13), 0425, sent by function key f13
    key_f14                   kf14   F4       KEY_F(14), 0426, sent by function key f14
    key_f15                   kf15   F5       KEY_F(15), 0427, sent by function key f15
    key_f16                   kf16   F6       KEY_F(16), 0430, sent by function key f16
    key_f17                   kf17   F7       KEY_F(17), 0431, sent by function key f17
    key_f18                   kf18   F8       KEY_F(18), 0432, sent by function key f18
    key_f19                   kf19   F9       KEY_F(19), 0433, sent by function key f19
    key_f20                   kf20   FA       KEY_F(20), 0434, sent by function key f20
    key_f21                   kf21   FB       KEY_F(21), 0435, sent by function key f21
    key_f22                   kf22   FC       KEY_F(22), 0436, sent by function key f22
    key_f23                   kf23   FD       KEY_F(23), 0437, sent by function key f23
    key_f24                   kf24   FE       KEY_F(24), 0440, sent by function key f24
    key_f25                   kf25   FF       KEY_F(25), 0441, sent by function key f25
    key_f26                   kf26   FG       KEY_F(26), 0442, sent by function key f26
    key_f27                   kf27   FH       KEY_F(27), 0443, sent by function key f27
    key_f28                   kf28   FI       KEY_F(28), 0444, sent by function key f28
    key_f29                   kf29   FJ       KEY_F(29), 0445, sent by function key f29
    key_f30                   kf30   FK       KEY_F(30), 0446, sent by function key f30
    key_f31                   kf31   FL       KEY_F(31), 0447, sent by function key f31
    key_f32                   kf32   FM       KEY_F(32), 0450, sent by function key f32
    key_f33                   kf33   FN       KEY_F(33), 0451, sent by function key f13
    key_f34                   kf34   FO       KEY_F(34), 0452, sent by function key f34
    key_f35                   kf35   FP       KEY_F(35), 0453, sent by function key f35
    key_f36                   kf36   FQ       KEY_F(36), 0454, sent by function key f36
    key_f37                   kf37   FR       KEY_F(37), 0455, sent by function key f37
    key_f38                   kf38   FS       KEY_F(38), 0456, sent by function key f38


    key_f39                   kf39   FT       KEY_F(39), 0457, sent by function key f39
    key_f40                   kf40   FU       KEY_F(40), 0460, sent by function key f40
    key_f41                   kf41   FV       KEY_F(41), 0461, sent by function key f41
    key_f42                   kf42   FW       KEY_F(42), 0462, sent by function key f42
    key_f43                   kf43   FX       KEY_F(43), 0463, sent by function key f43

    key_f44                kf44   FY       KEY_F(44), 0464, sent by function key f44
    key_f45                kf45   FZ       KEY_F(45), 0465, sent by function key f45
    key_f46                kf46   Fa       KEY_F(46), 0466, sent by function key f46
    key_f47                kf47   Fb       KEY_F(47), 0467, sent by function key f47
    key_f48                kf48   Fc       KEY_F(48), 0470, sent by function key f48
    key_f49                kf49   Fd       KEY_F(49), 0471, sent by function key f49
    key_f50                kf50   Fe       KEY_F(50), 0472, sent by function key f50
    key_f51                kf51   Ff       KEY_F(51), 0473, sent by function key f51
    key_f52                kf52   Fg       KEY_F(52), 0474, sent by function key f52
    key_f53                kf53   Fh       KEY_F(53), 0475, sent by function key f53
    key_f54                kf54   Fi       KEY_F(54), 0476, sent by function key f54
    key_f55                kf55   Fj       KEY_F(55), 0477, sent by function key f55
    key_f56                kf56   Fk       KEY_F(56), 0500, sent by function key f56
    key_f57                kf57   Fl       KEY_F(57), 0501, sent by function key f57
    key_f58                kf58   Fm       KEY_F(58), 0502, sent by function key f58
    key_f59                kf59   Fn       KEY_F(59), 0503, sent by function key f59
    key_f60                kf60   Fo       KEY_F(60), 0504, sent by function key f60
    key_f61                kf61   Fp       KEY_F(61), 0505, sent by function key f61
    key_f62                kf62   Fq       KEY_F(62), 0506, sent by function key f62
    key_f63                kf63   Fr       KEY_F(63), 0507, sent by function key f63


    key_find               kfnd   @0       KEY_FIND, 0552, sent by find key
    key_help               khlp   %1       KEY_HELP, 0553, sent by help key
    key_home               khome  kh       KEY_HOME, 0406, sent by home key
    key_ic                 kich1  kI       KEY_IC, 0513, sent by ins-char/enter ins-mode key
    key_il                 kil1   kA       KEY_IL, 0511, sent by insert-line key
    key_left               kcub1  kl       KEY_LEFT, 0404, sent by terminal left-arrow key
    key_ll                 kll    kH       KEY_LL, 0533, sent by home-down key
    key_mark               kmrk   %2       KEY_MARK, 0554, sent by mark key
    key_message            kmsg   %3       KEY_MESSAGE, 0555, sent by message key
    key_move               kmov   %4       KEY_MOVE, 0556, sent by move key
    key_next               knxt   %5       KEY_NEXT, 0557, sent by next key
    key_npage              knp    kN       KEY_NPAGE, 0522, sent by next-page key
    key_open               kopn   %6       KEY_OPEN, 0560, sent by open key
    key_options            kopt   %7       KEY_OPTIONS, 0561, sent by options key
    key_ppage              kpp    kP       KEY_PPAGE, 0523, sent by previous-page key
    key_previous           kprv   %8       KEY_PREVIOUS, 0562, sent by previous-object key
    key_print              kprt   %9       KEY_PRINT, 0532, sent by print or copy key
    key_redo               krdo   0        KEY_REDO, 0563, sent by redo key
    key_reference          kref   &1       KEY_REFERENCE, 0564, sent by ref(erence) key
    key_refresh            krfr   &2       KEY_REFRESH, 0565, sent by refresh key
    key_replace            krpl   &3       KEY_REPLACE, 0566, sent by replace key
    key_restart            krst   &4       KEY_RESTART, 0567, sent by restart key
    key_resume             kres   &5       KEY_RESUME, 0570, sent by resume key
    key_right              kcuf1  kr       KEY_RIGHT, 0405, sent by terminal right-arrow key
    key_save               ksav   &6       KEY_SAVE, 0571, sent by save key
    key_sbeg               kBEG   &9       KEY_SBEG, 0572, sent by shifted beginning key
    key_scancel            kCAN   &0       KEY_SCANCEL, 0573, sent by shifted cancel key
    key_scommand           kCMD   *1       KEY_SCOMMAND, 0574, sent by shifted command key
    key_scopy              kCPY   *2       KEY_SCOPY, 0575, sent by shifted copy key
    key_screate            kCRT   *3       KEY_SCREATE, 0576, sent by shifted create key
    key_sdc                kDC    *4       KEY_SDC, 0577, sent by shifted delete-char key
    key_sdl                kDL    *5       KEY_SDL, 0600, sent by shifted delete-line key
    key_select             kslt   *6       KEY_SELECT, 0601, sent by select key
    key_send               kEND   *7       KEY_SEND, 0602, sent by shifted end key
    key_seol               kEOL   *8       KEY_SEOL, 0603, sent by shifted clear-line key
    key_sexit              kEXT   *9       KEY_SEXIT, 0604, sent by shifted exit key
    key_sf                 kind   kF       KEY_SF, 0520, sent by scroll-forward/down key
    key_sfind              kFND   *0       KEY_SFIND, 0605, sent by shifted find key
    key_shelp              kHLP   #1       KEY_SHELP, 0606, sent by shifted help key
    key_shome              kHOM   #2       KEY_SHOME, 0607, sent by shifted home key
    key_sic                kIC    #3       KEY_SIC, 0610, sent by shifted input key
    key_sleft              kLFT   #4       KEY_SLEFT, 0611, sent by shifted left-arrow key
    key_smessage           kMSG   %a       KEY_SMESSAGE, 0612, sent by shifted message key
    key_smove              kMOV   %b       KEY_SMOVE, 0613, sent by shifted move key
    key_snext              kNXT   %c       KEY_SNEXT, 0614, sent by shifted next key
    key_soptions           kOPT   %d       KEY_SOPTIONS, 0615, sent by shifted options key
    key_sprevious          kPRV   %e       KEY_SPREVIOUS, 0616, sent by shifted prev key
    key_sprint             kPRT   %f       KEY_SPRINT, 0617, sent by shifted print key
    key_sr                 kri    kR       KEY_SR, 0521, sent by scroll-backward/up key
    key_sredo              kRDO   %g       KEY_SREDO, 0620, sent by shifted redo key
    key_sreplace           kRPL   %h       KEY_SREPLACE, 0621, sent by shifted replace key
    key_sright             kRIT   %i       KEY_SRIGHT, 0622, sent by shifted right-arrow key
    key_srsume             kRES   %j       KEY_SRSUME, 0623, sent by shifted resume key
    key_ssave              kSAV   !1       KEY_SSAVE, 0624, sent by shifted save key
    key_ssuspend           kSPD   !2       KEY_SSUSPEND, 0625, sent by shifted suspend key
    key_stab               khts   kT       KEY_STAB, 0524, sent by set-tab key
    key_sundo              kUND   !3       KEY_SUNDO, 0626, sent by shifted undo key
    key_suspend            kspd   &7       KEY_SUSPEND, 0627, sent by suspend key
    key_undo               kund   &8       KEY_UNDO, 0630, sent by undo key
    key_up                 kcuu1  ku       KEY_UP, 0403, sent by terminal up-arrow key
    keypad_local           rmkx   ke       Out of ``keypad-transmit'' mode
    keypad_xmit            smkx   ks       Put terminal in ``keypad-transmit'' mode
    lab_f0                 lf0    l0       Labels on function key f0 if not f0
    lab_f1                 lf1    l1       Labels on function key f1 if not f1

    lab_f2                 lf2     l2       Labels on function key f2 if not f2
    lab_f3                 lf3     l3       Labels on function key f3 if not f3
    lab_f4                 lf4     l4       Labels on function key f4 if not f4
    lab_f5                 lf5     l5       Labels on function key f5 if not f5
    lab_f6                 lf6     l6       Labels on function key f6 if not f6
    lab_f7                 lf7     l7       Labels on function key f7 if not f7
    lab_f8                 lf8     l8       Labels on function key f8 if not f8
    lab_f9                 lf9     l9       Labels on function key f9 if not f9
    lab_f10                lf10    la       Labels on function key f10 if not f10
    label_format           fln     Lf       Label format
    label_off              rmln    LF       Turn off soft labels
    label_on               smln    LO       Turn on soft labels
    meta_off               rmm     mo       Turn off "meta mode"
    meta_on                smm     mm       Turn on "meta mode" (8th bit)
    micro_column_address   mhpa    ZY       Like columnaddress for micro adjustment**
    micro_down             mcud1   ZZ       Like cursordown for micro adjustment
    micro_left             mcub1   Za       Like cursorleft for micro adjustment
    micro_right            mcuf1   Zb       Like cursorright for micro adjustment
    micro_row_address      mvpa    Zc       Like rowaddress for micro adjustment**
    micro_up               mcuu1   Zd       Like cursorup for micro adjustment
    newline                nel     nw       Newline (behaves like cr followed by lf)
    order_of_pins          porder  Ze       Matches software bits to print-head pins
    orig_colors            oc      oc       Set all color(-pair)s to the original ones
    orig_pair              op      op       Set default color-pair to the original one
    pad_char               pad     pc       Pad character (rather than null)
    parm_dch               dch     DC       Delete #1 chars (G*)
    parm_delete_line       dl      DL       Delete #1 lines (G*)
    parm_down_cursor       cud     DO       Move down #1 lines. (G*)
    parm_down_micro        mcud    Zf       Like parmdowncursor for micro adjust. (G*)
    parm_ich               ich     IC       Insert #1 blank chars (G*)
    parm_index             indn    SF       Scroll forward #1 lines. (G)
    parm_insert_line       il      AL       Add #1 new blank lines (G*)
    parm_left_cursor       cub     LE       Move cursor left #1 spaces (G)
    parm_left_micro        mcub    Zg       Like parmleftcursor for micro adjust.**
    parm_right_cursor      cuf     RI       Move right #1 spaces. (G*)
    parm_right_micro       mcuf    Zh       Like parmrightcursor for micro adjust.**
    parm_rindex            rin     SR       Scroll backward #1 lines. (G)
    parm_up_cursor         cuu     UP       Move cursor up #1 lines. (G*)
    parm_up_micro          mcuu    Zi       Like parmupcursor for micro adjust.**
    pkey_key               pfkey   pk       Prog funct key #1 to type string #2
    pkey_local             pfloc   pl       Prog funct key #1 to execute string #2
    pkey_xmit              pfx     px       Prog funct key #1 to xmit string #2
    plab_norm              pln     pn       Prog label #1 to show string #2
    print_screen           mc0     ps       Print contents of the screen
    prtr_non               mc5p    pO       Turn on the printer for #1 bytes
    prtr_off               mc4     pf       Turn off the printer
    prtr_on                mc5     po       Turn on the printer
    pulse                  pulse   PU       Select pulse dialing
    quick_dial             qdial   QD       Dial phone number #1, without progress detection
    remove_clock           rmclk   RC       Remove time-of-day clock
    repeat_char            rep     rp       Repeat char #1 #2 times (G*)
    req_for_input          rfi     RF       Send next input char (for ptys)
    reset_1string          rs1     r1       Reset terminal completely to sane modes
    reset_2string          rs2     r2       Reset terminal completely to sane modes
    reset_3string          rs3     r3       Reset terminal completely to sane modes
    reset_file             rf      rf       Name of file containing reset string
    restore_cursor         rc      rc       Restore cursor to position of last sc
    row_address            vpa     cv       Vertical position absolute (G)
    save_cursor            sc      sc       Save cursor position
    scroll_forward         ind     sf       Scroll text up
    scroll_reverse         ri      sr       Scroll text down
    select_char_set        scs     Zj       Select character set**
    set_attributes         sgr     sa       Define the video attributes (G) #1-#9
    set_background         setb    Sb       Set current background color
    set_bottom_margin      smgb    Zk       Set bottom margin at current line
    set_bottom_margin_parm smgbp   Zl       Set bottom margin at line #1**[
    set_clock              sclk    SC       Set time-of-day clock
    set_color_pair         scp     sp       Set current color-pair
    set_foreground         setf    Sf       Set current foreground color1
    set_left_margin        smgl    ML       Set left margin at current line
    set_left_margin_parm   smglp   Zm       Set left margin at column #1**
    set_right_margin       smgr    MR       Set right margin at current column
    set_right_margin_parm  smgrp   Zn       Set right margin at column #1**
    set_tab                hts     st       Set a tab in all rows, current column
    set_top_margin         smgt    Zo       Set top margin at current line
    set_top_margin_parm    smgtp   Zp       Set top margin at line #1**
    set_window             wind    wi       Current window is lines #1-#2 cols #3-#4 (G)
    start_bit_image        sbim    Zq       Start printing bit image graphics**
    start_char_set_def     scsd    Zr       Start definition of a character set**
    stop_bit_image         rbim    Zs       End printing bit image graphics
    stop_char_set_def      rcsd    Zt       End definition of a character set


    subscript_characters   subcs   Zu       List of ``subscript-able'' characters
    superscript_characters supcs   Zv       List of ``superscript-able'' characters
    tab                    ht      ta       Tab to next 8-space hardware tab stop
    these_cause_cr         docr    Zw       Printing any of these chars causes cr
    to_status_line         tsl     ts       Go to status line, col #1 (G)
    tone                   tone    TO       Select touch tone dialing
    underline_char         uc      uc       Underscore one char and move past it
    up_half_line           hu      hu       Half-line up (reverse 1/2 linefeed)
    user0                  u0      u0       User string 0
    user1                  u1      u1       User string 1
    user2                  u2      u2       User string 4
    user3                  u3      u3       User string 3
    user4                  u4      u4       User string 4
    user5                  u5      u5       User string 5
    user6                  u6      u6       User string 6
    user7                  u7      u7       User string 7
    user8                  u8      u8       User string 8
    user9                  u9      u9       User string 9
    wait_tone              wait    WA       Wait for dial tone
    xoff_character         xoffc   XF       X-off character
    xon_character          xonc    XN       X-on character
    xon_character          xonc    XN       Alternate XON character (scancode mode)
    xoff_character         xoffc   XF       Alternate XOFF character (scancode mode)
    zero_motion            zerom   Zx       No motion for the subsequent character


    Booleans

    ______________________________________________________________________________________________
    Cap-    Variable                   Termcap   Description
    name                               Code
    ______________________________________________________________________________________________
    am      auto_right_margin          am        Terminal has automatic margins
    bw      auto_left_margin           bw        cub1 wraps from column 0 to last column
    ccc     can_change                 cc        Terminal can re-define existing color
    chts    hard_cursor                HC        Cursor is hard to see
    cpix    cpi_changes_res            YF        Changing character pitch changes resolution
    cps     print_rate                 Ym        Print rate in characters per second
    crxm    cr_cancels_micro_modem     YB        Using cr turns off micro mode
    cwin    create_window              CW        Define win #1 to go from #2,#3 to #4,#5
    da      memory_above               da        Display may be retained above the screen
    daisy   has_print_wheel            YC        Printer needs operator to change character set
    dclk    display_clock              DK        Display time-of-day clock
    db      memory_below               db        Display may be retained below the screen
    dial    dial_phone                 DI        Dial phone number #1
    eo      erase_overstrike           eo        Can erase overstrikes with a blank
    eslok   status_line_esc_ok         es        Escape can be used on the status line
    gn      generic_type               gn        Generic line type (e.g., dialup, switch)
    hc      hard_copy                  hc        Hardcopy terminal
    hls     hue_lightness_saturation   hl        Terminal uses only HLS color notation (Tektronix)
    hs      has_status_line            hs        Has extra "status line"
    hz      tilde_glitch               hz        Hazeltine; can't print tilde (~)


    in      insert_null_glitch         in        Insert mode distinguishes nulls
    km      has_meta_key               km        Has a meta key (shift, sets parity bit)
    lpix    lpi_changes_res            YG        Changing line pitch changes resolution
    mc5i    prtr_silent
    mir     move_insert_mode           mi        Safe to move while in insert mode
    msgr    move_standout_mode         ms        Safe to move in standout modes
    npc     no_pad_char                NP        Pad character doesn't exist
    nrrmc   non_rev_rmcup              NR        smcup does not reverse rmcup
    nxon    needs_xon_xoff             nx        Padding won't work, xon/xoff required
    os      over_strike                os        Terminal overstrikes on hard-copy terminal
    sam     semi_auto_right_margin     YE        Printing in last column causes cr
    ul      transparent_underline      ul        Underline character overstrikes
    xenl    eat_newline_glitch         xn        Newline ignored after 80 columns (Concept)
    xhp     ceol_standout_glitch       xs        Standout not erased by overwriting (hp)
    xhpa    col_addr_glitch            YA        Only positive motion for hpa/mhpa caps
    xon     xon_xoff                   xo        Terminal uses xon/xoff handshaking
    xsb     no_esc_ctlc                xb        Beehive (f1=escape, f2=ctrl C)
    xt      dest_tabs_magic_smso       xt        Destructive tabs, magic smso char (t1061)
    xvpa    row_addr_glitch            YD        Only positive motion for vpa/mvpa caps


    Numbers

    ________________________________________________________________________________________________
    Cap-     Variable               Termcap   Description
    name                            Code
    ________________________________________________________________________________________________
    bufsz    buffer_capacity        Ya        Number of bytes buffered before printing
    colors   max_colors             Co        Maximum number of colors on the screen
    cols     columns                co        Number of columns in a line
    cps      print_rate             Ym        Average print rate in characters per second
    it       init_tabs              it        Tabs initially every # spaces
    lh       label_height           lh        Number of rows in each label
    lines    lines                  li        Number of lines on a screen or a page
    lm       lines_of_memory        lm        Lines of memory if > lines; 0 means varies
    lw       label_width            lw        Number of columns in each label
    maddr    max_micro_address      Yd        Maximum value in micro...address
    mcs      micro_col_size         Yf        Character step size when in micro mode
    mjump    max_micro_jump         Ye        Maximum value in parm...micro
    mls      micro_line_size        Yg        Line step size when in micro mode
    ncv      no_color_video         NC        Video attributes that can't be used with colors
    nlab     num_labels             Nl        Number of labels on screen (start at 1)
    npins    number_of_pins         Yh        Number of pins in print-head
    orc      output_res_char        Yi        Horizontal resolution in units per character
    orhi     output_res_horz_inch   Yk        Horizontal resolution in units per inch
    orl      output_res_line        Yj        Vertical resolution in units per line
    orvi     output_res_vert_inch   Yl        Vertical resolution in units per inch


    pairs    max_pairs              pa        Maximum number of color-pairs on the screen
    pb       padding_baud_rate      pb        Lowest baud rate where padding needed
    spinh    dot_horz_spacing       Yc        Spacing of dots horizontally in dots per inch
    spinv    dot_vert_spacing       Yb        Spacing of pins vertically in pins per inch
    vt       virtual_terminal       vt        Virtual terminal number (UNIX system)
    widcs    wide_char_size         Yn        Character step size when in double wide mode
    wsl      width_status_line      ws        Number of columns in status line
    xmc      magic_cookie_glitch    sg        Number of blank characters left by smso or rmso


    Strings

    _______________________________________________________________________________________
    Cap-    Variable              Termcap  Description
    name                          Code
    _______________________________________________________________________________________
    acsc    acs_chars             ac       Graphic charset pairs aAbBcC - def=vt100
    bel     bell                  bl       Audible signal (bell)
    blink   enter_blink_mode      mb       Turn on blinking
    bold    enter_bold_mode       md       Turn on bold (extra bright) mode
    cbt     back_tab              bt       Back tab
    chr     change_res_horz       ZC       Change horizontal resolution**
    civis   cursor_invisible      vi       Make cursor invisible
    clear   clear_screen          cl       Clear screen and home cursor (*)
    cmdch   command_character     CC       Terminal settable cmd character in prototype
    cnorm   cursor_normal         ve       Make cursor appear normal (undo vs/vi)
    cpi     change_char_pitch     ZA       Change number of characters per inch**
    cr      carriage_return       cr       Carriage return (*)
    csnm    char_set_names        Zy       List of character set names
    csr     change_scroll_region  cs       Change to lines #1 through #2 (vt100) (G)
    cub     parm_left_cursor      LE       Move cursor left #1 spaces (G)
    cub1    cursor_left           le       Move left one space.
    cud     parm_down_cursor      DO       Move down #1 lines. (G*)
    cuf     parm_right_cursor     RI       Move right #1 spaces. (G*)
    cuf1    cursor_right          nd       Non-destructive space (cursor or carriage right)
    cup     cursor_address        cm       Move to row #1 col #2 (G)


    cuu     parm_up_cursor        UP       Move cursor up #1 lines. (G*)
    cvr     change_res_vert       ZD       Change vertical resolution**
    cvvis   cursor_visible        vs       Make cursor very visible
    dch     parm_dch              DC       Delete #1 chars (G*)
    dch1    delete_character      dc       Delete character (*)
    defc    define_char           ZE       Define a character in a character set
    dim     enter_dim_mode        mh       Turn on half-bright mode
    dl      delete_line           dl1      Delete line (*)
    dl      parm_delete_line      DL       Delete #1 lines (G*)
    do      cursor_down           do       Down one line
    docr    these_cause_cr        Zw       Printing any of these chars causes cr
    dsl     dis_status_line       ds       Disable status line
    ech     erase_chars           ec       Erase #1 characters (G)
    ed      clr_eos               cd       Clear to end of display (*)
    el      clr_eol               ce       Clear to end of line
    el1     clr_bol               cb       Clear to beginning of line, inclusive
    enacs   ena_acs               eA       Enable alternate character set
    ff      form_feed             ff       Hardcopy terminal page eject (*)
    flash   flash_screen          vb       Visible bell (may not move cursor)
    fln     label_format          Lf       Label format
    fsl     from_status_line      fs       Return from status line

    hd      down_half_line       hd       Half-line down (forward 1/2 linefeed)
    home    cursor_home          ho       Home cursor (if no cup)
    hook    flash_hook           fh       Flash the switch hook
    hpa     column_address       ch       Horizontal position absolute (G)
    ht      tab                  ta       Tab to next 8-space hardware tab stop
    hts     set_tab              st       Set a tab in all rows, current column
    hu      up_half_line         hu       Half-line up (reverse 1/2 linefeed)
    hup     hangup               HU       Hang-up phone
    ich     parm_ich             IC       Insert #1 blank chars (G*)
    ich1    insert_character     ic       Insert character
    if      init_file            if       Name of initialization file
    il      parm_insert_line     AL       Add #1 new blank lines (G*)
    il1     insert_line          al       Add new blank line (*)
    ind     scroll_forward       sf       Scroll text up
    indn    parm_index           SF       Scroll forward #1 lines. (G)
    initc   initialize_color     Ic       Initialize the definition of color
    initp   initialize_pair      Ip       Initialize color-pair
    invis   enter_secure_mode    mk       Turn on blank mode (characters invisible)
    ip      insert_padding       ip       Insert pad after character inserted (*)
    iprog   init_prog            iP       Path name of program for initialization
    is1     init_1string         i1       Terminal or printer initialization string
    is2     init_2string         is       Terminal or printer initialization string
    is3     init_3string         i3       Terminal or printer initialization string
    kBEG    key_sbeg             &9       KEY_SBEG, 0572, sent by shifted beginning key
    kCAN    key_scancel          &0       KEY_SCANCEL, 0573, sent by shifted cancel key
    kCMD    key_scommand         *1       KEY_SCOMMAND, 0574, sent by shifted command key
    kCPY    key_scopy            *2       KEY_SCOPY, 0575, sent by shifted copy key
    kCRT    key_screate          *3       KEY_SCREATE, 0576, sent by shifted create key
    kDC     key_sdc              *4       KEY_SDC, 0577, sent by shifted delete-char key
    kDL     key_sdl              *5       KEY_SDL, 0600, sent by shifted delete-line key
    kEND    key_send             *7       KEY_SEND, 0602, sent by shifted end key
    kEOL    key_seol             *8       KEY_SEOL, 0603, sent by shifted clear-line key
    kEXT    key_sexit            *9       KEY_SEXIT, 0604, sent by shifted exit key
    kFND    key_sfind            *0       KEY_SFIND, 0605, sent by shifted find key
    kHLP    key_shelp            #1       KEY_SHELP, 0606, sent by shifted help key
    kHOM    key_shome            #2       KEY_SHOME, 0607, sent by shifted home key
    kIC     key_sic              #3       KEY_SIC, 0610, sent by shifted input key
    kLFT    key_sleft            #4       KEY_SLEFT, 0611, sent by shifted left-arrow key
    kMOV    key_smove            b        KEY_SMOVE, 0613, sent by shifted move key
    kMSG    key_smessage         %a       KEY_SMESSAGE, 0612, sent by shifted message key
    kNXT    key_snext            %c       KEY_SNEXT, 0614, sent by shifted next key
    kOPT    key_soptions         %d       KEY_SOPTIONS, 0615, sent by shifted options key
    kPRT    key_sprint           %f       KEY_SPRINT, 0617, sent by shifted print key
    kPRV    key_sprevious        %e       KEY_SPREVIOUS, 0616, sent by shifted prev key
    kRDO    key_sredo            %g       KEY_SREDO, 0620, sent by shifted redo key
    kRES    key_srsume           %j       KEY_SRSUME, 0623, sent by shifted resume key
    kRIT    key_sright           %i       KEY_SRIGHT, 0622, sent by shifted right-arrow key
    kRPL    key_sreplace         %h       KEY_SREPLACE, 0621, sent by shifted replace key
    kSAV    key_ssave            !1       KEY_SSAVE, 0624, sent by shifted save key
    kSPD    key_ssuspend         !2       KEY_SSUSPEND, 0625, sent by shifted suspend key
    kUND    key_sundo            !3       KEY_SUNDO, 0626, sent by shifted undo key
    ka1     key_a1               K1       KEY_A1, 0534, upper left of keypad
    ka3     key_a3               K3       KEY_A3, 0535, upper right of keypad
    kb2     key_b2               K2       KEY_B2, 0536, center of keypad
    kbeg    key_beg              @1       KEY_BEG, 0542, sent by beg(inning) key
    kbs     key_backspace        kb       KEY_BACKSPACE, 0407, sent by backspace key
    kc1     key_c1               K4       KEY_C1, 0537, lower left of keypad
    kc3     key_c3               K5       KEY_C3, 0540, lower right of keypad
    kcan    key_cancel           @2       KEY_CANCEL, 0543, sent by cancel key
    kcbt    key_btab             kB       KEY_BTAB, 0541, sent by back-tab key
    kclo    key_close            @3       KEY_CLOSE, 0544, sent by close key
    kclr    key_clear            kC       KEY_CLEAR, 0515, sent by clear-screen or erase key
    kcmd    key_command          @4       KEY_COMMAND, 0545, sent by cmd (command) key
    kcpy    key_copy             @5       KEY_COPY, 0546, sent by copy key
    kcrt    key_create           @6       KEY_CREATE, 0547, sent by create key
    kctab   key_ctab             kt       KEY_CTAB, 0525, sent by clear-tab key
    kcub1   key_left             kl       KEY_LEFT, 0404, sent by terminal left-arrow key
    kcud1   key_down             kd       KEY_DOWN, 0402, sent by terminal down-arrow key
    kcuf1   key_right            kr       KEY_RIGHT, 0405, sent by terminal right-arrow key
    kcuu1   key_up               ku       KEY_UP, 0403, sent by terminal up-arrow key
    kdch1   key_dc               kD       KEY_DC, 0512, sent by delete-character key
    kdl1    key_dl               kL       KEY_DL, 0510, sent by delete-line key
    ked     key_eos              ked      KEY_EOS, 0516, sent by clear-to-end-of-screen key
    kel     key_eol              kE       KEY_EOL, 0517, sent by clear-to-end-of-line key
    kend    key_end              @7       KEY_END, 0550, sent by end key
    kent    key_enter            @8       KEY_ENTER, 0527, sent by enter/send key
    kext    key_exit             @9       KEY_EXIT, 0551, sent by exit key
    kf0     key_f0               k0       KEY_F(0), 0410, sent by function key f0
    kf1     key_f1               k1       KEY_F(C), 0411, sent by function key f1
    kf10    key_f10              k;       KEY_F(ADM), 0422, sent by function key f10
    kf11    key_f11              F1       KEY_F(ADM), 0423, sent by function key f11
    kf12    key_f12              F2       KEY_F(ADM), 0424, sent by function key f12
    kf13    key_f13              F3       KEY_F(ADM), 0425, sent by function key f13
    kf14    key_f14              F4       KEY_F(ADM), 0426, sent by function key f14
    kf15    key_f15              F5       KEY_F(ADM), 0427, sent by function key f15
    kf16    key_f16              F6       KEY_F(ADM), 0430, sent by function key f16

    kf17    key_f17                  F7       KEY_F(ADM), 0431, sent by function key f17
    kf18    key_f18                  F8       KEY_F(ADM), 0432, sent by function key f18
    kf19    key_f19                  F9       KEY_F(ADM), 0433, sent by function key f19
    kf2     key_f2                   k2       KEY_F(S), 0412, sent by function key f2
    kf20    key_f20                  FA       KEY_F(20), 0434, sent by function key f20
    kf21    key_f21                  FB       KEY_F(21), 0435, sent by function key f21
    kf22    key_f22                  FC       KEY_F(22), 0436, sent by function key f22
    kf23    key_f23                  FD       KEY_F(23), 0437, sent by function key f23
    kf24    key_f24                  FE       KEY_F(24), 0440, sent by function key f24
    kf25    key_f25                  FF       KEY_F(25), 0441, sent by function key f25
    kf26    key_f26                  FG       KEY_F(26), 0442, sent by function key f26
    kf27    key_f27                  FH       KEY_F(27), 0443, sent by function key f27
    kf28    key_f28                  FI       KEY_F(28), 0444, sent by function key f28
    kf29    key_f29                  FJ       KEY_F(29), 0445, sent by function key f29
    kf3     key_f3                   k3       KEY_F(S), 0413, sent by function key f3
    kf30    key_f30                  FK       KEY_F(S), 0446, sent by function key f30
    kf31    key_f31                  FL       KEY_F(S), 0447, sent by function key f31
    kf32    key_f32                  FM       KEY_F(S), 0450, sent by function key f32
    kf33    key_f33                  FN       KEY_F(ADM), 0451, sent by function key f33
    kf34    key_f34                  FO       KEY_F(S), 0452, sent by function key f34
    kf35    key_f35                  FP       KEY_F(S), 0453, sent by function key f35
    kf36    key_f36                  FQ       KEY_F(S), 0454, sent by function key f36
    kf37    key_f37                  FR       KEY_F(S), 0455, sent by function key f37
    kf38    key_f38                  FS       KEY_F(S), 0456, sent by function key f38
    kf39    key_f39                  FT       KEY_F(S), 0457, sent by function key f39
    kf4     key_f4                   k4       KEY_F(F), 0414, sent by function key f4
    kf40    key_f40                  FU       KEY_F(40), 0460, sent by function key f40
    kf41    key_f41                  FV       KEY_F(41), 0461, sent by function key f41
    kf42    key_f42                  FW       KEY_F(42), 0462, sent by function key f42
    kf43    key_f43                  FX       KEY_F(43), 0463, sent by function key f43
    kf44    key_f44                  FY       KEY_F(44), 0464, sent by function key f44
    kf45    key_f45                  FZ       KEY_F(45), 0465, sent by function key f45
    kf46    key_f46                  Fa       KEY_F(46), 0466, sent by function key f46
    kf47    key_f47                  Fb       KEY_F(47), 0467, sent by function key f47
    kf48    key_f48                  Fc       KEY_F(48), 0470, sent by function key f48
    kf49    key_f49                  Fd       KEY_F(49), 0471, sent by function key f49
    kf5     key_f5                   k5       KEY_F(M), 0415, sent by function key f5


    kf50    key_f50                  Fe       KEY_F(50), 0472, sent by function key f50
    kf51    key_f51                  Ff       KEY_F(51), 0473, sent by function key f51
    kf52    key_f52                  Fg       KEY_F(52), 0474, sent by function key f52
    kf53    key_f53                  Fh       KEY_F(53), 0475, sent by function key f53
    kf54    key_f54                  Fi       KEY_F(54), 0476, sent by function key f54
    kf55    key_f55                  Fj       KEY_F(55), 0477, sent by function key f55
    kf56    key_f56                  Fk       KEY_F(56), 0500, sent by function key f56
    kf57    key_f57                  Fl       KEY_F(57), 0501, sent by function key f57
    kf58    key_f58                  Fm       KEY_F(58), 0502, sent by function key f58
    kf59    key_f59                  Fn       KEY_F(59), 0503, sent by function key f59
    kf6     key_f6                   k6       KEY_F(6), 0416, sent by function key f6
    kf60    key_f60                  Fo       KEY_F(60), 0504, sent by function key f60
    kf61    key_f61                  Fp       KEY_F(61), 0505, sent by function key f61
    kf62    key_f62                  Fq       KEY_F(62), 0506, sent by function key f62
    kf63    key_f63                  Fr       KEY_F(63), 0507, sent by function key f63
    kf7     key_f7                   k7       KEY_F(7), 0417, sent by function key f7
    Kf8     key_f8                   k8       KEY_F(8), 0420, sent by function key f8
    kf9     key_f9                   k9       KEY_F(9), 0421, sent by function key f9
    kfnd    key_find                 @0       KEY_FIND, 0552, sent by find key
    khlp    key_help                 %1       KEY_HELP, 0553, sent by help key
    khome   key_home                 kh       KEY_HOME, 0406, sent by home key
    khts    key_stab                 kT       KEY_STAB, 0524, sent by set-tab key
    kich1   key_ic                   kI       KEY_IC, 0513, sent by ins-char/enter ins-mode key
    kil1    key_il                   kA       KEY_IL, 0511, sent by insert-line key
    kind    key_sf                   kF       KEY_SF, 0520, sent by scroll-forward/down key
    kll     key_ll                   kH       KEY_LL, 0533, sent by home-down key


    kmov    key_move                 %4       KEY_MOVE, 0556, sent by move key
    kmrk    key_mark                 %2       KEY_MARK, 0554, sent by mark key
    kmsg    key_message              %3       KEY_MESSAGE, 0555, sent by message key
    knp     key_npage                kN       KEY_NPAGE, 0522, sent by next-page key
    knxt    key_next                 %5       KEY_NEXT, 0557, sent by next-object key
    kopn    key_open                 %6       KEY_OPEN, 0560, sent by open key
    kopt    key_options              %7       KEY_OPTIONS, 0561, sent by options key
    kpp     key_ppage                kP       KEY_PPAGE, 0523, sent by previous-page key
    kprt    key_print                %9       KEY_PRINT, 0532, sent by print or copy key
    kprv    key_previous             %8       KEY_PREVIOUS, 0562, sent by previous-object key
    krdo    key_redo                 %0       KEY_REDO, 0563, sent by redo key
    kref    key_reference            &1       KEY_REFERENCE, 0564, sent by ref(erence) key
    kres    key_resume               &5       KEY_RESUME, 0570, sent by resume key
    krfr    key_refresh              &2       KEY_REFRESH, 0565, sent by refresh key
    kri     key_sr                   kR       KEY_SR, 0521, sent by scroll-backward/up key
    krmir   key_eic                  kM       KEY_EIC, 0514, sent by rmir or smir in insert mode
    krpl    key_replace              &3       KEY_REPLACE, 0566, sent by replace key
    krst    key_restart              &4       KEY_RESTART, 0567, sent by restart key
    ksav    key_save                 &6       KEY_SAVE, 0571, sent by save key
    kslt    key_select               *6       KEY_SELECT, 0601, sent by select key
    kspd    key_suspend              &7       KEY_SUSPEND, 0627, sent by suspend key
    ktbc    key_catab                ka       KEY_CATAB, 0526, sent by clear-all-tabs key
    kund    key_undo                 &8       KEY_UNDO, 0630, sent by undo key
    lf0     lab_f0                   l0       Labels on function key f0 if not f0
    lf1     lab_f1                   l1       Labels on function key f1 if not f1
    lf10    lab_f10                  la       Labels on function key f10 if not f10
    lf2     lab_f2                   l2       Labels on function key f2 if not f2
    lf3     lab_f3                   l3       Labels on function key f3 if not f3
    lf4     lab_f4                   l4       Labels on function key f4 if not f4
    lf5     lab_f5                   l5       Labels on function key f5 if not f5
    lf6     lab_f6                   l6       Labels on function key f6 if not f6
    lf7     lab_f7                   l7       Labels on function key f7 if not f7
    lf8     lab_f8                   l8       Labels on function key f8 if not f8
    lf9     lab_f9                   l9       Labels on function key f9 if not f9
    ll      cursor_to_ll             ll       Last line, first column (if no cup)
    lpi     change_line_pitch        ZB       Change number of lines per inch**
    ma      max_attributes           ma       Maximum combined video attributes terminal can display
    mc0     print_screen             ps       Print contents of the screen
    mc4     prtr_off                 pf       Turn off the printer
    mc5     prtr_on                  po       Turn on the printer
    mc5p    prtr_non                 pO       Turn on the printer for #1 bytes
    mcub    parm_left_micro          Zg       Like parmleftcursor for micro adjust.**
    mcub1   micro_left               Za       Like cursorleft for micro adjustment
    mcud    parm_down_micro          Zf       Like parmdowncursor for micro adjust. (G*)
    mcud1   micro_down               ZZ       Like cursordown for micro adjustment
    mcuf    parm_right_micro         Zh       Like parmrightcursor for micro adjust.**
    mcuf1   micro_right              Zb       Like cursorright for micro adjustment
    mcuu    parm_up_micro            Zi       Like parmupcursor for micro adjust.**
    mcuu1   micro_up                 Zd       Like cursorup for micro adjustment
    mgc     clear_margins            MC       Clear all margins (top, bottom, and sides)
    mhpa    micro_column_address     ZY       Like columnaddress for micro adjustment**
    mrcup   cursor_mem_address       CM       Memory relative cursor addressing (G)
    mvpa    micro_row_address        Zc       Like rowaddress for micro adjustment**
    ndscr   non_dest_scroll_region   ND       Scrolling region is non-destructive
    nel     newline                  nw       Newline (behaves like cr followed by lf)
    oc      orig_colors              oc       Set all color(-pair)s to the original ones
    op      orig_pair                op       Set default color-pair to the original one
    pad     pad_char                 pc       Pad character (rather than null)
    pause   fixed_pause              PA       Pause for 2-3 seconds
    pfkey   pkey_key                 pk       Prog funct key #1 to type string #2
    pfloc   pkey_local               pl       Prog funct key #1 to execute string #2
    pfx     pkey_xmit                px       Prog funct key #1 to xmit string #2
    pln     plab_norm                pn       Prog label #1 to show string #2
    porder  order_of_pins            Ze       Matches software bits to print-head pins
    prot    enter_protected_mode     mp       Turn on protected mode
    pulse   pulse                    PU       Select pulse dialing
    qdial   quick_dial               QD       Dial phone number #1, without progress detection
    rbim    stop_bit_image           Zs       End printing bit image graphics
    rc      restore_cursor           rc       Restore cursor to position of last sc
    rcsd    stop_char_set_def        Zt       End definition of a character set
    rep     repeat_char              rp       Repeat char #1 #2 times (G*)
    rev     enter_reverse_mode       mr       Turn on reverse video mode
    rf      reset_file               rf       Name of file containing reset string
    rfi     req_for_input            RF       Send next input char (for ptys)
    ri      scroll_reverse           sr       Scroll text down
    rin     parm_rindex              SR       Scroll backward #1 lines. (G)
    ritm    exit_italics_mode        ZR       Disable italics
    rlm     exit_leftward_mode       ZS       Enable rightward (normal) carriage motion
    rmacs   exit_alt_charset_mode    ae       End alternate character set
    rmam    exit_am_mode             RA       Turn off automatic margins
    rmclk   remove_clock             RC       Remove time-of-day clock
    rmcup   exit_ca_mode             te       String to end programs that use cup
    rmdc    exit_delete_mode         ed       End delete mode
    rmicm   exit_micro_mode          ZT       Disable micro motion capabilities
    rmir    exit_insert_mode         ei       End insert mode
    rmkx    keypad_local             ke       Out of ``keypad-transmit'' mode
    rmln    label_off                LF       Turn off soft labels
    rmm     meta_off                 mo       Turn off "meta mode"
    rmp     char_padding             rP       Like ip but when in replace mode
    rmso    exit_standout_mode       se       End standout mode
    rmul    exit_underline_mode      ue       End underscore mode
    rmxon   exit_xon_mode            RX       Turn off xon/xoff handshaking
    rs1     reset_1string            r1       Reset terminal completely to sane modes
    rs2     reset_2string            r2       Reset terminal completely to sane modes
    rs3     reset_3string            r3       Reset terminal completely to sane modes
    rshm    exit_shadow_mode         ZU       Disable shadow printing
    rsubm   exit_subscript_mode      ZV       Disable subscript printing
    rsupm   exit_superscript_mode    ZW       Disable superscript printing
    rum     exit_upward_mode         ZX       Enable downward (normal) carriage motion
    rwidm   exit_doublewide_mode     ZQ       Disable double wide printing
    sbim    start_bit_image          Zq       Start printing bit image graphics**
    sc      save_cursor              sc       Save cursor position
    sclk    set_clock                SC       Set time-of-day clock
    scp     set_color_pair           sp       Set current color-pair
    scs     select_char_set          Zj       Select character set**
    scsd    start_char_set_def       Zr       Start definition of a character set**
    sdrfq   enter_draft_quality      ZG       Set draft quality print
    setb    set_background           Sb       Set current background color
    setf    set_foreground           Sf       Set current foreground color
    sgr     set_attributes           sa       Define the video attributes #1-#9 (G)
    sgr0    exit_attribute_mode      me       Turn off all attributes
    sitm    enter_italics_mode       ZH       Enable italics
    slm     enter_leftward_mode      ZI       Enable leftward carriage motion
    smacs   enter_alt_charset_mode   as       Start alternate character set
    smam    enter_am_mode            SA       Turn on automatic margins
    smcup   enter_ca_mode            ti       String to begin programs that use cup
    smdc    enter_delete_mode        dm       Delete mode (enter)
    smgb    set_bottom_margin        Zk       Set bottom margin at current line
    smgbp   set_bottom_margin_parm   Zl       Set bottom margin at line #1**
    smgl    set_left_margin          ML       Set left margin at current line
    smglp   set_left_margin_parm     Zm       Set left margin at column #1**
    smgr    set_right_margin         MR       Set right margin at current column
    smgrp   set_right_margin_parm    Zn       Set right margin at column #1**
    smgt    set_top_margin           Zo       Set top margin at current line
    smgtp   set_top_margin_parm      Zp       Set top margin at line #1**
    smicm   enter_micro_mode         ZJ       Enable micro motion capabilities
    smir    enter_insert_mode        im       Insert mode (enter)
    smkx    keypad_xmit              ks       Put terminal in ``keypad-transmit'' mode
    smln    label_on                 LO       Turn on soft labels
    smm     meta_on                  mm       Turn on "meta mode" (8th bit)
    smso    enter_standout_mode      so       Begin standout mode
    smxon   enter_xon_mode           SX       Turn on xon/xoff handshaking
    snlq    enter_near_letter_qualityZK       Set near-letter quality print
    snrmq   enter_normal_quality     ZL       Set normal quality print
    sshm    enter_shadow_mode        ZM       Enable shadow printing
    ssubm   enter_subscript_mode     ZN       Enable subscript printing
    ssupm   enter_superscript_mode   ZO       Enable superscript printing
    subcs   subscript_characters     Zu       List of ``subscript-able'' characters
    sum     enter_upward_mode        ZP       Enable upward carriage motion
    supcs   superscript_characters   Zv       List of ``superscript-able'' characters
    swidm   enter_doublewide_mode    ZF       Enable double wide printing
    tbc     clear_all_tabs           ct       Clear all tab stops
    tone    tone                     TO       Select touch tone dialing
    tsl     to_status_line           ts       Go to status line, col #1 (G)
    u0      user0                    u0       User string 0
    u1      user1                    u1       User string 1


    u2      user2                    u2       User string 2
    u3      user3                    u3       User string 3
    u4      user4                    u4       User string 4
    u5      user5                    u5       User string 5
    u6      user6                    u6       User string 6
    u7      user7                    u7       User string 7

    u8      user8                u8       User string 8
    u9      user9                u9       User string 9
    uc      underline_char       uc       Underscore one char and move past it
    up      cursor_up            cuu1     Upline (cursor up)
    vpa     row_address          cv       Vertical position absolute (G)
    wait    wait_tone            WA       Wait for dial tone
    wind    set_window           wi       Current window is lines #1-#2 cols #3-#4 (G)
    wingo   goto_window          WG       Got to window #1
    wnum    maximum_windows      MW       Maximum number of definable windows
    xoffc   xoff_character       XF       X-off character
    xonc    xon_character        XN       X-on character
    zero    zero_motion          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 at this time.

    610 | 610bct | ATT610 | att610 | AT&T 610; 80 column; 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,
        invis=\E[8m,
        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=\b, 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,
        pfx=\E[%p1%d;%p2%l%02dq\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 capa-
    bilities listed:  Boolean, Numeric, and String.  The names of Boolean
    capabilities are often listed as abbreviations or acronyms, such as am
    (short for "automatic margins") in the sample entry.  ("Automatic mar-
    gins" is a short description of an automatic return and linefeed when the
    end of a line is reached.)

    Numeric capabilities are followed by the character ``#'' and then the
    value.  Thus, in the sample, cols (which shows the number of columns
    available on a terminal) gives the value 80 for the AT&T 610.  (Values
    for numeric capabilities may be specified in decimal, octal or hexade-
    cimal, using normal C 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, enclosed in $<..> brackets, as
    in el=\EK$<3>.  Padding characters are supplied by tputs().  The delay
    can be any of the following:  a number (5), a number followed by a ``*''
    (5*), a number followed by a ``/'' (5/), or a number followed by both
    (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 terminal 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.  (Only one decimal
    place is allowed.)

    A ``/'' indicates that the padding is mandatory.  Absence of a ``/'' is
    not shown, if the terminal has xon defined.  Padding information is
    advisory and will be used only for cost estimates or when the terminal is
    in raw mode.  Mandatory padding will be transmitted regardless of the
    setting of xon.

    A number of escape sequences are provided in the string valued capabili-
    ties for easy encoding of characters there.  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 termi-
    nals.)  Finally, characters may be given as three octal digits after a
    backslash (for example, \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 defini-
    tion.

    Preparing descriptions

    The most effective way to prepare a terminal description is by imitating
    the description of a similar terminal in terminfo and building up a
    description gradually, using partial descriptions with vi(C) to check
    that they are correct.  Be aware that a very unusual terminal may expose
    deficiencies in the ability of the terminfo file to describe it or the
    inability of vi(C) to work with that terminal.  To test a new terminal
    description, set the environment variable TERMINFO to a pathname of a
    directory containing the compiled description you are working on: pro-
    grams will then look there rather than in /usr/lib/terminfo.  To get the
    padding for insert-line correct (if the terminal manufacturer did not
    document it) a severe test is to comment out xon, edit a large file at
    9600 baud with vi(C), delete 16 or so lines from the middle of the
    screen, then hit 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 terminal is given by the cols
    numeric capability.  If the terminal has a screen, then the number of
    lines on the screen is given by the lines capability.  If the 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 terminal is a printing terminal,
    with no soft copy unit, give it both hc and os.  (os applies to storage
    scope terminals, such as the Tektronix 4010 series, as well as hard-copy
    and APL terminals.)  If there is a code to move the cursor to the left
    edge of the current row, give this as cr.  (Normally this will be car-
    riage return, control M.)  If there is a code to produce an audible sig-
    nal (such as a bell or a beep), specify it as bel.  If the terminal uses
    the xon-xoff flow-control protocol, like most terminals, specify xon.

    If there is a code to move the cursor one position to the left (such as
    backspace), that capability should be given as cub1.  Similarly, codes to
    move to the right, up, and down should be given as cuf1, cuu1, and cud1.
    These local cursor motions should 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 given, and should never attempt to go up locally off the top.  In
    order to scroll text up, a program will go to the bottom left corner of
    the screen and send 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 which
    have the same semantics as ind and ri except that they take one parame-
    ter, and scroll that many lines.  They are also undefined except at the
    appropriate edge of the screen.

    If the terminal wraps around to the beginning of the next line when it
    reaches the right margin, then it should have the am capability.  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.  The only local motion which is defined from the
    left edge is if bw is given: then a cub1 from the left edge 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 terminal has switch selectable automatic
    margins, the terminfo file usually assumes that this is on; that is, am.
    If the terminal has a command which 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 terminal
    has no cr and lf it may still be possible to craft a working nel out of
    one or both of them.

    These capabilities suffice to describe hardcopy and screen terminals.
    Thus the model 33 teleprinter is described as:


       hc, os, xon
          cols#72,
          bel=^G, cr=\r, cud1=\n, 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 in the terminal
    are described by a parameterized string capability, with printf(S) -like
    escapes (%x) in it.  For example, to address the cursor, the cup capabil-
    ity 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 mem-
    ory-relative cursor addressing, that can be indicated by mrcup.

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

    The % encodings have the following meanings:

      %%        outputs `%'
      %[[:]flags][width[.precision]][doxXs]
                as in printf, flags are [-+#] and space
      %c        print pop() gives %c

      %p[1-9]   push ith parm
      %P[a-z]   set variable [a-z] to pop()
      %g[a-z]   get variable [a-z] and push it
      %'c'      push char constant c
      %{nn}     push decimal constant nn
      %l        push strlen(pop())

      %+ %- %* %/ %m
                arithmetic (%m is mod):  push(pop() op pop())
      %& %| %^  bit operations:  push(pop() op pop())
      %= %> %<  logical operations:  push(pop() op pop())
      %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:
           %? c %t b %e c %t b %e c %t b %e c %t b %e b%;
           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, for example, ``%:-16.16s''.

    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''.  Terminals which 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 (S), 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 fea-
    tures on the terminal.)

    If the terminal has row or column absolute-cursor addressing, these can
    be given as single parameter capabilities hpa (horizontal position abso-
    lute) 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 (for example, 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 terminal does not
    have cup, such as the Tektronix 4025.

    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 cur-
    sor 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 parame-
    ter 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, unfortunately, 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 fea-
    tures.

    To determine whether a terminal has destructive scrolling regions or
    non-destructive scrolling regions, create a scrolling region in the mid-
    dle 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.  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 distin-
    guish 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) no terminals whose
    insert mode cannot be described with the single attribute have been seen.

    terminfo can describe both terminals which have an insert mode and termi-
    nals 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 termi-
    nals with a true insert mode will not give ich1; terminals which send a
    sequence to open a screen position should give it here.  (If your termi-
    nal has both, insert mode is usually preferable to ich1.  Do not give
    both unless the terminal actually requires both to be used in combina-
    tion.)  If post-insert padding is needed, give this as a number of mil-
    liseconds 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 capabil-
    ity, 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 (for example, 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 terminal 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.

    If you set any display attributes for highlighting, you will also want to
    provide the capability for turning them off.  To do so, set sgr0.

    You should choose one display method as standout mode (see curses(S)) and
    use it to highlight error messages and other kinds of 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.

    Codes to begin underlining and end underlining can be given as smul and
    rmul, respectively.  If the terminal has a code to underline the current
    character and move the cursor one space to the right, such as the Micro-
    Term MIME, this can be given as uc.

    For historical reasons, some programs interpret rmso, rmul to mean ``turn
    off all attributes'', not just standout and underline, respectively.

    If there is a sequence to set arbitrary combinations of modes, this
    should be given as sgr (set attributes), taking nine parameters.  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.  (See the example
    at the end of this section.)

    Terminals with the ``magic cookie'' glitch (xmc) deposit special ``cook-
    ies'' when they receive mode-setting sequences, which affect the display
    algorithm rather than having extra bits for each character.  Some termi-
    nals, 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 send-
    ing 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 (for example, to make 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 the terminal needs to be in a special mode when running a program that
    uses these capabilities, the codes to enter and exit this mode 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 terminal has
    only memory relative cursor addressing and not screen relative cursor
    addressing, a one screen-sized window must be fixed into the terminal for
    cursor addressing to work properly.  This is also used for the Tektronix
    4025, where smcup sets the command character to be the one used by ter-
    minfo.  If the smcup sequence will not restore the screen after a rmcup
    sequence is output (to the state prior to outputting rmcup), specify
    nrrmc.

    If your terminal generates underlined characters by using the underline
    character (with no special codes needed) even though it does not other-
    wise overstrike characters, then you should give the capability ul.  For
    terminals where a character overstriking another leaves both characters
    on the screen, give the capability os.  If overstrikes are erasable with
    a blank, then this should be indicated by giving eo.

    Example of highlighting:  assume that the terminal under question needs
    the following escape sequences to turn on various modes.


    _________________________________________________________________________
    tparm            attribute         escape sequence
    parameter
    _________________________________________________________________________
                     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
                     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
    does not have protect mode, either, but that cannot be simulated in any
    way, so  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 out-
    put 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
    ^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%;,

    Section 1-8: Keypad

    If the terminal has a keypad that transmits codes when the keys are
    pressed, this information can be given.  Note that it is not possible to
    handle terminals where the keypad only works in local (this applies, for
    example, to the unshifted Hewlett-Packard 2621 keys).  If the keypad can
    be set to transmit or not transmit, give these codes as smkx and rmkx.
    Otherwise the keypad is assumed to transmit.

    The codes sent by the left arrow, right arrow, up arrow, down arrow, and
    home keys can be given as kcub1, kcuf1, kcuu1, kcud1, and khome respec-
    tively.  If there are function keys such as f0, f1, ..., f63, the codes
    they send can be given 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 given as pfkey, pfloc, and pfx.
    A string to program their soft-screen labels can be given as pln.  Each
    of these strings takes two parameters: the function key number to program
    (from 0 to 10) and the string to program it with.  Function key numbers
    out of this range may program undefined keys in a terminal-dependent
    manner.  The difference between the capabilities is that pfkey causes
    pressing the given key to give the same result 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 how many soft labels there are
    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.

    Section 1-9: Tabs and initialization

    If the terminal has hardware tabs, the command to advance to the next tab
    stop can be given as ht (usually control I).  A ``backtab'' command which
    moves left to the next tab stop can be given as cbt.  By convention, if
    the teletype modes indicate that tabs are being expanded by the computer
    rather than being sent to the terminal, programs should not use ht or cbt
    even if they are present, since the user may not have the tab stops prop-
    erly set.  If the terminal has hardware tabs which are initially set
    every n spaces when the terminal is powered up, the numeric parameter it
    is given, showing the number of spaces the tabs are set to.  This is nor-
    mally used by tput init (see tput(C)) to determine whether to set the
    mode for hardware tab expansion and whether to set the tab stops.  If the
    terminal has tab stops that can be saved in nonvolatile memory, the ter-
    minfo 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 terminal; iprog, the path name of a program to be run to initialize
    the terminal; and if, the name of a file containing long initialization
    strings.  These strings are expected to set the terminal into modes con-
    sistent with the rest of the terminfo description.  They must be sent to
    the terminal 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(C); see profile(M).

    Most initialization is done with is2.  Special terminal 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 harder 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/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 pro-
    duce 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 nor-
    mally be part of is2, but on some terminals it causes an annoying glitch
    on the screen and is not normally needed since 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.

    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(7) 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 nor-
    mally (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, for example, 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 terminal 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 ter-
    minal, extended slightly with some characters from the AT&T 4410v1 termi-
    nal.

    _________________________________________________________________________
    glyph name                     vt100+
                                   character
    _________________________________________________________________________
    arrow pointing right           +
    arrow pointing left            ,
    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


    vertical line                  x

    left tee                       t
    right tee                      u
    bottom tee                     v
    top tee                        w
    bullet                         ~

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

    _________________________________________________________________________
    glyph name                  vt100+        new tty
                                character     character
    _________________________________________________________________________
    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

    There are two methods of color manipulation:  the HP method and the Tek-
    tronix method.  Most existing color terminals belong to one of these two
    classes.

    The Tektronix method uses a set of N predefined colors (usually 8) from
    which a user can select "current" foreground and background colors.  Thus
    the terminal can support up to N colors mixed into N*N color-pairs to be
    displayed on the screen at the same time.

    The HP method restricts the user from defining the foreground indepen-
    dently 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 dif-
    ferent colors, can be defined this way.

    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 can do this), this should be specified
    with ccc (can change color).  To change the definition of a color (Tek-
    tronix method), use initc (initialize color).  It requires four argu-
    ments:  color number (ranging from 0 to colors-1) and three RGB (red,
    green, and blue) values (ranging from 0 to 1,000).

    Tektronix 4100 series terminals use a type of color notation called HLS
    (Hue Lightness Saturation) instead of RGB color notation.  For such ter-
    minals one must define a boolean variable hls.  The last three arguments
    to the initc string would then be HLS values:  H, ranging from 0 to 360;
    and L and S, ranging from 0 to 100.

    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 setf (set
    foreground) and setb (set 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 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 dep-
    icts this correspondence.

    _________________________________________________________________________
    Attribute                      NCV Bit
                                   Number
    _________________________________________________________________________
    A_STANDOUT                     0
    A_UNDERLINE                    1
    A_REVERSE                      2
    A_BLINK                        3
    A_DIM                          4
    A_BOLD                         5
    A_INVIS                        6
    A_PROTECT                      7
    A_ALTCHARSET                   8

    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.  For example, if the terminal uses colors to simulate reverse video
    and bold, bits 2 and 5 should be set to 1.  The resulting values for ncv
    will be 22.

    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.

    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 occur-
    rences of the prototype character are replaced with the character in CC.

    Terminal descriptions that do not represent a specific kind of known ter-
    minal, 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 terminal 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 varia-
    tion, 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 well.
    However, some terminals do not completely match that model, requiring
    special support by terminfo.  These are not to be construed as deficien-
    cies 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 which can not display tilde (~) characters, such as certain
    Hazeltine terminals, should indicate hz.

    Terminals which 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 instead neces-
    sary 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 <Ctrl>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 capa-
    bility 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 dif-
    ferent 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 as
    well as terminals.  To find out what capabilities are available for
    printers as well as for terminals, see the two lists under ``TERMINAL
    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 charac-
    ters 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 hor-
    izontal and vertical resolution.  The view of printing that the terminfo
    currently presents is one of printing inside a uniform matrix:  All char-
    acters 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 hor-
    izontal spacing depends on the size of the character last printed.  The
    terminfo does not make use of this capability, although it does provide
    enough capability definitions to allow an application to simulate propor-
    tional 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 dis-
    tance 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 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 dis-
    tance 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 neces-
    sarily the same as the wide character distance, just that the distances
    do not 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 mode5 (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.


    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 item 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 ``Section 2-7:
    Effect of changing printing resolution'').


    Specification of Printer Resolution


    _________________________________________________________________________
    Effects of Changing the Character/Line Pitches
    Before                         After
    _________________________________________________________________________
    Using cpi with cpix clear:
    orhi '                         orhiorhi
    U
o
r
s
c
i
n'
g
cpi with cpix set: orc=Vcpi 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 ** mark indicates the old value. 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 char- acter would be displayed if printed. terminfo has string capabilities for control sequences that cause move- ment a number of full columns or lines. It also has equivalent string capabilities for control sequences that cause movement a number of small- est 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. Sometimes the motion is limited to less than the width or length of a page. Also, some printers do not 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. ter- minfo 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 no capabilities exist 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 _________________________________________________________________________ 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 char- acter 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 capabili- ties. One of these is needed for printers that move the current position to the beginning of a line when certain control characters, like ``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 _________________________________________________________________________ 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 addi- tional margins, for the top and bottom margins of each page. Further- more, some printers do not require using motion strings to move the current position to a margin and fixing the margin there, as with the existing capabilities, 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 soft bottom margin at current line smgt Set soft top margin at current line smgbp Set soft bottom margin at line N smglp Set soft left margin at column N smgrp Set soft right margin at column N smgtp Set soft top margin at line N The last four strings are used with a single argument, N, that gives the line or column number, where line 0 is the top line and column 0 is the leftmost column. Note: Not all printers use 0 for the top line or the leftmost column. 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 con- trol 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 sub- scripts. As mentioned earlier, the amount of motion automatically made after printing a wide character should be given in widcs. 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 capabil- ity 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 also lets you define alternate character sets. The fol- lowing 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 sets, of course; using scs with an argument that does not 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 con- trol 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 char- acters 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 (like 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 is easiest for the creator of terminfo entries to refer to each char- acter set by number; however, these numbers will be meaningless to the application developer. The csnm string alleviates this problem by pro- viding 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 develop- ers 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 num- ber), 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 print- ers that have manually changed print-wheels or font cartridges, the boolean daisy is set. 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 string is used with a single argument, B, the width of the image in dots. The model of dot-matrix or raster-graphics that the 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 hor- izontal strips, perhaps interpolating to account for different dot spac- ing 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 an 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; the position of each pin number in the list corresponds to a bit in a 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 do not 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 signifi- cant bit. The ``image-data bytes'' are to be computed from the dot-matrix image, mapping vertical dot positions in each print-head pass into eight-bit bytes, using a 1 bit where ink should be applied and 0 where no ink should be applied. If a position is skipped in porder, a 0 bit is used. 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. 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: _orhi spinh ' spinh=spinh'.orhi' Using lpi with lpix clear: spinv ' spinv Using lpi with lpix set: _orhi spinv ' spinv=spinv'.orhi' Using chr: 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 print- er does not 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 esti- mate what has been printed. ______________________________________________________________________ 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 charac- ters; if this value is not given, the rate should be estimated at one- tenth the prevailing baud rate. bufsz is the maximum number of subse- quent 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 charac- ters, 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 con- trol 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/lib/terminfo/?/* compiled terminal description database /usr/lib/.COREterm/?/* subset of compiled terminal description database /usr/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 captoinfo(ADM), curses(S), infocmp(ADM), printf(S), profile(M), term(M), terminfo(F), tic(C), tput(C), vi(C) Warning As described in the ``Tabs and initialization'' section above, a terminal's initialization strings, is1, is2, and is3, if defined, must be output before a curses(S) program is run. An available mechanism for outputting such strings is tput init (see tput(C) and profile(F)). If a null character (\0) is encountered in a string, the null and all characters after it are lost. Therefore it is not possible to code a null character (\0) and send it to a device (either terminal or printer). The suggestion of sending a \0200, where a \0 (null) is needed can succeed only if the device (terminal or printer) ignores the eighth bit. For example, because all eight bits are used in the standard interna- tional ASCII character set, devices that adhere to this standard will treat \0200 differently from \0. Tampering with entries in /usr/lib/.COREterm/?/* or /usr/lib/terminfo/?/* (for example, changing or removing an entry) can affect programs such as vi(C) that expect the entry to be present and correct. In particular, removing the description for the ``dumb'' terminal will cause unexpected problems.

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