<!--
  * t
  * DO NOT EDIT THIS FILE BY HAND!
  * It is generated from terminfo.head,  ./../include/Caps ./../include/Caps-ncurses, and terminfo.tail.
  * Note: this must be run through tbl before nroff.
  * The magic cookie on the first line triggers this under some man programs.
  ****************************************************************************
  * Copyright 2018-2020,2021 Thomas E. Dickey                                *
  * Copyright 1998-2016,2017 Free Software Foundation, Inc.                  *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
  * "Software"), to deal in the Software without restriction, including      *
  * without limitation the rights to use, copy, modify, merge, publish,      *
  * distribute, distribute with modifications, sublicense, and/or sell       *
  * copies of the Software, and to permit persons to whom the Software is    *
  * furnished to do so, subject to the following conditions:                 *
  *                                                                          *
  * The above copyright notice and this permission notice shall be included  *
  * in all copies or substantial portions of the Software.                   *
  *                                                                          *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
  *                                                                          *
  * Except as contained in this notice, the name(s) of the above copyright   *
  * holders shall not be used in advertising or otherwise to promote the     *
  * sale, use or other dealings in this Software without prior written       *
  * authorization.                                                           *
  ****************************************************************************
  * @Id: terminfo.head,v 1.41 2021/08/15 19:32:53 tom Exp @
  * Head of terminfo man page ends here
  ****************************************************************************
  * Copyright 2018-2020,2021 Thomas E. Dickey                                *
  * Copyright 1998-2016,2017 Free Software Foundation, Inc.                  *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
  * "Software"), to deal in the Software without restriction, including      *
  * without limitation the rights to use, copy, modify, merge, publish,      *
  * distribute, distribute with modifications, sublicense, and/or sell       *
  * copies of the Software, and to permit persons to whom the Software is    *
  * furnished to do so, subject to the following conditions:                 *
  *                                                                          *
  * The above copyright notice and this permission notice shall be included  *
  * in all copies or substantial portions of the Software.                   *
  *                                                                          *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
  *                                                                          *
  * Except as contained in this notice, the name(s) of the above copyright   *
  * holders shall not be used in advertising or otherwise to promote the     *
  * sale, use or other dealings in this Software without prior written       *
  * authorization.                                                           *
  ****************************************************************************
  * @Id: terminfo.tail,v 1.108 2021/10/09 23:13:23 tom Exp @
  *.in -2
  *.in +2
  *.in -2
  *.in +2
  *.TH
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="generator" content="Manpage converted by man2html - see https://invisible-island.net/scripts/readme.html#others_scripts">
<TITLE>terminfo 5   File Formats</TITLE>
<link rel="author" href="mailto:bug-ncurses@gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</HEAD>
<BODY>
<H1 class="no-header">terminfo 5   File Formats</H1>
<PRE>
<STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>                      File Formats                      <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>




</PRE><H2><a name="h2-NAME">NAME</a></H2><PRE>
       terminfo - terminal capability database


</PRE><H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
       /usr/share/terminfo/*/*


</PRE><H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
       <EM>Terminfo</EM>  is  a  database describing terminals, used by screen-oriented
       programs  such  as  <STRONG>nvi(1)</STRONG>,  <STRONG>lynx(1)</STRONG>,   <STRONG>mutt(1)</STRONG>,   and   other   curses
       applications,  using  high-level calls to libraries such as <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>.
       It is also used via low-level calls by  non-curses  applications  which
       may  be  screen-oriented  (such  as  <STRONG><A HREF="clear.1.html">clear(1)</A></STRONG>)  or  non-screen (such as
       <STRONG><A HREF="tabs.1.html">tabs(1)</A></STRONG>).

       <EM>Terminfo</EM> describes terminals by giving a set of capabilities which they
       have, by specifying how to perform screen operations, and by specifying
       padding requirements and initialization sequences.

       This manual describes <STRONG>ncurses</STRONG> version 6.3 (patch 20211021).


</PRE><H3><a name="h3-Terminfo-Entry-Syntax">Terminfo Entry Syntax</a></H3><PRE>
       Entries in <EM>terminfo</EM> consist of a sequence of fields:

       <STRONG>o</STRONG>   Each field ends with a comma "," (embedded commas  may  be  escaped
           with a backslash or written as "\054").

       <STRONG>o</STRONG>   White space between fields is ignored.

       <STRONG>o</STRONG>   The first field in a <EM>terminfo</EM> entry begins in the first column.

       <STRONG>o</STRONG>   Newlines  and  leading  whitespace (spaces or tabs) may be used for
           formatting entries for readability.  These are removed from  parsed
           entries.

           The  <STRONG>infocmp</STRONG>  <STRONG>-f</STRONG> and <STRONG>-W</STRONG> options rely on this to format if-then-else
           expressions, or  to  enforce  maximum  line-width.   The  resulting
           formatted terminal description can be read by <STRONG>tic</STRONG>.

       <STRONG>o</STRONG>   The  first  field for each terminal gives the names which are known
           for the terminal, separated by "|" characters.

           The first name given  is  the  most  common  abbreviation  for  the
           terminal  (its  primary name), the last name given should be a long
           name fully identifying the terminal  (see  <STRONG><A HREF="curs_termattrs.3x.html">longname(3x)</A></STRONG>),  and  all
           others  are  treated as synonyms (aliases) for the primary terminal
           name.

           X/Open Curses advises that all names but  the  last  should  be  in
           lower  case  and  contain no blanks; the last name may well contain
           upper case and blanks for readability.

           This implementation is not so strict; it allows mixed case  in  the
           primary name and aliases.  If the last name has no embedded blanks,
           it allows that to be both an alias and a  verbose  name  (but  will
           warn about this ambiguity).

       <STRONG>o</STRONG>   Lines  beginning  with  a  "#"  in  the first column are treated as
           comments.

           While comment lines are legal at any point, the output of <STRONG>captoinfo</STRONG>
           and  <STRONG>infotocap</STRONG>  (aliases  for <STRONG>tic</STRONG>) will move comments so they occur
           only between entries.

       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,  thus  "hp2621".   This
       name should not contain hyphens.  Modes that the hardware can be in, or
       user preferences, should be indicated by appending a hyphen and a  mode
       suffix.   Thus,  a  vt100  in  132-column  mode  would be vt100-w.  The
       following suffixes should be used where possible:

            <STRONG>Suffix</STRONG>                  <STRONG>Meaning</STRONG>                   <STRONG>Example</STRONG>
            -<EM>nn</EM>      Number of lines on the screen            aaa-60
            -<EM>n</EM>p      Number of pages of memory                c100-4p
            -am      With automargins (usually the default)   vt100-am
            -m       Mono mode; suppress color                ansi-m
            -mc      Magic cookie; spaces when highlighting   wy30-mc
            -na      No arrow keys (leave them in local)      c100-na
            -nam     Without automatic margins                vt100-nam
            -nl      No status line                           att4415-nl
            -ns      No status line                           hp2626-ns
            -rv      Reverse video                            c100-rv
            -s       Enable status line                       vt100-s
            -vb      Use visible bell instead of beep         wy370-vb
            -w       Wide mode (&gt; 80 columns, usually 132)    vt100-w

       For more on terminal naming conventions, see the <STRONG><A HREF="term.7.html">term(7)</A></STRONG> manual page.


</PRE><H3><a name="h3-Terminfo-Capabilities-Syntax">Terminfo Capabilities Syntax</a></H3><PRE>
       The terminfo entry consists of  several  <EM>capabilities</EM>,  i.e.,  features
       that  the  terminal  has,  or  methods  for  exercising  the terminal's
       features.

       After the first field (giving the name(s) of the terminal entry), there
       should be one or more <EM>capability</EM> fields.  These are boolean, numeric or
       string names with corresponding values:

       <STRONG>o</STRONG>   Boolean capabilities are true  when  present,  false  when  absent.
           There is no explicit value for boolean capabilities.

       <STRONG>o</STRONG>   Numeric  capabilities  have  a  "#"  following  the  name,  then an
           unsigned decimal integer value.

       <STRONG>o</STRONG>   String capabilities have a "=" following the name, then  an  string
           of characters making up the capability value.

           String  capabilities  can be split into multiple lines, just as the
           fields comprising a terminal  entry  can  be  split  into  multiple
           lines.   While  blanks  between fields are ignored, blanks embedded
           within a string value are retained, except for leading blanks on  a
           line.

       Any  capability  can  be  <EM>canceled</EM>,  i.e., suppressed from the terminal
       entry, by following its name with "@" rather than a capability value.


</PRE><H3><a name="h3-Similar-Terminals">Similar Terminals</a></H3><PRE>
       If there are two very similar  terminals,  one  (the  variant)  can  be
       defined   as  being  just  like  the  other  (the  base)  with  certain
       exceptions.  In the definition of the variant,  the  string  capability
       <STRONG>use</STRONG> can be given with the name of the base terminal:

       <STRONG>o</STRONG>   The  capabilities  given before <STRONG>use</STRONG> override those in the base type
           named by <STRONG>use</STRONG>.

       <STRONG>o</STRONG>   If there are multiple <STRONG>use</STRONG> capabilities, they are merged in  reverse
           order.   That  is,  the rightmost <STRONG>use</STRONG> reference is processed first,
           then the one to its left, and so forth.

       <STRONG>o</STRONG>   Capabilities given explicitly in the entry override  those  brought
           in by <STRONG>use</STRONG> references.

       A  capability  can  be  canceled  by placing <STRONG>xx@</STRONG> to the left of the use
       reference that imports it, where <EM>xx</EM> is the  capability.   For  example,
       the entry

              2621-nl, smkx@, rmkx@, use=2621,

       defines a 2621-nl that does not have the <STRONG>smkx</STRONG> or <STRONG>rmkx</STRONG> capabilities, and
       hence does not turn on the function key labels  when  in  visual  mode.
       This  is  useful  for  different modes for a terminal, or for different
       user preferences.

       An entry included via <STRONG>use</STRONG> can contain canceled capabilities, which have
       the  same  effect as if those cancels were inline in the using terminal
       entry.


</PRE><H3><a name="h3-Predefined-Capabilities">Predefined Capabilities</a></H3><PRE>
       The following is a complete table of the  capabilities  included  in  a
       terminfo  description  block  and available to terminfo-using code.  In
       each line of the table,

       The <STRONG>variable</STRONG> is the name by  which  the  programmer  (at  the  terminfo
       level) accesses the capability.

       The  <STRONG>capname</STRONG> is the short name used in the text of the database, and is
       used by a person updating the database.   Whenever  possible,  capnames
       are chosen to be the same as or similar to the ANSI X3.64-1979 standard
       (now superseded by  ECMA-48,  which  uses  identical  or  very  similar
       names).    Semantics   are   also   intended  to  match  those  of  the
       specification.

       The termcap code is the old <STRONG>termcap</STRONG> capability name (some  capabilities
       are new, and have names which termcap did not originate).

       Capability  names have no hard length limit, but an informal limit of 5
       characters has been adopted to keep them short and to allow the tabs in
       the source file <STRONG>Caps</STRONG> to line up nicely.

       Finally,  the description field attempts to convey the semantics of the
       capability.  You may find some codes in the description field:

       (P)    indicates that padding may be specified

       #[1-9] in the description field indicates that  the  string  is  passed
              through <STRONG><A HREF="curs_terminfo.3x.html">tparm(3x)</A></STRONG> with parameters as given (#<EM>i</EM>).

              If  no  parameters  are  listed  in the description, passing the
              string through <STRONG><A HREF="curs_terminfo.3x.html">tparm(3x)</A></STRONG> may give unexpected results,  e.g.,  if
              it contains percent (%%) signs.

       (P*)   indicates  that  padding may vary in proportion to the number of
              lines affected

       (#<EM>i</EM>)   indicates the <EM>i</EM>th parameter.


       These are the boolean capabilities:


                  <STRONG>Variable</STRONG>            <STRONG>Cap-</STRONG>      <STRONG>TCap</STRONG>       <STRONG>Description</STRONG>
                  <STRONG>Booleans</STRONG>            <STRONG>name</STRONG>      <STRONG>Code</STRONG>



          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       ut     screen erased with
                                                       background color
          can_change                  ccc       cc     terminal can re-
                                                       define existing
                                                       colors
          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
          dest_tabs_magic_smso        xt        xt     tabs destructive,
                                                       magic so char
                                                       (t1061)
          eat_newline_glitch          xenl      xn     newline ignored
                                                       after 80 cols
                                                       (concept)
          erase_overstrike            eo        eo     can erase
                                                       overstrikes with a
                                                       blank
          generic_type                gn        gn     generic line type
          hard_copy                   hc        hc     hardcopy terminal
          hard_cursor                 chts      HC     cursor is hard to
                                                       see
          has_meta_key                km        km     Has a meta key
                                                       (i.e., sets 8th-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 while
                                                       in standout mode
          needs_xon_xoff              nxon      nx     padding will not
                                                       work, xon/xoff
                                                       required
          no_esc_ctlc                 xsb       xb     beehive (f1=escape,
                                                       f2=ctrl C)
          no_pad_char                 npc       NP     pad character does
                                                       not 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 can
                                                       overstrike
          prtr_silent                 mc5i      5i     printer will not
                                                       echo on screen
          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
          tilde_glitch                hz        hz     cannot print ~'s
                                                       (Hazeltine)
          transparent_underline       ul        ul     underline character
                                                       overstrikes
          xon_xoff                    xon       xo     terminal uses
                                                       xon/xoff handshaking

       These are the numeric capabilities:


                  <STRONG>Variable</STRONG>            <STRONG>Cap-</STRONG>      <STRONG>TCap</STRONG>       <STRONG>Description</STRONG>
                   <STRONG>Numeric</STRONG>            <STRONG>name</STRONG>      <STRONG>Code</STRONG>
          columns                     cols      co     number of columns in
                                                       a line
          init_tabs                   it        it     tabs initially every
                                                       # spaces
          label_height                lh        lh     rows in each label
          label_width                 lw        lw     columns in each
                                                       label
          lines                       lines     li     number of lines on
                                                       screen or page
          lines_of_memory             lm        lm     lines of memory if &gt;
                                                       line. 0 means varies
          magic_cookie_glitch         xmc       sg     number of blank
                                                       characters left by
                                                       smso or rmso
          max_attributes              ma        ma     maximum combined
                                                       attributes terminal
                                                       can handle
          max_colors                  colors    Co     maximum number of
                                                       colors on screen
          max_pairs                   pairs     pa     maximum number of
                                                       color-pairs on the
                                                       screen
          maximum_windows             wnum      MW     maximum number of
                                                       definable windows
          no_color_video              ncv       NC     video attributes
                                                       that cannot be used
                                                       with colors
          num_labels                  nlab      Nl     number of labels on
                                                       screen
          padding_baud_rate           pb        pb     lowest baud rate
                                                       where padding needed
          virtual_terminal            vt        vt     virtual terminal
                                                       number (CB/unix)
          width_status_line           wsl       ws     number of columns in
                                                       status line

       The  following  numeric  capabilities  are  present  in the SVr4.0 term
       structure, but are not yet documented in the man page.   They  came  in
       with SVr4's printer support.



                  <STRONG>Variable</STRONG>            <STRONG>Cap-</STRONG>      <STRONG>TCap</STRONG>       <STRONG>Description</STRONG>
                   <STRONG>Numeric</STRONG>            <STRONG>name</STRONG>      <STRONG>Code</STRONG>
          bit_image_entwining         bitwin    Yo     number of passes for
                                                       each bit-image row
          bit_image_type              bitype    Yp     type of bit-image
                                                       device
          buffer_capacity             bufsz     Ya     numbers of bytes
                                                       buffered before
                                                       printing
          buttons                     btns      BT     number of buttons on
                                                       mouse
          dot_horz_spacing            spinh     Yc     spacing of dots
                                                       horizontally in dots
                                                       per inch
          dot_vert_spacing            spinv     Yb     spacing of pins
                                                       vertically in pins
                                                       per inch
          max_micro_address           maddr     Yd     maximum value in
                                                       micro_..._address
          max_micro_jump              mjump     Ye     maximum value in
                                                       parm_..._micro
          micro_col_size              mcs       Yf     character step size
                                                       when in micro mode
          micro_line_size             mls       Yg     line step size when
                                                       in micro mode
          number_of_pins              npins     Yh     numbers of pins in
                                                       print-head
          output_res_char             orc       Yi     horizontal
                                                       resolution in units
                                                       per line
          output_res_horz_inch        orhi      Yk     horizontal
                                                       resolution in units
                                                       per inch
          output_res_line             orl       Yj     vertical resolution
                                                       in units per line
          output_res_vert_inch        orvi      Yl     vertical resolution
                                                       in units per inch
          print_rate                  cps       Ym     print rate in
                                                       characters per
                                                       second
          wide_char_size              widcs     Yn     character step size
                                                       when in double wide
                                                       mode

       These are the string capabilities:


                  <STRONG>Variable</STRONG>            <STRONG>Cap-</STRONG>      <STRONG>TCap</STRONG>       <STRONG>Description</STRONG>
                   <STRONG>String</STRONG>             <STRONG>name</STRONG>      <STRONG>Code</STRONG>
          acs_chars                   acsc      ac     graphics charset
                                                       pairs, based on
                                                       vt100
          back_tab                    cbt       bt     back tab (P)
          bell                        bel       bl     audible signal
                                                       (bell) (P)
          carriage_return             cr        cr     carriage return (P*)
                                                       (P*)
          change_char_pitch           cpi       ZA     Change number of
                                                       characters per inch
                                                       to #1
          change_line_pitch           lpi       ZB     Change number of
                                                       lines per inch to #1
          change_res_horz             chr       ZC     Change horizontal
                                                       resolution to #1


          change_res_vert             cvr       ZD     Change vertical
                                                       resolution to #1
          change_scroll_region        csr       cs     change region to
                                                       line #1 to line #2
                                                       (P)
          char_padding                rmp       rP     like ip but when in
                                                       insert mode
          clear_all_tabs              tbc       ct     clear all tab stops
                                                       (P)
          clear_margins               mgc       MC     clear right and left
                                                       soft margins
          clear_screen                clear     cl     clear screen and
                                                       home cursor (P*)
          clr_bol                     el1       cb     Clear to beginning
                                                       of line
          clr_eol                     el        ce     clear to end of line
                                                       (P)
          clr_eos                     ed        cd     clear to end of
                                                       screen (P*)
          column_address              hpa       ch     horizontal position
                                                       #1, absolute (P)
          command_character           cmdch     CC     terminal settable
                                                       cmd character in
                                                       prototype !?
          create_window               cwin      CW     define a window #1
                                                       from #2,#3 to #4,#5
          cursor_address              cup       cm     move to row #1
                                                       columns #2
          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,
                                                       move to row #1
                                                       columns #2
          cursor_normal               cnorm     ve     make cursor appear
                                                       normal (undo
                                                       civis/cvvis)
          cursor_right                cuf1      nd     non-destructive
                                                       space (move right
                                                       one space)
          cursor_to_ll                ll        ll     last line, first
                                                       column (if no cup)
          cursor_up                   cuu1      up     up one line
          cursor_visible              cvvis     vs     make cursor very
                                                       visible
          define_char                 defc      ZE     Define a character
                                                       #1, #2 dots wide,
                                                       descender #3
          delete_character            dch1      dc     delete character
                                                       (P*)
          delete_line                 dl1       dl     delete line (P*)
          dial_phone                  dial      DI     dial number #1
          dis_status_line             dsl       ds     disable status line
          display_clock               dclk      DK     display clock
          down_half_line              hd        hd     half a line down
          ena_acs                     enacs     eA     enable alternate
                                                       char set
          enter_alt_charset_mode      smacs     as     start alternate
                                                       character set (P)
          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 start
                                                       programs using cup
          enter_delete_mode           smdc      dm     enter delete mode
          enter_dim_mode              dim       mh     turn on half-bright
                                                       mode
          enter_doublewide_mode       swidm     ZF     Enter double-wide
                                                       mode
          enter_draft_quality         sdrfq     ZG     Enter draft-quality
                                                       mode
          enter_insert_mode           smir      im     enter insert mode
          enter_italics_mode          sitm      ZH     Enter italic mode
          enter_leftward_mode         slm       ZI     Start leftward
                                                       carriage motion
          enter_micro_mode            smicm     ZJ     Start micro-motion
                                                       mode
          enter_near_letter_quality   snlq      ZK     Enter NLQ mode
          enter_normal_quality        snrmq     ZL     Enter normal-quality
                                                       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     Enter shadow-print
                                                       mode
          enter_standout_mode         smso      so     begin standout mode
          enter_subscript_mode        ssubm     ZN     Enter subscript mode
          enter_superscript_mode      ssupm     ZO     Enter superscript
                                                       mode
          enter_underline_mode        smul      us     begin underline mode
          enter_upward_mode           sum       ZP     Start upward
                                                       carriage motion
          enter_xon_mode              smxon     SX     turn on xon/xoff
                                                       handshaking
          erase_chars                 ech       ec     erase #1 characters
                                                       (P)
          exit_alt_charset_mode       rmacs     ae     end alternate
                                                       character set (P)
          exit_am_mode                rmam      RA     turn off automatic
                                                       margins
          exit_attribute_mode         sgr0      me     turn off all
                                                       attributes
          exit_ca_mode                rmcup     te     strings to end
                                                       programs using cup
          exit_delete_mode            rmdc      ed     end delete mode
          exit_doublewide_mode        rwidm     ZQ     End double-wide mode
          exit_insert_mode            rmir      ei     exit insert mode
          exit_italics_mode           ritm      ZR     End italic mode
          exit_leftward_mode          rlm       ZS     End left-motion mode
          exit_micro_mode             rmicm     ZT     End micro-motion
                                                       mode
          exit_shadow_mode            rshm      ZU     End shadow-print
                                                       mode
          exit_standout_mode          rmso      se     exit standout mode
          exit_subscript_mode         rsubm     ZV     End subscript mode
          exit_superscript_mode       rsupm     ZW     End superscript mode
          exit_underline_mode         rmul      ue     exit underline mode
          exit_upward_mode            rum       ZX     End reverse
                                                       character 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 switch hook
          flash_screen                flash     vb     visible bell (may
                                                       not move cursor)
          form_feed                   ff        ff     hardcopy terminal
                                                       page eject (P*)
          from_status_line            fsl       fs     return from status
                                                       line
          goto_window                 wingo     WG     go to window #1
          hangup                      hup       HU     hang-up phone
          init_1string                is1       i1     initialization
                                                       string
          init_2string                is2       is     initialization
                                                       string
          init_3string                is3       i3     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 color #1
                                                       to (#2,#3,#4)
          initialize_pair             initp     Ip     Initialize color
                                                       pair #1 to
                                                       fg=(#2,#3,#4),
                                                       bg=(#5,#6,#7)
          insert_character            ich1      ic     insert character (P)
          insert_line                 il1       al     insert line (P*)
          insert_padding              ip        ip     insert padding after
                                                       inserted character
          key_a1                      ka1       K1     upper left of keypad
          key_a3                      ka3       K3     upper right of
                                                       keypad
          key_b2                      kb2       K2     center of keypad
          key_backspace               kbs       kb     backspace key
          key_beg                     kbeg      @1     begin key
          key_btab                    kcbt      kB     back-tab key
          key_c1                      kc1       K4     lower left of keypad
          key_c3                      kc3       K5     lower right of
                                                       keypad
          key_cancel                  kcan      @2     cancel key
          key_catab                   ktbc      ka     clear-all-tabs key
          key_clear                   kclr      kC     clear-screen or
                                                       erase key
          key_close                   kclo      @3     close key
          key_command                 kcmd      @4     command key
          key_copy                    kcpy      @5     copy key
          key_create                  kcrt      @6     create key
          key_ctab                    kctab     kt     clear-tab key
          key_dc                      kdch1     kD     delete-character key
          key_dl                      kdl1      kL     delete-line key
          key_down                    kcud1     kd     down-arrow key
          key_eic                     krmir     kM     sent by rmir or smir
                                                       in insert mode
          key_end                     kend      @7     end key
          key_enter                   kent      @8     enter/send key
          key_eol                     kel       kE     clear-to-end-of-line
                                                       key
          key_eos                     ked       kS     clear-to-end-of-
                                                       screen key
          key_exit                    kext      @9     exit key
          key_f0                      kf0       k0     F0 function key

          key_f1                      kf1       k1     F1 function key
          key_f10                     kf10      k;     F10 function key
          key_f11                     kf11      F1     F11 function key
          key_f12                     kf12      F2     F12 function key
          key_f13                     kf13      F3     F13 function key
          key_f14                     kf14      F4     F14 function key
          key_f15                     kf15      F5     F15 function key
          key_f16                     kf16      F6     F16 function key
          key_f17                     kf17      F7     F17 function key
          key_f18                     kf18      F8     F18 function key
          key_f19                     kf19      F9     F19 function key
          key_f2                      kf2       k2     F2 function key
          key_f20                     kf20      FA     F20 function key
          key_f21                     kf21      FB     F21 function key
          key_f22                     kf22      FC     F22 function key
          key_f23                     kf23      FD     F23 function key
          key_f24                     kf24      FE     F24 function key
          key_f25                     kf25      FF     F25 function key
          key_f26                     kf26      FG     F26 function key
          key_f27                     kf27      FH     F27 function key
          key_f28                     kf28      FI     F28 function key
          key_f29                     kf29      FJ     F29 function key
          key_f3                      kf3       k3     F3 function key
          key_f30                     kf30      FK     F30 function key
          key_f31                     kf31      FL     F31 function key
          key_f32                     kf32      FM     F32 function key
          key_f33                     kf33      FN     F33 function key
          key_f34                     kf34      FO     F34 function key
          key_f35                     kf35      FP     F35 function key
          key_f36                     kf36      FQ     F36 function key
          key_f37                     kf37      FR     F37 function key
          key_f38                     kf38      FS     F38 function key
          key_f39                     kf39      FT     F39 function key
          key_f4                      kf4       k4     F4 function key
          key_f40                     kf40      FU     F40 function key
          key_f41                     kf41      FV     F41 function key
          key_f42                     kf42      FW     F42 function key
          key_f43                     kf43      FX     F43 function key
          key_f44                     kf44      FY     F44 function key
          key_f45                     kf45      FZ     F45 function key
          key_f46                     kf46      Fa     F46 function key
          key_f47                     kf47      Fb     F47 function key
          key_f48                     kf48      Fc     F48 function key
          key_f49                     kf49      Fd     F49 function key
          key_f5                      kf5       k5     F5 function key
          key_f50                     kf50      Fe     F50 function key
          key_f51                     kf51      Ff     F51 function key
          key_f52                     kf52      Fg     F52 function key
          key_f53                     kf53      Fh     F53 function key
          key_f54                     kf54      Fi     F54 function key
          key_f55                     kf55      Fj     F55 function key
          key_f56                     kf56      Fk     F56 function key
          key_f57                     kf57      Fl     F57 function key
          key_f58                     kf58      Fm     F58 function key
          key_f59                     kf59      Fn     F59 function key
          key_f6                      kf6       k6     F6 function key
          key_f60                     kf60      Fo     F60 function key
          key_f61                     kf61      Fp     F61 function key
          key_f62                     kf62      Fq     F62 function key
          key_f63                     kf63      Fr     F63 function key
          key_f7                      kf7       k7     F7 function key
          key_f8                      kf8       k8     F8 function key
          key_f9                      kf9       k9     F9 function key
          key_find                    kfnd      @0     find key
          key_help                    khlp      %1     help key

          key_home                    khome     kh     home key
          key_ic                      kich1     kI     insert-character key
          key_il                      kil1      kA     insert-line key
          key_left                    kcub1     kl     left-arrow key
          key_ll                      kll       kH     lower-left key (home
                                                       down)
          key_mark                    kmrk      %2     mark key
          key_message                 kmsg      %3     message key
          key_move                    kmov      %4     move key
          key_next                    knxt      %5     next key
          key_npage                   knp       kN     next-page key
          key_open                    kopn      %6     open key
          key_options                 kopt      %7     options key
          key_ppage                   kpp       kP     previous-page key
          key_previous                kprv      %8     previous key
          key_print                   kprt      %9     print key
          key_redo                    krdo      %0     redo key
          key_reference               kref      &amp;1     reference key
          key_refresh                 krfr      &amp;2     refresh key
          key_replace                 krpl      &amp;3     replace key
          key_restart                 krst      &amp;4     restart key
          key_resume                  kres      &amp;5     resume key
          key_right                   kcuf1     kr     right-arrow key
          key_save                    ksav      &amp;6     save key
          key_sbeg                    kBEG      &amp;9     shifted begin key
          key_scancel                 kCAN      &amp;0     shifted cancel key
          key_scommand                kCMD      *1     shifted command key
          key_scopy                   kCPY      *2     shifted copy key
          key_screate                 kCRT      *3     shifted create key
          key_sdc                     kDC       *4     shifted delete-
                                                       character key
          key_sdl                     kDL       *5     shifted delete-line
                                                       key
          key_select                  kslt      *6     select key
          key_send                    kEND      *7     shifted end key
          key_seol                    kEOL      *8     shifted clear-to-
                                                       end-of-line key
          key_sexit                   kEXT      *9     shifted exit key
          key_sf                      kind      kF     scroll-forward key
          key_sfind                   kFND      *0     shifted find key
          key_shelp                   kHLP      #1     shifted help key
          key_shome                   kHOM      #2     shifted home key
          key_sic                     kIC       #3     shifted insert-
                                                       character key
          key_sleft                   kLFT      #4     shifted left-arrow
                                                       key
          key_smessage                kMSG      %a     shifted message key
          key_smove                   kMOV      %b     shifted move key
          key_snext                   kNXT      %c     shifted next key
          key_soptions                kOPT      %d     shifted options key
          key_sprevious               kPRV      %e     shifted previous key
          key_sprint                  kPRT      %f     shifted print key
          key_sr                      kri       kR     scroll-backward key
          key_sredo                   kRDO      %g     shifted redo key
          key_sreplace                kRPL      %h     shifted replace key
          key_sright                  kRIT      %i     shifted right-arrow
                                                       key
          key_srsume                  kRES      %j     shifted resume key
          key_ssave                   kSAV      !1     shifted save key
          key_ssuspend                kSPD      !2     shifted suspend key
          key_stab                    khts      kT     set-tab key
          key_sundo                   kUND      !3     shifted undo key
          key_suspend                 kspd      &amp;7     suspend key
          key_undo                    kund      &amp;8     undo key
          key_up                      kcuu1     ku     up-arrow key

          keypad_local                rmkx      ke     leave
                                                       'keyboard_transmit'
                                                       mode
          keypad_xmit                 smkx      ks     enter
                                                       'keyboard_transmit'
                                                       mode
          lab_f0                      lf0       l0     label on function
                                                       key f0 if not f0
          lab_f1                      lf1       l1     label on function
                                                       key f1 if not f1
          lab_f10                     lf10      la     label on function
                                                       key f10 if not f10
          lab_f2                      lf2       l2     label on function
                                                       key f2 if not f2
          lab_f3                      lf3       l3     label on function
                                                       key f3 if not f3
          lab_f4                      lf4       l4     label on function
                                                       key f4 if not f4
          lab_f5                      lf5       l5     label on function
                                                       key f5 if not f5
          lab_f6                      lf6       l6     label on function
                                                       key f6 if not f6
          lab_f7                      lf7       l7     label on function
                                                       key f7 if not f7
          lab_f8                      lf8       l8     label on function
                                                       key f8 if not f8
          lab_f9                      lf9       l9     label on function
                                                       key f9 if not f9
          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 on)
          micro_column_address        mhpa      ZY     Like column_address
                                                       in micro mode
          micro_down                  mcud1     ZZ     Like cursor_down in
                                                       micro mode
          micro_left                  mcub1     Za     Like cursor_left in
                                                       micro mode
          micro_right                 mcuf1     Zb     Like cursor_right in
                                                       micro mode
          micro_row_address           mvpa      Zc     Like row_address #1
                                                       in micro mode
          micro_up                    mcuu1     Zd     Like cursor_up in
                                                       micro mode
          newline                     nel       nw     newline (behave like
                                                       cr followed by lf)
          order_of_pins               porder    Ze     Match software bits
                                                       to print-head pins
          orig_colors                 oc        oc     Set all color pairs
                                                       to the original ones
          orig_pair                   op        op     Set default pair to
                                                       its original value
          pad_char                    pad       pc     padding char
                                                       (instead of null)
          parm_dch                    dch       DC     delete #1 characters
                                                       (P*)
          parm_delete_line            dl        DL     delete #1 lines (P*)
          parm_down_cursor            cud       DO     down #1 lines (P*)
          parm_down_micro             mcud      Zf     Like
                                                       parm_down_cursor in
                                                       micro mode
          parm_ich                    ich       IC     insert #1 characters
                                                       (P*)

          parm_index                  indn      SF     scroll forward #1
                                                       lines (P)
          parm_insert_line            il        AL     insert #1 lines (P*)
          parm_left_cursor            cub       LE     move #1 characters
                                                       to the left (P)
          parm_left_micro             mcub      Zg     Like
                                                       parm_left_cursor in
                                                       micro mode
          parm_right_cursor           cuf       RI     move #1 characters
                                                       to the right (P*)
          parm_right_micro            mcuf      Zh     Like
                                                       parm_right_cursor in
                                                       micro mode
          parm_rindex                 rin       SR     scroll back #1 lines
                                                       (P)
          parm_up_cursor              cuu       UP     up #1 lines (P*)
          parm_up_micro               mcuu      Zi     Like parm_up_cursor
                                                       in micro mode
          pkey_key                    pfkey     pk     program function key
                                                       #1 to type string #2
          pkey_local                  pfloc     pl     program function key
                                                       #1 to execute string
                                                       #2
          pkey_xmit                   pfx       px     program function key
                                                       #1 to transmit
                                                       string #2
          plab_norm                   pln       pn     program label #1 to
                                                       show string #2
          print_screen                mc0       ps     print contents of
                                                       screen
          prtr_non                    mc5p      pO     turn on printer for
                                                       #1 bytes
          prtr_off                    mc4       pf     turn off printer
          prtr_on                     mc5       po     turn on printer
          pulse                       pulse     PU     select pulse dialing
          quick_dial                  qdial     QD     dial number #1
                                                       without checking
          remove_clock                rmclk     RC     remove clock
          repeat_char                 rep       rp     repeat char #1 #2
                                                       times (P*)
          req_for_input               rfi       RF     send next input char
                                                       (for ptys)
          reset_1string               rs1       r1     reset string
          reset_2string               rs2       r2     reset string
          reset_3string               rs3       r3     reset string
          reset_file                  rf        rf     name of reset file
          restore_cursor              rc        rc     restore cursor to
                                                       position of last
                                                       save_cursor
          row_address                 vpa       cv     vertical position #1
                                                       absolute (P)
          save_cursor                 sc        sc     save current cursor
                                                       position (P)
          scroll_forward              ind       sf     scroll text up (P)
          scroll_reverse              ri        sr     scroll text down (P)
          select_char_set             scs       Zj     Select character
                                                       set, #1
          set_attributes              sgr       sa     define video
                                                       attributes #1-#9
                                                       (PG9)
          set_background              setb      Sb     Set background color
                                                       #1
          set_bottom_margin           smgb      Zk     Set bottom margin at
                                                       current line


          set_bottom_margin_parm      smgbp     Zl     Set bottom margin at
                                                       line #1 or (if smgtp
                                                       is not given) #2
                                                       lines from bottom
          set_clock                   sclk      SC     set clock, #1 hrs #2
                                                       mins #3 secs
          set_color_pair              scp       sp     Set current color
                                                       pair to #1
          set_foreground              setf      Sf     Set foreground color
                                                       #1
          set_left_margin             smgl      ML     set left soft margin
                                                       at current
                                                       column.     (ML is
                                                       not in BSD termcap).
          set_left_margin_parm        smglp     Zm     Set left (right)
                                                       margin at column #1
          set_right_margin            smgr      MR     set right soft
                                                       margin at current
                                                       column
          set_right_margin_parm       smgrp     Zn     Set right margin at
                                                       column #1
          set_tab                     hts       st     set a tab in every
                                                       row, current columns
          set_top_margin              smgt      Zo     Set top margin at
                                                       current line
          set_top_margin_parm         smgtp     Zp     Set top (bottom)
                                                       margin at row #1
          set_window                  wind      wi     current window is
                                                       lines #1-#2 cols
                                                       #3-#4
          start_bit_image             sbim      Zq     Start printing bit
                                                       image graphics
          start_char_set_def          scsd      Zr     Start character set
                                                       definition #1, with
                                                       #2 characters in the
                                                       set
          stop_bit_image              rbim      Zs     Stop printing bit
                                                       image graphics
          stop_char_set_def           rcsd      Zt     End definition of
                                                       character set #1
          subscript_characters        subcs     Zu     List of
                                                       subscriptable
                                                       characters
          superscript_characters      supcs     Zv     List of
                                                       superscriptable
                                                       characters
          tab                         ht        ta     tab to next 8-space
                                                       hardware tab stop
          these_cause_cr              docr      Zw     Printing any of
                                                       these characters
                                                       causes CR
          to_status_line              tsl       ts     move to status line,
                                                       column #1
          tone                        tone      TO     select touch tone
                                                       dialing
          underline_char              uc        uc     underline char and
                                                       move past it
          up_half_line                hu        hu     half a line up
          user0                       u0        u0     User string #0
          user1                       u1        u1     User string #1
          user2                       u2        u2     User string #2
          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     XOFF character
          xon_character               xonc      XN     XON character
          zero_motion                 zerom     Zx     No motion for
                                                       subsequent character

       The following string  capabilities  are  present  in  the  SVr4.0  term
       structure, but were originally not documented in the man page.


                  <STRONG>Variable</STRONG>            <STRONG>Cap-</STRONG>       <STRONG>TCap</STRONG>      <STRONG>Description</STRONG>
                   <STRONG>String</STRONG>             <STRONG>name</STRONG>       <STRONG>Code</STRONG>
          alt_scancode_esc            scesa      S8     Alternate escape
                                                        for scancode
                                                        emulation
          bit_image_carriage_return   bicr       Yv     Move to beginning
                                                        of same row
          bit_image_newline           binel      Zz     Move to next row
                                                        of the bit image
          bit_image_repeat            birep      Xy     Repeat bit image
                                                        cell #1 #2 times
          char_set_names              csnm       Zy     Produce #1'th item
                                                        from list of
                                                        character set
                                                        names
          code_set_init               csin       ci     Init sequence for
                                                        multiple codesets
          color_names                 colornm    Yw     Give name for
                                                        color #1
          define_bit_image_region     defbi      Yx     Define rectangular
                                                        bit image region
          device_type                 devt       dv     Indicate
                                                        language/codeset
                                                        support
          display_pc_char             dispc      S1     Display PC
                                                        character #1
          end_bit_image_region        endbi      Yy     End a bit-image
                                                        region
          enter_pc_charset_mode       smpch      S2     Enter PC character
                                                        display mode
          enter_scancode_mode         smsc       S4     Enter PC scancode
                                                        mode
          exit_pc_charset_mode        rmpch      S3     Exit PC character
                                                        display mode
          exit_scancode_mode          rmsc       S5     Exit PC scancode
                                                        mode
          get_mouse                   getm       Gm     Curses should get
                                                        button events,
                                                        parameter #1 not
                                                        documented.
          key_mouse                   kmous      Km     Mouse event has
                                                        occurred
          mouse_info                  minfo      Mi     Mouse status
                                                        information
          pc_term_options             pctrm      S6     PC terminal
                                                        options
          pkey_plab                   pfxl       xl     Program function
                                                        key #1 to type
                                                        string #2 and show
                                                        string #3
          req_mouse_pos               reqmp      RQ     Request mouse
                                                        position

          scancode_escape             scesc      S7     Escape for
                                                        scancode emulation
          set0_des_seq                s0ds       s0     Shift to codeset 0
                                                        (EUC set 0, ASCII)
          set1_des_seq                s1ds       s1     Shift to codeset 1
          set2_des_seq                s2ds       s2     Shift to codeset 2
          set3_des_seq                s3ds       s3     Shift to codeset 3
          set_a_background            setab      AB     Set background
                                                        color to #1, using
                                                        ANSI escape
          set_a_foreground            setaf      AF     Set foreground
                                                        color to #1, using
                                                        ANSI escape
          set_color_band              setcolor   Yz     Change to ribbon
                                                        color #1
          set_lr_margin               smglr      ML     Set both left and
                                                        right margins to
                                                        #1, #2.  (ML is
                                                        not in BSD
                                                        termcap).
          set_page_length             slines     YZ     Set page length to
                                                        #1 lines
          set_tb_margin               smgtb      MT     Sets both top and
                                                        bottom margins to
                                                        #1, #2

        The XSI Curses standard added these hardcopy capabilities.  They  were
        used  in  some post-4.1 versions of System V curses, e.g., Solaris 2.5
        and IRIX 6.x.  Except for <STRONG>YI</STRONG>, the <STRONG>ncurses</STRONG> termcap names for  them  are
        invented.   According to the XSI Curses standard, they have no termcap
        names.  If your compiled terminfo entries use these, they may  not  be
        binary-compatible with System V terminfo entries after SVr4.1; beware!


                  <STRONG>Variable</STRONG>            <STRONG>Cap-</STRONG>      <STRONG>TCap</STRONG>       <STRONG>Description</STRONG>
                   <STRONG>String</STRONG>             <STRONG>name</STRONG>      <STRONG>Code</STRONG>
          enter_horizontal_hl_mode    ehhlm     Xh     Enter horizontal
                                                       highlight mode
          enter_left_hl_mode          elhlm     Xl     Enter left highlight
                                                       mode
          enter_low_hl_mode           elohlm    Xo     Enter low highlight
                                                       mode
          enter_right_hl_mode         erhlm     Xr     Enter right
                                                       highlight mode
          enter_top_hl_mode           ethlm     Xt     Enter top highlight
                                                       mode
          enter_vertical_hl_mode      evhlm     Xv     Enter vertical
                                                       highlight mode
          set_a_attributes            sgr1      sA     Define second set of
                                                       video attributes
                                                       #1-#6
          set_pglen_inch              slength   YI     Set page length to
                                                       #1 hundredth of an
                                                       inch (some
                                                       implementations use
                                                       sL for termcap).


</PRE><H3><a name="h3-User-Defined-Capabilities">User-Defined Capabilities</a></H3><PRE>
       The  preceding  section  listed the <EM>predefined</EM> capabilities.  They deal
       with some special features for terminals no longer (or possibly  never)
       produced.   Occasionally  there are special features of newer terminals
       which are awkward or impossible to represent by reusing the  predefined
       capabilities.

       <STRONG>ncurses</STRONG>    addresses   this   limitation   by   allowing   user-defined
       capabilities.  The <STRONG>tic</STRONG> and <STRONG>infocmp</STRONG> programs provide the <STRONG>-x</STRONG>  option  for
       this purpose.  When <STRONG>-x</STRONG> is set, <STRONG>tic</STRONG> treats unknown capabilities as user-
       defined.  That is, if <STRONG>tic</STRONG> encounters a capability name  which  it  does
       not  recognize, it infers its type (boolean, number or string) from the
       syntax and makes an extended table  entry  for  that  capability.   The
       <STRONG><A HREF="curs_extend.3x.html">use_extended_names(3x)</A></STRONG>  function  makes  this information conditionally
       available to applications.   The  ncurses  library  provides  the  data
       leaving most of the behavior to applications:

       <STRONG>o</STRONG>   User-defined  capability  strings  whose  name  begins with "k" are
           treated as function keys.

       <STRONG>o</STRONG>   The types (boolean,  number,  string)  determined  by  <STRONG>tic</STRONG>  can  be
           inferred by successful calls on <STRONG>tigetflag</STRONG>, etc.

       <STRONG>o</STRONG>   If the capability name happens to be two characters, the capability
           is also available through the termcap interface.

       While termcap is said to be  extensible  because  it  does  not  use  a
       predefined  set of capabilities, in practice it has been limited to the
       capabilities defined by terminfo implementations.   As  a  rule,  user-
       defined capabilities intended for use by termcap applications should be
       limited to booleans and numbers to avoid running  past  the  1023  byte
       limit  assumed  by  termcap implementations and their applications.  In
       particular, providing extended sets  of  function  keys  (past  the  60
       numbered keys and the handful of special named keys) is best done using
       the longer names available using terminfo.


</PRE><H3><a name="h3-A-Sample-Entry">A Sample Entry</a></H3><PRE>
       The  following  entry,  describing  an   ANSI-standard   terminal,   is
       representative of what a <STRONG>terminfo</STRONG> entry for a modern terminal typically
       looks like.

       ansi|ansi/pc-term compatible with color,
               am, mc5i, mir, msgr,
               colors#8, cols#80, it#8, lines#24, ncv#3, pairs#64,
               acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260
                    j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303
                    u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
               bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J,
               cr=^M, cub=\E[%p1%dD, cub1=\E[D, 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, dch=\E[%p1%dP, dch1=\E[P,
               dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
               el1=\E[1K, home=\E[H, hpa=\E[%i%p1%dG, ht=\E[I, hts=\EH,
               ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J,
               indn=\E[%p1%dS, invis=\E[8m, kbs=^H, kcbt=\E[Z, kcub1=\E[D,
               kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, kich1=\E[L,
               mc4=\E[4i, mc5=\E[5i, nel=\r\E[S, op=\E[39;49m,
               rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, rin=\E[%p1%dT,
               rmacs=\E[10m, rmpch=\E[10m, rmso=\E[m, rmul=\E[m,
               s0ds=\E(B, s1ds=\E)B, s2ds=\E*B, s3ds=\E+B,
               setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
               sgr=\E[0;10%?%p1%t;7%;
                          %?%p2%t;4%;
                          %?%p3%t;7%;
                          %?%p4%t;5%;
                          %?%p6%t;1%;
                          %?%p7%t;8%;
                          %?%p9%t;11%;m,
               sgr0=\E[0;10m, smacs=\E[11m, smpch=\E[11m, smso=\E[7m,
               smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n,
               u8=\E[?%[;0123456789]c, u9=\E[c, vpa=\E[%i%p1%dd,

       Entries may continue onto multiple lines by placing white space at  the
       beginning  of  each line except the first.  Comments may be included on
       lines beginning with "#".  Capabilities in <EM>terminfo</EM> are of three types:

       <STRONG>o</STRONG>   Boolean capabilities which indicate  that  the  terminal  has  some
           particular feature,

       <STRONG>o</STRONG>   numeric capabilities giving the size of the terminal or the size of
           particular delays, and

       <STRONG>o</STRONG>   string capabilities, which give a sequence which  can  be  used  to
           perform particular terminal operations.


</PRE><H3><a name="h3-Types-of-Capabilities">Types of Capabilities</a></H3><PRE>
       All capabilities have names.  For instance, the fact that ANSI-standard
       terminals have <EM>automatic</EM> <EM>margins</EM> (i.e., an automatic return  and  line-
       feed  when the end of a line is reached) is indicated by the capability
       <STRONG>am</STRONG>.  Hence the description of ansi includes <STRONG>am</STRONG>.   Numeric  capabilities
       are  followed  by  the  character  "#" and then a positive value.  Thus
       <STRONG>cols</STRONG>, which indicates the number of columns the terminal has, gives the
       value  "80" for ansi.  Values for numeric capabilities may be specified
       in decimal, octal or hexadecimal,  using  the  C  programming  language
       conventions (e.g., 255, 0377 and 0xff or 0xFF).

       Finally,  string  valued capabilities, such as <STRONG>el</STRONG> (clear to end of line
       sequence) are given by the two-character  code,  an  "=",  and  then  a
       string ending at the next following ",".

       A  number  of  escape  sequences  are  provided  in  the  string valued
       capabilities for easy encoding of characters there:

       <STRONG>o</STRONG>   Both <STRONG>\E</STRONG> and <STRONG>\e</STRONG> map to an ESCAPE character,

       <STRONG>o</STRONG>   <STRONG>^x</STRONG> maps to a control-x for any appropriate <EM>x</EM>, and

       <STRONG>o</STRONG>   the sequences

             <STRONG>\n</STRONG>, <STRONG>\l</STRONG>, <STRONG>\r</STRONG>, <STRONG>\t</STRONG>, <STRONG>\b</STRONG>, <STRONG>\f</STRONG>, and <STRONG>\s</STRONG>

           produce

             <EM>newline</EM>, <EM>line-feed</EM>, <EM>return</EM>, <EM>tab</EM>, <EM>backspace</EM>, <EM>form-feed</EM>, and <EM>space</EM>,

           respectively.

       X/Open Curses does not say what "appropriate <EM>x</EM>" might be.  In practice,
       that  is a printable ASCII graphic character.  The special case "^?" is
       interpreted as DEL (127).  In all other cases, the character  value  is
       AND'd  with 0x1f, mapping to ASCII control codes in the range 0 through
       31.

       Other escapes include

       <STRONG>o</STRONG>   <STRONG>\^</STRONG> for <STRONG>^</STRONG>,

       <STRONG>o</STRONG>   <STRONG>\\</STRONG> for <STRONG>\</STRONG>,

       <STRONG>o</STRONG>   <STRONG>\</STRONG>, for comma,

       <STRONG>o</STRONG>   <STRONG>\:</STRONG> for <STRONG>:</STRONG>,

       <STRONG>o</STRONG>   and <STRONG>\0</STRONG> for null.

           <STRONG>\0</STRONG> will produce \200, which does not terminate a string but behaves
           as  a null character on most terminals, providing CS7 is specified.
           See <STRONG>stty(1)</STRONG>.

           The reason for this quirk is to maintain  binary  compatibility  of
           the  compiled  terminfo files with other implementations, e.g., the
           SVr4 systems, which document this.   Compiled  terminfo  files  use
           null-terminated  strings,  with  no  lengths.  Modifying this would
           require a new binary  format,  which  would  not  work  with  other
           implementations.

       Finally, characters may be given as three octal digits after a <STRONG>\</STRONG>.

       A  delay  in  milliseconds  may appear anywhere in a string capability,
       enclosed in $&lt;..&gt; brackets, as in <STRONG>el</STRONG>=\EK$&lt;5&gt;,  and  padding  characters
       are supplied by <STRONG><A HREF="curs_terminfo.3x.html">tputs(3x)</A></STRONG> to provide this delay.

       <STRONG>o</STRONG>   The  delay  must  be  a  number  with  at most one decimal place of
           precision; it may be followed by suffixes "*" or "/" or both.

       <STRONG>o</STRONG>   A "*" indicates 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
           character, the factor is still the number of <EM>lines</EM> affected.)

           Normally, padding is advisory if the device has the <STRONG>xon</STRONG> capability;
           it is used for cost computation but does not trigger delays.

       <STRONG>o</STRONG>   A "/" suffix indicates that the padding is mandatory and  forces  a
           delay of the given number of milliseconds even on devices for which
           <STRONG>xon</STRONG> is present to indicate flow control.

       Sometimes individual capabilities must be commented out.  To  do  this,
       put  a  period before the capability name.  For example, see the second
       <STRONG>ind</STRONG> in the example above.


</PRE><H3><a name="h3-Fetching-Compiled-Descriptions">Fetching Compiled Descriptions</a></H3><PRE>
       The <STRONG>ncurses</STRONG> library  searches  for  terminal  descriptions  in  several
       places.   It  uses only the first description found.  The library has a
       compiled-in list of  places  to  search  which  can  be  overridden  by
       environment  variables.   Before starting to search, <STRONG>ncurses</STRONG> eliminates
       duplicates in its search list.

       <STRONG>o</STRONG>   If the environment variable TERMINFO is set, it is  interpreted  as
           the pathname of a directory containing the compiled description you
           are working on.  Only that directory is searched.

       <STRONG>o</STRONG>   If TERMINFO is not set, <STRONG>ncurses</STRONG> will instead look in the  directory
           <STRONG>$HOME/.terminfo</STRONG> for a compiled description.

       <STRONG>o</STRONG>   Next,  if  the  environment  variable TERMINFO_DIRS is set, <STRONG>ncurses</STRONG>
           will interpret the contents of that variable as a  list  of  colon-
           separated directories (or database files) to be searched.

           An  empty directory name (i.e., if the variable begins or ends with
           a colon, or contains adjacent colons) is interpreted as the  system
           location <EM>/usr/share/terminfo</EM>.

       <STRONG>o</STRONG>   Finally, <STRONG>ncurses</STRONG> searches these compiled-in locations:

           <STRONG>o</STRONG>   a list of directories (no default value), and

           <STRONG>o</STRONG>   the   system   terminfo   directory,  <EM>/usr/share/terminfo</EM>  (the
               compiled-in default).


</PRE><H3><a name="h3-Preparing-Descriptions">Preparing Descriptions</a></H3><PRE>
       We now outline how to prepare  descriptions  of  terminals.   The  most
       effective  way  to  prepare  a terminal description is by imitating the
       description of a similar  terminal  in  <EM>terminfo</EM>  and  to  build  up  a
       description gradually, using partial descriptions with <EM>vi</EM> or some other
       screen-oriented program to check that they are correct.  Be aware  that
       a  very  unusual terminal may expose deficiencies in the ability of the
       <EM>terminfo</EM> file to describe it or bugs in the screen-handling code of the
       test program.

       To  get the padding for insert line right (if the terminal manufacturer
       did not document it) a severe test is to edit  a  large  file  at  9600
       baud, delete 16 or so lines from the middle of the screen, then hit the
       "u" key several times quickly.  If the terminal messes up, more padding
       is usually needed.  A similar test can be used for insert character.


</PRE><H3><a name="h3-Basic-Capabilities">Basic Capabilities</a></H3><PRE>
       The  number  of  columns  on each line for the terminal is given by the
       <STRONG>cols</STRONG> numeric capability.  If the terminal is a CRT, then the number  of
       lines  on the screen is given by the <STRONG>lines</STRONG> capability.  If the terminal
       wraps around to the beginning of the next  line  when  it  reaches  the
       right  margin,  then it should have the <STRONG>am</STRONG> capability.  If the terminal
       can clear its screen, leaving the cursor in  the  home  position,  then
       this  is  given  by  the  <STRONG>clear</STRONG>  string  capability.   If  the terminal
       overstrikes (rather than clearing a position when a character is struck
       over)  then  it  should  have  the <STRONG>os</STRONG> capability.  If the terminal is a
       printing terminal, with no soft copy unit, give it both <STRONG>hc</STRONG> and <STRONG>os</STRONG>.  (<STRONG>os</STRONG>
       applies  to  storage scope terminals, such as 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 <STRONG>cr</STRONG>.  (Normally
       this will be carriage return,  control/M.)   If  there  is  a  code  to
       produce an audible signal (bell, beep, etc) give this as <STRONG>bel</STRONG>.

       If there is a code to move the cursor one position to the left (such as
       backspace) that capability should be given as <STRONG>cub1</STRONG>.   Similarly,  codes
       to  move  to the right, up, and down should be given as <STRONG>cuf1</STRONG>, <STRONG>cuu1</STRONG>, and
       <STRONG>cud1</STRONG>.  These local cursor motions should not alter the text  they  pass
       over,  for  example,  you  would  not normally use "<STRONG>cuf1</STRONG>= " because the
       space would erase the character moved over.

       A very important point here is that the local cursor motions encoded in
       <EM>terminfo</EM>  are  undefined  at  the left and top edges of a CRT terminal.
       Programs should never attempt to backspace around the left edge, unless
       <STRONG>bw</STRONG>  is given, and 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 <STRONG>ind</STRONG> (index) string.

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

       Parameterized  versions  of  the  scrolling  sequences are <STRONG>indn</STRONG> and <STRONG>rin</STRONG>
       which have the same semantics as <STRONG>ind</STRONG> and <STRONG>ri</STRONG> except that they  take  one
       parameter,  and scroll that many lines.  They are also undefined except
       at the appropriate edge of the screen.

       The <STRONG>am</STRONG> 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 <STRONG>cuf1</STRONG> from the last column.  The only local motion  which  is  defined
       from  the  left  edge is if <STRONG>bw</STRONG> is given, then a <STRONG>cub1</STRONG> from the left edge
       will move to the right edge of the previous row.  If <STRONG>bw</STRONG> 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 <EM>terminfo</EM> file usually assumes that this is on;
       i.e., <STRONG>am</STRONG>.  If the terminal has a  command  which  moves  to  the  first
       column  of  the  next line, that command can be given as <STRONG>nel</STRONG> (newline).
       It does not matter if the command clears the remainder of  the  current
       line,  so  if the terminal has no <STRONG>cr</STRONG> and <STRONG>lf</STRONG> it may still be possible to
       craft a working <STRONG>nel</STRONG> out of one or both of them.

       These  capabilities  suffice  to  describe  hard-copy  and  "glass-tty"
       terminals.  Thus the model 33 teletype is described as

       33|tty33|tty|model 33 teletype,
               bel=^G, cols#72, cr=^M, cud1=^J, hc, ind=^J, os,

       while the Lear Siegler ADM-3 is described as

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


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

       The parameter mechanism uses a stack and special <STRONG>%</STRONG> codes to  manipulate
       it.   Typically  a  sequence  will  push one of the parameters onto the
       stack and then print it in  some  format.   Print  (e.g.,  "%d")  is  a
       special  case.  Other operations, including "%t" pop their operand from
       the stack.   It  is  noted  that  more  complex  operations  are  often
       necessary, e.g., in the <STRONG>sgr</STRONG> string.

       The <STRONG>%</STRONG> encodings have the following meanings:

       <STRONG>%%</STRONG>   outputs "%"

       <STRONG>%</STRONG><EM>[[</EM>:<EM>]flags][width[.precision]][</EM><STRONG>doxXs</STRONG><EM>]</EM>
            as  in  <STRONG>printf(3)</STRONG>,  flags are <EM>[-+#]</EM> and <EM>space</EM>.  Use a ":" to allow
            the next character to be a "-" flag, avoiding interpreting "%-" as
            an operator.

       %c   print <EM>pop()</EM> like %c in <STRONG>printf</STRONG>

       <STRONG>%s</STRONG>   print <EM>pop()</EM> like %s in <STRONG>printf</STRONG>

       <STRONG>%p</STRONG><EM>[1-9]</EM>
            push <EM>i</EM>'th parameter

       <STRONG>%P</STRONG><EM>[a-z]</EM>
            set dynamic variable <EM>[a-z]</EM> to <EM>pop()</EM>

       <STRONG>%g</STRONG><EM>[a-z]/</EM>
            get dynamic variable <EM>[a-z]</EM> and push it

       <STRONG>%P</STRONG><EM>[A-Z]</EM>
            set static variable <EM>[a-z]</EM> to <EM>pop()</EM>

       <STRONG>%g</STRONG><EM>[A-Z]</EM>
            get static variable <EM>[a-z]</EM> and push it

            The  terms  "static"  and "dynamic" are misleading.  Historically,
            these are simply two different sets of variables, whose values are
            not  reset  between calls to <STRONG><A HREF="curs_terminfo.3x.html">tparm(3x)</A></STRONG>.  However, that fact is not
            documented in other implementations.  Relying on it will adversely
            impact portability to other implementations:

            <STRONG>o</STRONG>   SVr2  curses  supported <EM>dynamic</EM> variables.  Those are set only
                by a <STRONG>%P</STRONG> operator.  A <STRONG>%g</STRONG> for a  given  variable  without  first
                setting  it  with  <STRONG>%P</STRONG> will give unpredictable results, because
                dynamic variables are an  uninitialized  local  array  on  the
                stack in the <STRONG>tparm</STRONG> function.

            <STRONG>o</STRONG>   SVr3.2  curses supported <EM>static</EM> variables.  Those are an array
                in the <STRONG>TERMINAL</STRONG> structure (declared in <STRONG>term.h</STRONG>), and are zeroed
                automatically when the <STRONG>setupterm</STRONG> function allocates the data.

            <STRONG>o</STRONG>   SVr4 curses made no further improvements to the <EM>dynamic/static</EM>
                variable feature.

            <STRONG>o</STRONG>   Solaris XPG4 curses does not distinguish between  <EM>dynamic</EM>  and
                <EM>static</EM>  variables.  They are the same.  Like SVr4 curses, XPG4
                curses does not initialize these explicitly.

            <STRONG>o</STRONG>   Before version 6.3, ncurses stores  both  <EM>dynamic</EM>  and  <EM>static</EM>
                variables in persistent storage, initialized to zeros.

            <STRONG>o</STRONG>   Beginning  with version 6.3, ncurses stores <EM>static</EM> and <EM>dynamic</EM>
                variables  in  the  same  manner  as   SVr4.    Unlike   other
                implementations,  ncurses  zeros  dynamic variables before the
                first <STRONG>%g</STRONG> or <STRONG>%P</STRONG> operator.

       <STRONG>%'</STRONG><EM>c</EM><STRONG>'</STRONG> char constant <EM>c</EM>

       <STRONG>%{</STRONG><EM>nn</EM><STRONG>}</STRONG>
            integer constant <EM>nn</EM>

       <STRONG>%l</STRONG>   push strlen(pop)

       <STRONG>%+</STRONG>, <STRONG>%-</STRONG>, <STRONG>%*</STRONG>, <STRONG>%/</STRONG>, <STRONG>%m</STRONG>
            arithmetic (%m is <EM>mod</EM>): <EM>push(pop()</EM> <EM>op</EM> <EM>pop())</EM>

       <STRONG>%&amp;</STRONG>, <STRONG>%|</STRONG>, <STRONG>%^</STRONG>
            bit operations (AND, OR and exclusive-OR): <EM>push(pop()</EM> <EM>op</EM> <EM>pop())</EM>

       <STRONG>%=</STRONG>, <STRONG>%&gt;</STRONG>, <STRONG>%&lt;</STRONG>
            logical operations: <EM>push(pop()</EM> <EM>op</EM> <EM>pop())</EM>

       <STRONG>%A</STRONG>, <STRONG>%O</STRONG>
            logical AND and OR operations (for conditionals)

       <STRONG>%!</STRONG>, <STRONG>%~</STRONG>
            unary operations (logical and bit complement): <EM>push(op</EM> <EM>pop())</EM>

       <STRONG>%i</STRONG>   add 1 to first two parameters (for ANSI terminals)

       <STRONG>%?</STRONG> <EM>expr</EM> <STRONG>%t</STRONG> <EM>thenpart</EM> <STRONG>%e</STRONG> <EM>elsepart</EM> <STRONG>%;</STRONG>
            This forms an if-then-else.  The <STRONG>%e</STRONG> <EM>elsepart</EM> is optional.  Usually
            the  <STRONG>%?</STRONG>  <EM>expr</EM>  part  pushes a value onto the stack, and <STRONG>%t</STRONG> pops it
            from the stack, testing if it is nonzero (true).  If  it  is  zero
            (false), control passes to the <STRONG>%e</STRONG> (else) part.

            It is possible to form else-if's a la Algol 68:
            <STRONG>%?</STRONG> c1 <STRONG>%t</STRONG> b1 <STRONG>%e</STRONG> c2 <STRONG>%t</STRONG> b2 <STRONG>%e</STRONG> c3 <STRONG>%t</STRONG> b3 <STRONG>%e</STRONG> c4 <STRONG>%t</STRONG> b4 <STRONG>%e</STRONG> <STRONG>%;</STRONG>

            where ci are conditions, bi are bodies.

            Use  the  <STRONG>-f</STRONG>  option of <STRONG>tic</STRONG> or <STRONG>infocmp</STRONG> to see the structure of if-
            then-else's.  Some strings, e.g., <STRONG>sgr</STRONG> can be very complicated when
            written  on  one line.  The <STRONG>-f</STRONG> option splits the string into lines
            with the parts indented.

       Binary operations are in postfix form with the operands  in  the  usual
       order.   That  is,  to  get  x-5  one would use "%gx%{5}%-".  <STRONG>%P</STRONG> and <STRONG>%g</STRONG>
       variables are persistent across escape-string evaluations.

       Consider the HP2645, which, to get to row 3 and column 12, needs to  be
       sent  \E&amp;a12c03Y padded for 6 milliseconds.  Note that the order of the
       rows and columns is inverted here, and that  the  row  and  column  are
       printed    as    two    digits.     Thus    its   <STRONG>cup</STRONG>   capability   is
       "cup=6\E&amp;%p2%2dc%p1%2dY".

       The Microterm ACT-IV needs the current row and column sent preceded  by
       a   <STRONG>^T</STRONG>,   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 (<STRONG>cub1</STRONG>), and to move the cursor up one line on the
       screen (<STRONG>cuu1</STRONG>).  This is necessary because it  is  not  always  safe  to
       transmit  <STRONG>\n</STRONG> <STRONG>^D</STRONG> and <STRONG>\r</STRONG>, 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%' '%+%c%p2%' '%+%c".  After sending
       "\E=", this pushes the first parameter, pushes the ASCII  value  for  a
       space (32), adds them (pushing the sum on the stack in place of the two
       previous values) and outputs that value as a character.  Then the  same
       is  done for the second parameter.  More complex arithmetic is possible
       using the stack.


</PRE><H3><a name="h3-Cursor-Motions">Cursor Motions</a></H3><PRE>
       If the terminal has a fast way to home the cursor (to very  upper  left
       corner  of screen) then this can be given as <STRONG>home</STRONG>; similarly a fast way
       of getting to the lower left-hand corner can be given as <STRONG>ll</STRONG>;  this  may
       involve going up with <STRONG>cuu1</STRONG> from the home position, but a program should
       never do this itself (unless <STRONG>ll</STRONG> 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 HP
       terminals cannot be used for <STRONG>home</STRONG>.)

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

       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 <STRONG>smcup</STRONG> and <STRONG>rmcup</STRONG>.  This arises, for example, from  terminals
       like  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 <STRONG>smcup</STRONG> sets the command character to be the
       one used by terminfo.  If the  <STRONG>smcup</STRONG>  sequence  will  not  restore  the
       screen  after  an  <STRONG>rmcup</STRONG>  sequence  is  output  (to  the state prior to
       outputting <STRONG>rmcup</STRONG>), specify <STRONG>nrrmc</STRONG>.


</PRE><H3><a name="h3-Margins">Margins</a></H3><PRE>
       SVr4 (and X/Open Curses) list several string capabilities  for  setting
       margins.   Two  were  intended  for use with terminals, and another six
       were intended for use with printers.

       <STRONG>o</STRONG>   The two terminal capabilities assume that the terminal may have the
           capability  of  setting the left and/or right margin at the current
           cursor column position.

       <STRONG>o</STRONG>   The printer capabilities assume that the printer may have two types
           of capability:

           <STRONG>o</STRONG>   the ability to set a top and/or bottom margin using the current
               line position, and

           <STRONG>o</STRONG>   parameterized capabilities for setting the top,  bottom,  left,
               right margins given the number of rows or columns.

       In  practice,  the  categorization into "terminal" and "printer" is not
       suitable:

       <STRONG>o</STRONG>   The AT&amp;T SVr4 terminal database uses  <STRONG>smgl</STRONG>  four  times,  for  AT&amp;T
           hardware.

           Three  of  the  four  are  printers.   They lack the ability to set
           left/right margins by specifying the column.

       <STRONG>o</STRONG>   Other (non-AT&amp;T) terminals may support margins but using  different
           assumptions from AT&amp;T.

           For  instance,  the DEC VT420 supports left/right margins, but only
           using a column parameter.  As an added complication, the VT420 uses
           two  settings to fully enable left/right margins (left/right margin
           mode, and origin mode).  The  former  enables  the  margins,  which
           causes  printed  text  to  wrap  within  margins, but the latter is
           needed to prevent cursor-addressing outside those margins.

       <STRONG>o</STRONG>   Both DEC VT420 left/right margins are set  with  a  single  control
           sequence.  If either is omitted, the corresponding margin is set to
           the left or right edge of the  display  (rather  than  leaving  the
           margin unmodified).

       These are the margin-related capabilities:

                <STRONG>Name</STRONG>       <STRONG>Description</STRONG>
                ------------------------------------------------------
                smgl       Set left margin at current column
                smgr       Set right margin at current column
                smgb       Set bottom margin at current line
                smgt       Set top margin at current line
                smgbp      Set bottom margin at line <EM>N</EM>
                smglp      Set left margin at column <EM>N</EM>
                smgrp      Set right margin at column <EM>N</EM>
                smgtp      Set top margin at line <EM>N</EM>
                smglr      Set both left and right margins to <EM>L</EM> and <EM>R</EM>
                smgtb      Set both top and bottom margins to <EM>T</EM> and <EM>B</EM>

       When  writing  an  application that uses these string capabilities, the
       pairs should be first checked to see if each capability in the pair  is
       set or only one is set:

       <STRONG>o</STRONG>   If  both  <STRONG>smglp</STRONG>  and  <STRONG>smgrp</STRONG>  are  set,  each  is used with a single
           argument, <EM>N</EM>, that gives the column number of  the  left  and  right
           margin, respectively.

       <STRONG>o</STRONG>   If  both  <STRONG>smgtp</STRONG>  and <STRONG>smgbp</STRONG> are set, each is used to set the top and
           bottom margin, respectively:

           <STRONG>o</STRONG>   <STRONG>smgtp</STRONG> is used with a single argument, <EM>N</EM>, the line number of the
               top margin.

           <STRONG>o</STRONG>   <STRONG>smgbp</STRONG>  is  used with two arguments, <EM>N</EM> and <EM>M</EM>, that give the line
               number of the bottom margin, the first counting from the top of
               the  page  and  the  second  counting  from  the  bottom.  This
               accommodates the two styles of specifying the bottom margin  in
               different manufacturers' printers.

           When  designing  a terminfo entry for a printer that has a settable
           bottom margin, only the first or second argument  should  be  used,
           depending on the printer.  When developing an application that uses
           <STRONG>smgbp</STRONG> to set the bottom margin, both arguments must be given.

       Conversely, when only one capability in the pair is set:

       <STRONG>o</STRONG>   If only one of <STRONG>smglp</STRONG> and <STRONG>smgrp</STRONG> is set, then it  is  used  with  two
           arguments, the column number of the left and right margins, in that
           order.

       <STRONG>o</STRONG>   Likewise, if only one of <STRONG>smgtp</STRONG> and <STRONG>smgbp</STRONG> is set, then  it  is  used
           with  two  arguments  that give the top and bottom margins, in that
           order, counting from the top of the page.

           When designing a terminfo entry for a printer that requires setting
           both  left and right or top and bottom margins simultaneously, only
           one capability in the pairs <STRONG>smglp</STRONG> and  <STRONG>smgrp</STRONG>  or  <STRONG>smgtp</STRONG>  and  <STRONG>smgbp</STRONG>
           should be defined, leaving the other unset.

       Except  for  very  old terminal descriptions, e.g., those developed for
       SVr4, the scheme just described  should  be  considered  obsolete.   An
       improved set of capabilities was added late in the SVr4 releases (<STRONG>smglr</STRONG>
       and <STRONG>smgtb</STRONG>),  which  explicitly  use  two  parameters  for  setting  the
       left/right or top/bottom margins.

       When setting margins, the line- and column-values are zero-based.

       The  <STRONG>mgc</STRONG>  string  capability  should  be defined.  Applications such as
       <STRONG><A HREF="tabs.1.html">tabs(1)</A></STRONG> rely upon this to reset all margins.


</PRE><H3><a name="h3-Area-Clears">Area Clears</a></H3><PRE>
       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 <STRONG>el</STRONG>.  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 <STRONG>el1</STRONG>.  If the terminal can clear from the current  position  to
       the  end  of  the display, then this should be given as <STRONG>ed</STRONG>.  <STRONG>Ed</STRONG> 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 <STRONG>ed</STRONG> is not
       available.)


</PRE><H3><a name="h3-Insert_delete-line-and-vertical-motions">Insert/delete line and vertical motions</a></H3><PRE>
       If the terminal can open a new blank line before  the  line  where  the
       cursor  is,  this  should  be  given as <STRONG>il1</STRONG>; 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 <STRONG>dl1</STRONG>; this is done only from the  first
       position on the line to be deleted.  Versions of <STRONG>il1</STRONG> and <STRONG>dl1</STRONG> which take
       a single parameter and insert or delete that many lines can be given as
       <STRONG>il</STRONG> and <STRONG>dl</STRONG>.

       If  the  terminal  has a settable scrolling region (like the vt100) the
       command to set this can be described with  the  <STRONG>csr</STRONG>  capability,  which
       takes two parameters: the top and bottom lines of the scrolling region.
       The cursor position is, alas, undefined after using this command.

       It is possible to get the effect of insert or delete line using <STRONG>csr</STRONG>  on
       a  properly  chosen  region;  the  <STRONG>sc</STRONG>  and <STRONG>rc</STRONG> (save and restore cursor)
       commands may be useful for ensuring that your synthesized insert/delete
       string  does  not  move the cursor.  (Note that the <STRONG><A HREF="ncurses.3x.html">ncurses(3x)</A></STRONG> library
       does  this  synthesis  automatically,   so   you   need   not   compose
       insert/delete strings for an entry with <STRONG>csr</STRONG>).

       Yet  another  way  to  construct  insert  and  delete might be to use a
       combination of  index  with  the  memory-lock  feature  found  on  some
       terminals   (like   the   HP-700/90  series,  which  however  also  has
       insert/delete).

       Inserting lines at the top or bottom of the screen  can  also  be  done
       using  <STRONG>ri</STRONG>  or  <STRONG>ind</STRONG> on many terminals without a true insert/delete line,
       and is often faster even on terminals with those features.

       The boolean <STRONG>non_dest_scroll_region</STRONG> should  be  set  if  each  scrolling
       window  is  effectively  a view port on a screen-sized canvas.  To test
       for this capability, create a scrolling region in  the  middle  of  the
       screen,  write something to the bottom line, move the cursor to the top
       of the region, and do <STRONG>ri</STRONG> followed by <STRONG>dl1</STRONG> or <STRONG>ind</STRONG>.  If the data  scrolled
       off  the  bottom  of the region by the <STRONG>ri</STRONG> re-appears, then scrolling is
       non-destructive.  System V and XSI Curses expect that  <STRONG>ind</STRONG>,  <STRONG>ri</STRONG>,  <STRONG>indn</STRONG>,
       and  <STRONG>rin</STRONG>  will  simulate  destructive  scrolling;  their  documentation
       cautions you not to define  <STRONG>csr</STRONG>  unless  this  is  true.   This  <STRONG>curses</STRONG>
       implementation  is  more  liberal  and  will  do  explicit erases after
       scrolling if <STRONG>ndsrc</STRONG> is defined.

       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 <STRONG>wind</STRONG>.  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 <STRONG>da</STRONG> capability
       should be given; if display memory  can  be  retained  below,  then  <STRONG>db</STRONG>
       should  be given.  These indicate that deleting a line or scrolling may
       bring non-blank lines up from below or that scrolling back with <STRONG>ri</STRONG>  may
       bring down non-blank lines.


</PRE><H3><a name="h3-Insert_Delete-Character">Insert/Delete Character</a></H3><PRE>
       There  are  two  basic  kinds  of intelligent terminals with respect to
       insert/delete character which can be  described  using  <EM>terminfo.</EM>   The
       most   common   insert/delete  character  operations  affect  only  the
       characters on the current line and shift characters off the end of  the
       line  rigidly.  Other terminals, such as the Concept 100 and the Perkin
       Elmer Owl, make a distinction between typed and untyped blanks  on  the
       screen,  shifting  upon an insert or delete only to an untyped blank on
       the screen which is either  eliminated,  or  expanded  to  two  untyped
       blanks.

       You  can determine the kind of terminal you have by clearing the screen
       and then typing text separated by cursor  motions.   Type  "abc    def"
       using  local  cursor  motions  (not  spaces)  between the "abc" and the
       "def".  Then position the cursor before the "abc" and put the  terminal
       in  insert  mode.   If typing characters causes the rest of the line to
       shift rigidly and characters to fall off the end,  then  your  terminal
       does  not  distinguish  between  blanks  and untyped positions.  If the
       "abc" shifts over to the "def" which then move together around the  end
       of  the  current  line  and  onto  the next as you insert, you have the
       second type of terminal, and  should  give  the  capability  <STRONG>in</STRONG>,  which
       stands for "insert null".

       While  these  are  two  logically  separate attributes (one line versus
       multi-line insert mode, and special treatment  of  untyped  spaces)  we
       have  seen  no terminals whose insert mode cannot be described with the
       single attribute.

       Terminfo can describe both terminals which have  an  insert  mode,  and
       terminals  which send a simple sequence to open a blank position on the
       current line.  Give as <STRONG>smir</STRONG> the sequence to get into insert mode.  Give
       as  <STRONG>rmir</STRONG>  the  sequence  to  leave  insert  mode.  Now give as <STRONG>ich1</STRONG> any
       sequence needed to be sent just before  sending  the  character  to  be
       inserted.   Most  terminals with a true insert mode will not give <STRONG>ich1</STRONG>;
       terminals which send a sequence to open a screen position  should  give
       it here.

       If  your  terminal has both, insert mode is usually preferable to <STRONG>ich1</STRONG>.
       Technically, you should not give  both  unless  the  terminal  actually
       requires  both to be used in combination.  Accordingly, some non-curses
       applications get confused if both are present; the symptom  is  doubled
       characters  in  an  update using insert.  This requirement is now rare;
       most <STRONG>ich</STRONG> sequences do not require previous smir, and most  smir  insert
       modes  do  not  require <STRONG>ich1</STRONG> before each character.  Therefore, the new
       <STRONG>curses</STRONG> actually assumes this is the case and uses either  <STRONG>rmir</STRONG>/<STRONG>smir</STRONG>  or
       <STRONG>ich</STRONG>/<STRONG>ich1</STRONG>  as appropriate (but not both).  If you have to write an entry
       to be used under new curses for a terminal old  enough  to  need  both,
       include the <STRONG>rmir</STRONG>/<STRONG>smir</STRONG> sequences in <STRONG>ich1</STRONG>.

       If post insert padding is needed, give this as a number of milliseconds
       in <STRONG>ip</STRONG> (a string option).  Any other sequence which may need to be  sent
       after an insert of a single character may also be given in <STRONG>ip</STRONG>.  If your
       terminal needs both to be placed into an "insert mode"  and  a  special
       code  to  precede each inserted character, then both <STRONG>smir</STRONG>/<STRONG>rmir</STRONG> and <STRONG>ich1</STRONG>
       can be given, and both will be used.   The  <STRONG>ich</STRONG>  capability,  with  one
       parameter, <EM>n</EM>, will repeat the effects of <STRONG>ich1</STRONG> <EM>n</EM> times.

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

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

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

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


</PRE><H3><a name="h3-Highlighting_-Underlining_-and-Visible-Bells">Highlighting, Underlining, and Visible Bells</a></H3><PRE>
       If your terminal has one or more kinds of display attributes, these can
       be  represented  in  a number of different ways.  You should choose one
       display form as <EM>standout</EM> <EM>mode</EM>,  representing  a  good,  high  contrast,
       easy-on-the-eyes,  format  for  highlighting  error  messages and other
       attention getters.  (If you have a choice,  reverse  video  plus  half-
       bright  is  good,  or reverse video alone.)  The sequences to enter and
       exit standout mode are given as <STRONG>smso</STRONG> and <STRONG>rmso</STRONG>,  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
       <STRONG>xmc</STRONG> should be given to tell how many spaces are left.

       Codes to begin underlining and end underlining can be given as <STRONG>smul</STRONG> and
       <STRONG>rmul</STRONG> respectively.  If the terminal has a code to underline the current
       character  and  move  the  cursor  one  space to the right, such as the
       Microterm Mime, this can be given as <STRONG>uc</STRONG>.

       Other capabilities to enter various highlighting  modes  include  <STRONG>blink</STRONG>
       (blinking)  <STRONG>bold</STRONG>  (bold or extra bright) <STRONG>dim</STRONG> (dim or half-bright) <STRONG>invis</STRONG>
       (blanking or invisible text) <STRONG>prot</STRONG> (protected) <STRONG>rev</STRONG> (reverse video)  <STRONG>sgr0</STRONG>
       (turn  off  <EM>all</EM>  attribute  modes) <STRONG>smacs</STRONG> (enter alternate character set
       mode) and <STRONG>rmacs</STRONG> (exit alternate character set mode).  Turning on any of
       these modes singly may or may not turn off other modes.

       If  there  is  a  sequence to set arbitrary combinations of modes, this
       should be given as <STRONG>sgr</STRONG> (set attributes),  taking  9  parameters.   Each
       parameter  is either 0 or nonzero, as the corresponding attribute is on
       or off.  The 9 parameters are, in order: standout, underline,  reverse,
       blink,  dim,  bold,  blank,  protect, alternate character set.  Not all
       modes need be supported by <STRONG>sgr</STRONG>,  only  those  for  which  corresponding
       separate attribute commands exist.

       For example, the DEC vt220 supports most of the modes:

               <STRONG>tparm</STRONG> <STRONG>parameter</STRONG>      <STRONG>attribute</STRONG>        <STRONG>escape</STRONG> <STRONG>sequence</STRONG>

               none                 none             \E[0m
               p1                   standout         \E[0;1;7m
               p2                   underline        \E[0;4m
               p3                   reverse          \E[0;7m
               p4                   blink            \E[0;5m
               p5                   dim              not available
               p6                   bold             \E[0;1m
               p7                   invis            \E[0;8m
               p8                   protect          not used
               p9                   altcharset       ^O (off) ^N (on)

       We  begin each escape sequence by turning off any existing modes, since
       there is no quick way to determine whether they are  active.   Standout
       is  set  up  to  be  the  combination  of  reverse and bold.  The vt220
       terminal has a protect mode, though it is  not  commonly  used  in  sgr
       because  it protects characters on the screen from the host's erasures.
       The altcharset mode also is different in that it is either  ^O  or  ^N,
       depending  on whether it is off or on.  If all modes are turned on, the
       resulting sequence is \E[0;1;4;5;7;8m^N.

       Some sequences are common to  different  modes.   For  example,  ;7  is
       output  when  either  p1  or p3 is true, that is, if either standout or
       reverse modes are turned on.

       Writing out the above sequences, along with their dependencies yields

            <STRONG>sequence</STRONG>             <STRONG>when</STRONG> <STRONG>to</STRONG> <STRONG>output</STRONG>      <STRONG>terminfo</STRONG> <STRONG>translation</STRONG>

            \E[0                 always              \E[0
            ;1                   if p1 or p6         %?%p1%p6%|%t;1%;
            ;4                   if p2               %?%p2%|%t;4%;
            ;5                   if p4               %?%p4%|%t;5%;
            ;7                   if p1 or p3         %?%p1%p3%|%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%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p4%t;5%;
               %?%p1%p3%|%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,

       Remember that if you specify sgr, you must also  specify  sgr0.   Also,
       some  implementations  rely  on  sgr  being  given  if sgr0 is, Not all
       terminfo  entries  necessarily  have  an  sgr  string,  however.   Many
       terminfo  entries  are  derived  from termcap entries which have no sgr
       string.  The only drawback to adding an sgr string is that termcap also
       assumes that sgr0 does not exit alternate character set mode.

       Terminals   with  the  "magic  cookie"  glitch  (<STRONG>xmc</STRONG>)  deposit  special
       "cookies" when they receive mode-setting sequences,  which  affect  the
       display  algorithm  rather  than  having extra bits for each character.
       Some terminals, such as the HP 2621, automatically leave standout  mode
       when  they  move  to  a  new line or the cursor is addressed.  Programs
       using standout mode should exit standout mode before moving the  cursor
       or  sending a newline, unless the <STRONG>msgr</STRONG> 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 <STRONG>flash</STRONG>; it must
       not move the cursor.

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

       If  your  terminal  correctly  generates underlined characters (with no
       special codes needed) even though it  does  not  overstrike,  then  you
       should  give  the  capability  <STRONG>ul</STRONG>.  If a character overstriking another
       leaves both characters on the screen, specify the  capability  <STRONG>os</STRONG>.   If
       overstrikes are erasable with a blank, then this should be indicated by
       giving <STRONG>eo</STRONG>.


</PRE><H3><a name="h3-Keypad-and-Function-Keys">Keypad and Function Keys</a></H3><PRE>
       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 HP 2621 keys).  If the keypad can be set
       to transmit or not  transmit,  give  these  codes  as  <STRONG>smkx</STRONG>  and  <STRONG>rmkx</STRONG>.
       Otherwise the keypad is assumed to always transmit.

       The  codes  sent  by the left arrow, right arrow, up arrow, down arrow,
       and home keys can be given as <STRONG>kcub1,</STRONG> <STRONG>kcuf1,</STRONG>  <STRONG>kcuu1,</STRONG>  <STRONG>kcud1,</STRONG>  and  <STRONG>khome</STRONG>
       respectively.  If there are function keys such as f0, f1, ..., f10, the
       codes they send can be given as <STRONG>kf0,</STRONG> <STRONG>kf1,</STRONG> <STRONG>...,</STRONG>  <STRONG>kf10</STRONG>.   If  these  keys
       have  labels  other  than the default f0 through f10, the labels can be
       given as <STRONG>lf0,</STRONG> <STRONG>lf1,</STRONG> <STRONG>...,</STRONG> <STRONG>lf10</STRONG>.

       The codes transmitted by certain other special keys can be given:

       <STRONG>o</STRONG>   <STRONG>kll</STRONG> (home down),

       <STRONG>o</STRONG>   <STRONG>kbs</STRONG> (backspace),

       <STRONG>o</STRONG>   <STRONG>ktbc</STRONG> (clear all tabs),

       <STRONG>o</STRONG>   <STRONG>kctab</STRONG> (clear the tab stop in this column),

       <STRONG>o</STRONG>   <STRONG>kclr</STRONG> (clear screen or erase key),

       <STRONG>o</STRONG>   <STRONG>kdch1</STRONG> (delete character),

       <STRONG>o</STRONG>   <STRONG>kdl1</STRONG> (delete line),

       <STRONG>o</STRONG>   <STRONG>krmir</STRONG> (exit insert mode),

       <STRONG>o</STRONG>   <STRONG>kel</STRONG> (clear to end of line),

       <STRONG>o</STRONG>   <STRONG>ked</STRONG> (clear to end of screen),

       <STRONG>o</STRONG>   <STRONG>kich1</STRONG> (insert character or enter insert mode),

       <STRONG>o</STRONG>   <STRONG>kil1</STRONG> (insert line),

       <STRONG>o</STRONG>   <STRONG>knp</STRONG> (next page),

       <STRONG>o</STRONG>   <STRONG>kpp</STRONG> (previous page),

       <STRONG>o</STRONG>   <STRONG>kind</STRONG> (scroll forward/down),

       <STRONG>o</STRONG>   <STRONG>kri</STRONG> (scroll backward/up),

       <STRONG>o</STRONG>   <STRONG>khts</STRONG> (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 <STRONG>ka1</STRONG>, <STRONG>ka3</STRONG>, <STRONG>kb2</STRONG>,
       <STRONG>kc1</STRONG>, and <STRONG>kc3</STRONG>.  These keys are useful when the  effects  of  a  3  by  3
       directional pad are needed.

       Strings to program function keys can be given as <STRONG>pfkey</STRONG>, <STRONG>pfloc</STRONG>, and <STRONG>pfx</STRONG>.
       A string to program screen labels should be specified as <STRONG>pln</STRONG>.  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  <STRONG>pfkey</STRONG>  causes
       pressing  the  given  key  to  be the same as the user typing the given
       string; <STRONG>pfloc</STRONG> causes the string to  be  executed  by  the  terminal  in
       local; and <STRONG>pfx</STRONG> causes the string to be transmitted to the computer.

       The  capabilities  <STRONG>nlab</STRONG>,  <STRONG>lw</STRONG>  and  <STRONG>lh</STRONG> define the number of programmable
       screen labels and their width and height.  If  there  are  commands  to
       turn  the  labels  on  and  off,  give  them in <STRONG>smln</STRONG> and <STRONG>rmln</STRONG>.  <STRONG>smln</STRONG> is
       normally output after one or more pln sequences to make sure  that  the
       change becomes visible.


</PRE><H3><a name="h3-Tabs-and-Initialization">Tabs and Initialization</a></H3><PRE>
       A few capabilities are used only for tabs:

       <STRONG>o</STRONG>   If  the  terminal  has hardware tabs, the command to advance to the
           next tab stop can be given as <STRONG>ht</STRONG> (usually control/I).

       <STRONG>o</STRONG>   A "back-tab" command which moves leftward to the preceding tab stop
           can be given as <STRONG>cbt</STRONG>.

           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 <STRONG>ht</STRONG> or <STRONG>cbt</STRONG> even if they are present, since
           the user may not have the tab stops properly set.

       <STRONG>o</STRONG>   If the terminal has hardware tabs which are initially set  every  <EM>n</EM>
           spaces when the terminal is powered up, the numeric parameter <STRONG>it</STRONG> is
           given, showing the number of spaces the tabs are set to.

           The <STRONG>it</STRONG> capability is normally used by the <STRONG>tset</STRONG> command 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  non-volatile  memory,  the terminfo description can assume that
           they are properly set.

       Other capabilities include

       <STRONG>o</STRONG>   <STRONG>is1</STRONG>, <STRONG>is2</STRONG>, and <STRONG>is3</STRONG>, initialization strings for the terminal,

       <STRONG>o</STRONG>   <STRONG>iprog</STRONG>, the path name of a program  to  be  run  to  initialize  the
           terminal,

       <STRONG>o</STRONG>   and <STRONG>if</STRONG>, the name of a file containing long initialization strings.

       These  strings  are  expected to set the terminal into modes consistent
       with the rest of the terminfo description.  They are normally  sent  to
       the  terminal,  by  the  <EM>init</EM> option of the <STRONG>tput</STRONG> program, each time the
       user logs in.  They will be printed in the following order:

              run the program
                     <STRONG>iprog</STRONG>

              output
                     <STRONG>is1</STRONG> and
                     <STRONG>is2</STRONG>

              set the margins using
                     <STRONG>mgc</STRONG> or
                     <STRONG>smglp</STRONG> and <STRONG>smgrp</STRONG> or
                     <STRONG>smgl</STRONG> and <STRONG>smgr</STRONG>

              set tabs using
                     <STRONG>tbc</STRONG> and <STRONG>hts</STRONG>

              print the file
                     <STRONG>if</STRONG>

              and finally output
                     <STRONG>is3</STRONG>.

       Most initialization is done with <STRONG>is2</STRONG>.  Special terminal  modes  can  be
       set  up  without duplicating strings by putting the common sequences in
       <STRONG>is2</STRONG> and special cases in <STRONG>is1</STRONG> and <STRONG>is3</STRONG>.

       A set of sequences that does a harder  reset  from  a  totally  unknown
       state can be given as <STRONG>rs1</STRONG>, <STRONG>rs2</STRONG>, <STRONG>rf</STRONG> and <STRONG>rs3</STRONG>, analogous to <STRONG>is1</STRONG> <STRONG>,</STRONG> <STRONG>is2</STRONG> <STRONG>,</STRONG> <STRONG>if</STRONG>
       and <STRONG>is3</STRONG> respectively.  These strings are  output  by  <EM>reset</EM>  option  of
       <STRONG>tput</STRONG>,  or  by  the <STRONG>reset</STRONG> program (an alias of <STRONG>tset</STRONG>), which is used when
       the terminal gets into a wedged state.  Commands are normally placed in
       <STRONG>rs1</STRONG>, <STRONG>rs2</STRONG> <STRONG>rs3</STRONG> and <STRONG>rf</STRONG> only if they produce annoying effects on the screen
       and are not necessary when logging in.  For example, the command to set
       the  vt100  into  80-column  mode would normally be part of <STRONG>is2</STRONG>, but it
       causes an annoying glitch of the screen  and  is  not  normally  needed
       since the terminal is usually already in 80-column mode.

       The  <STRONG>reset</STRONG>  program  writes  strings including <STRONG>iprog</STRONG>, etc., in the same
       order as the <EM>init</EM> program, using <STRONG>rs1</STRONG>, etc., instead of  <STRONG>is1</STRONG>,  etc.   If
       any  of  <STRONG>rs1</STRONG>, <STRONG>rs2</STRONG>, <STRONG>rs3</STRONG>, or <STRONG>rf</STRONG> reset capability strings are missing, the
       <STRONG>reset</STRONG>  program  falls  back  upon  the   corresponding   initialization
       capability string.

       If  there are commands to set and clear tab stops, they can be given as
       <STRONG>tbc</STRONG> (clear all tab stops) and <STRONG>hts</STRONG> (set a tab stop in the current column
       of  every  row).   If a more complex sequence is needed to set the tabs
       than can be described by this, the sequence can be placed in <STRONG>is2</STRONG> or <STRONG>if</STRONG>.

       The <STRONG>tput</STRONG> <STRONG>reset</STRONG> command uses the same capability strings  as  the  <STRONG>reset</STRONG>
       command,  although  the two programs (<STRONG>tput</STRONG> and <STRONG>reset</STRONG>) provide different
       command-line options.

       In  practice,  these  terminfo  capabilities  are  not  often  used  in
       initialization of tabs (though they are required for the <STRONG>tabs</STRONG> program):

       <STRONG>o</STRONG>   Almost all hardware terminals (at least those which supported tabs)
           initialized those to every <EM>eight</EM> columns:

           The only exception was the AT&amp;T 2300  series,  which  set  tabs  to
           every <EM>five</EM> columns.

       <STRONG>o</STRONG>   In  particular,  developers  of  the  hardware  terminals which are
           commonly used as models  for  modern  terminal  emulators  provided
           documentation demonstrating that <EM>eight</EM> columns were the standard.

       <STRONG>o</STRONG>   Because of this, the terminal initialization programs <STRONG>tput</STRONG> and <STRONG>tset</STRONG>
           use  the  <STRONG>tbc</STRONG>  (<STRONG>clear_all_tabs</STRONG>)  and  <STRONG>hts</STRONG>  (<STRONG>set_tab</STRONG>)   capabilities
           directly  only when the <STRONG>it</STRONG> (<STRONG>init_tabs</STRONG>) capability is set to a value
           other than <EM>eight</EM>.


</PRE><H3><a name="h3-Delays-and-Padding">Delays and Padding</a></H3><PRE>
       Many older and slower terminals do not support either XON/XOFF  or  DTR
       handshaking,  including  hard copy terminals and some very archaic CRTs
       (including, for  example,  DEC  VT100s).   These  may  require  padding
       characters after certain cursor motions and screen changes.

       If the terminal uses xon/xoff handshaking for flow control (that is, it
       automatically emits ^S back to the host  when  its  input  buffers  are
       close  to  full),  set <STRONG>xon</STRONG>.  This capability suppresses the emission of
       padding.  You  can  also  set  it  for  memory-mapped  console  devices
       effectively that do not have a speed limit.  Padding information should
       still be included so that routines  can  make  better  decisions  about
       relative costs, but actual pad characters will not be transmitted.

       If <STRONG>pb</STRONG> (padding baud rate) is given, padding is suppressed at baud rates
       below the value of <STRONG>pb</STRONG>.  If the entry has no  padding  baud  rate,  then
       whether padding is emitted or not is completely controlled by <STRONG>xon</STRONG>.

       If  the  terminal requires other than a null (zero) character as a pad,
       then this can be given as <STRONG>pad</STRONG>.  Only the first  character  of  the  <STRONG>pad</STRONG>
       string is used.


</PRE><H3><a name="h3-Status-Lines">Status Lines</a></H3><PRE>
       Some  terminals  have an extra "status line" which is not normally used
       by software (and thus not counted in the terminal's <STRONG>lines</STRONG> capability).

       The simplest case is a status line which is cursor-addressable but  not
       part of the main scrolling region on the screen; the Heathkit H19 has a
       status line of this kind, as would  a  24-line  VT100  with  a  23-line
       scrolling region set up on initialization.  This situation is indicated
       by the <STRONG>hs</STRONG> capability.

       Some terminals with status lines need special sequences to  access  the
       status  line.  These may be expressed as a string with single parameter
       <STRONG>tsl</STRONG> which takes the cursor to a given zero-origin column on the  status
       line.   The  capability  <STRONG>fsl</STRONG>  must  return  to  the  main-screen cursor
       positions before the last <STRONG>tsl</STRONG>.  You may need to embed the string values
       of  <STRONG>sc</STRONG>  (save  cursor)  and  <STRONG>rc</STRONG>  (restore  cursor)  in  <STRONG>tsl</STRONG>  and <STRONG>fsl</STRONG> to
       accomplish this.

       The status line is normally assumed to be the same width as  the  width
       of  the  terminal.   If  this  is  untrue,  you can specify it with the
       numeric capability <STRONG>wsl</STRONG>.

       A command to erase or blank the status line may be specified as <STRONG>dsl</STRONG>.

       The boolean capability <STRONG>eslok</STRONG> specifies  that  escape  sequences,  tabs,
       etc., work ordinarily in the status line.

       The  <STRONG>ncurses</STRONG> implementation does not yet use any of these capabilities.
       They are documented here in case they ever become important.


</PRE><H3><a name="h3-Line-Graphics">Line Graphics</a></H3><PRE>
       Many terminals have alternate character sets useful for  forms-drawing.
       Terminfo  and  <STRONG>curses</STRONG>  have  built-in  support  for most of the drawing
       characters supported by the VT100, with some characters from  the  AT&amp;T
       4410v1  added.   This  alternate  character set may be specified by the
       <STRONG>acsc</STRONG> capability.

         <STRONG>Glyph</STRONG>                       <STRONG>ACS</STRONG>            <STRONG>Ascii</STRONG>     <STRONG>acsc</STRONG>     <STRONG>acsc</STRONG>
         <STRONG>Name</STRONG>                        <STRONG>Name</STRONG>           <STRONG>Default</STRONG>   <STRONG>Char</STRONG>     <STRONG>Value</STRONG>
         --------------------------------------------------------------------
         arrow pointing right        ACS_RARROW     &gt;         +        0x2b
         arrow pointing left         ACS_LARROW     &lt;         ,        0x2c
         arrow pointing up           ACS_UARROW     ^         -        0x2d
         arrow pointing down         ACS_DARROW     v         .        0x2e
         solid square block          ACS_BLOCK      #         0        0x30
         diamond                     ACS_DIAMOND    +         `        0x60
         checker board (stipple)     ACS_CKBOARD    :         a        0x61
         degree symbol               ACS_DEGREE     \         f        0x66
         plus/minus                  ACS_PLMINUS    #         g        0x67
         board of squares            ACS_BOARD      #         h        0x68
         lantern symbol              ACS_LANTERN    #         i        0x69
         lower right corner          ACS_LRCORNER   +         j        0x6a

         upper right corner          ACS_URCORNER   +         k        0x6b
         upper left corner           ACS_ULCORNER   +         l        0x6c
         lower left corner           ACS_LLCORNER   +         m        0x6d
         large plus or crossover     ACS_PLUS       +         n        0x6e
         scan line 1                 ACS_S1         ~         o        0x6f
         scan line 3                 ACS_S3         -         p        0x70
         horizontal line             ACS_HLINE      -         q        0x71
         scan line 7                 ACS_S7         -         r        0x72
         scan line 9                 ACS_S9         _         s        0x73
         tee pointing right          ACS_LTEE       +         t        0x74
         tee pointing left           ACS_RTEE       +         u        0x75
         tee pointing up             ACS_BTEE       +         v        0x76
         tee pointing down           ACS_TTEE       +         w        0x77
         vertical line               ACS_VLINE      |         x        0x78
         less-than-or-equal-to       ACS_LEQUAL     &lt;         y        0x79
         greater-than-or-equal-to    ACS_GEQUAL     &gt;         z        0x7a
         greek pi                    ACS_PI         *         {        0x7b
         not-equal                   ACS_NEQUAL     !         |        0x7c
         UK pound sign               ACS_STERLING   f         }        0x7d
         bullet                      ACS_BULLET     o         ~        0x7e

       A few notes apply to the table itself:

       <STRONG>o</STRONG>   X/Open Curses incorrectly states that the mapping  for  <EM>lantern</EM>  is
           uppercase  "I"  although Unix implementations use the lowercase "i"
           mapping.

       <STRONG>o</STRONG>   The DEC VT100 implemented graphics using  the  alternate  character
           set  feature, temporarily switching <EM>modes</EM> and sending characters in
           the range 0x60 (96) to 0x7e (126) (the <STRONG>acsc</STRONG>  <STRONG>Value</STRONG>  column  in  the
           table).

       <STRONG>o</STRONG>   The AT&amp;T terminal added graphics characters outside that range.

           Some  of  the  characters  within the range do not match the VT100;
           presumably they were used in the AT&amp;T terminal:  <EM>board</EM>  <EM>of</EM>  <EM>squares</EM>
           replaces  the  VT100  <EM>newline</EM> symbol, while <EM>lantern</EM> <EM>symbol</EM> replaces
           the VT100 <EM>vertical</EM> <EM>tab</EM> symbol.  The other VT100 symbols for control
           characters  (<EM>horizontal</EM> <EM>tab</EM>, <EM>carriage</EM> <EM>return</EM> and <EM>line-feed</EM>) are not
           (re)used in curses.

       The best way to define a new device's graphics set is to add  a  column
       to  a  copy of this table for your terminal, giving the character which
       (when emitted between <STRONG>smacs</STRONG>/<STRONG>rmacs</STRONG> switches) will  be  rendered  as  the
       corresponding graphic.  Then read off the VT100/your terminal character
       pairs right to left in sequence; these become the ACSC string.


</PRE><H3><a name="h3-Color-Handling">Color Handling</a></H3><PRE>
       The curses library functions <STRONG>init_pair</STRONG> and  <STRONG>init_color</STRONG>  manipulate  the
       <EM>color</EM>   <EM>pairs</EM>   and   <EM>color</EM>  <EM>values</EM>  discussed  in  this  section  (see
       <STRONG><A HREF="curs_color.3x.html">curs_color(3x)</A></STRONG> for details on these and related functions).

       Most color terminals are either "Tektronix-like" or "HP-like":

       <STRONG>o</STRONG>   Tektronix-like terminals have a predefined set of <EM>N</EM> colors (where <EM>N</EM>
           is usually 8), and can set character-cell foreground and background
           characters independently, mixing them into <EM>N</EM> * <EM>N</EM> color-pairs.

       <STRONG>o</STRONG>   On HP-like  terminals,  the  user  must  set  each  color  pair  up
           separately   (foreground   and  background  are  not  independently
           settable).  Up to <EM>M</EM> color-pairs may be set up  from  2*<EM>M</EM>  different
           colors.  ANSI-compatible terminals are Tektronix-like.

       Some basic color capabilities are independent of the color method.  The
       numeric capabilities <STRONG>colors</STRONG> and <STRONG>pairs</STRONG> specify the  maximum  numbers  of
       colors  and  color-pairs  that can be displayed simultaneously.  The <STRONG>op</STRONG>
       (original pair) string resets foreground and background colors to their
       default  values  for  the terminal.  The <STRONG>oc</STRONG> string resets all colors or
       color-pairs to their default values for the terminal.   Some  terminals
       (including  many  PC  terminal  emulators)  erase screen areas with the
       current background color rather than the power-up  default  background;
       these should have the boolean capability <STRONG>bce</STRONG>.

       While  the  curses  library  works  with  <EM>color</EM>  <EM>pairs</EM>  (reflecting the
       inability of some devices  to  set  foreground  and  background  colors
       independently),  there  are  separate  capabilities  for  setting these
       features:

       <STRONG>o</STRONG>   To  change  the  current  foreground  or  background  color  on   a
           Tektronix-type  terminal, use <STRONG>setaf</STRONG> (set ANSI foreground) and <STRONG>setab</STRONG>
           (set ANSI background)  or  <STRONG>setf</STRONG>  (set  foreground)  and  <STRONG>setb</STRONG>  (set
           background).  These take one parameter, the color number.  The SVr4
           documentation describes only <STRONG>setaf</STRONG>/<STRONG>setab</STRONG>; the XPG4 draft says  that
           "If  the  terminal supports ANSI escape sequences to set background
           and  foreground,  they  should  be  coded  as  <STRONG>setaf</STRONG>   and   <STRONG>setab</STRONG>,
           respectively.

       <STRONG>o</STRONG>   If  the  terminal supports other escape sequences to set background
           and  foreground,  they  should  be  coded   as   <STRONG>setf</STRONG>   and   <STRONG>setb</STRONG>,
           respectively.   The  <STRONG>vidputs</STRONG>  and the <STRONG><A HREF="curs_refresh.3x.html">refresh(3x)</A></STRONG> functions use the
           <STRONG>setaf</STRONG> and <STRONG>setab</STRONG> capabilities if they are defined.

       The <STRONG>setaf</STRONG>/<STRONG>setab</STRONG>  and  <STRONG>setf</STRONG>/<STRONG>setb</STRONG>  capabilities  take  a  single  numeric
       argument each.  Argument values 0-7 of <STRONG>setaf</STRONG>/<STRONG>setab</STRONG> are portably defined
       as follows (the middle column is the symbolic #define available in  the
       header  for the <STRONG>curses</STRONG> or <STRONG>ncurses</STRONG> libraries).  The terminal hardware is
       free to map these as it likes,  but  the  RGB  values  indicate  normal
       locations in color space.

                    <STRONG>Color</STRONG>       <STRONG>#define</STRONG>       <STRONG>Value</STRONG>       <STRONG>RGB</STRONG>
                    black     <STRONG>COLOR_BLACK</STRONG>       0     0, 0, 0
                    red       <STRONG>COLOR_RED</STRONG>         1     max,0,0
                    green     <STRONG>COLOR_GREEN</STRONG>       2     0,max,0
                    yellow    <STRONG>COLOR_YELLOW</STRONG>      3     max,max,0
                    blue      <STRONG>COLOR_BLUE</STRONG>        4     0,0,max
                    magenta   <STRONG>COLOR_MAGENTA</STRONG>     5     max,0,max
                    cyan      <STRONG>COLOR_CYAN</STRONG>        6     0,max,max
                    white     <STRONG>COLOR_WHITE</STRONG>       7     max,max,max

       The argument values of <STRONG>setf</STRONG>/<STRONG>setb</STRONG> historically correspond to a different
       mapping, i.e.,

                    <STRONG>Color</STRONG>       <STRONG>#define</STRONG>       <STRONG>Value</STRONG>       <STRONG>RGB</STRONG>
                    black     <STRONG>COLOR_BLACK</STRONG>       0     0, 0, 0
                    blue      <STRONG>COLOR_BLUE</STRONG>        1     0,0,max
                    green     <STRONG>COLOR_GREEN</STRONG>       2     0,max,0
                    cyan      <STRONG>COLOR_CYAN</STRONG>        3     0,max,max
                    red       <STRONG>COLOR_RED</STRONG>         4     max,0,0
                    magenta   <STRONG>COLOR_MAGENTA</STRONG>     5     max,0,max
                    yellow    <STRONG>COLOR_YELLOW</STRONG>      6     max,max,0
                    white     <STRONG>COLOR_WHITE</STRONG>       7     max,max,max

       It is important to not confuse the  two  sets  of  color  capabilities;
       otherwise red/blue will be interchanged on the display.

       On  an  HP-like terminal, use <STRONG>scp</STRONG> with a color-pair number parameter to
       set which color pair is current.

       Some terminals allow the <EM>color</EM> <EM>values</EM> to be modified:

       <STRONG>o</STRONG>   On a Tektronix-like terminal, the capability <STRONG>ccc</STRONG> may be present  to
           indicate  that colors can be modified.  If so, the <STRONG>initc</STRONG> capability
           will take a color number (0 to <STRONG>colors</STRONG> - 1)and three more parameters
           which  describe the color.  These three parameters default to being
           interpreted as RGB (Red,  Green,  Blue)  values.   If  the  boolean
           capability <STRONG>hls</STRONG> is present, they are instead as HLS (Hue, Lightness,
           Saturation) indices.  The ranges are terminal-dependent.

       <STRONG>o</STRONG>   On an HP-like terminal, <STRONG>initp</STRONG> may give a capability for changing  a
           color-pair  value.   It  will  take  seven parameters; a color-pair
           number (0 to <STRONG>max_pairs</STRONG> -  1),  and  two  triples  describing  first
           background  and  then  foreground colors.  These parameters must be
           (Red, Green, Blue) or (Hue,  Lightness,  Saturation)  depending  on
           <STRONG>hls</STRONG>.

       On  some  color  terminals,  colors  collide  with highlights.  You can
       register these collisions with the <STRONG>ncv</STRONG> capability.  This is a  bit-mask
       of   attributes   not   to  be  used  when  colors  are  enabled.   The
       correspondence with the attributes understood by <STRONG>curses</STRONG> is as follows:

                  <STRONG>Attribute</STRONG>              <STRONG>Bit</STRONG>   <STRONG>Decimal</STRONG>      <STRONG>Set</STRONG> <STRONG>by</STRONG>
                  A_STANDOUT             0     1            sgr
                  A_UNDERLINE            1     2            sgr
                  A_REVERSE              2     4            sgr
                  A_BLINK                3     8            sgr
                  A_DIM                  4     16           sgr
                  A_BOLD                 5     32           sgr
                  A_INVIS                6     64           sgr
                  A_PROTECT              7     128          sgr
                  A_ALTCHARSET           8     256          sgr
                  A_HORIZONTAL           9     512          sgr1
                  A_LEFT                 10    1024         sgr1
                  A_LOW                  11    2048         sgr1
                  A_RIGHT                12    4096         sgr1
                  A_TOP                  13    8192         sgr1
                  A_VERTICAL             14    16384        sgr1
                  A_ITALIC               15    32768        sitm

       For example, on many IBM PC consoles, the underline attribute  collides
       with  the  foreground  color  blue  and is not available in color mode.
       These should have an <STRONG>ncv</STRONG> capability of 2.

       SVr4 curses does nothing with <STRONG>ncv</STRONG>, ncurses recognizes it and  optimizes
       the output in favor of colors.


</PRE><H3><a name="h3-Miscellaneous">Miscellaneous</a></H3><PRE>
       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.  Note that ncurses implements the termcap-compatible <STRONG>PC</STRONG>  variable;
       though  the  application  may  set this value to something other than a
       null, ncurses will test <STRONG>npc</STRONG> first and use napms if the terminal has  no
       pad character.

       If  the terminal can move up or down half a line, this can be indicated
       with <STRONG>hu</STRONG> (half-line up) and <STRONG>hd</STRONG>  (half-line  down).   This  is  primarily
       useful  for  superscripts  and subscripts on hard-copy terminals.  If a
       hard-copy terminal can eject to the next page (form feed), give this as
       <STRONG>ff</STRONG> (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 <STRONG>rep</STRONG>.
       The first parameter is the character to be repeated and the  second  is
       the number of times to repeat it.  Thus, tparm(repeat_char, '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 <STRONG>cmdch</STRONG>.  A prototype command character
       is chosen which is used in all capabilities.  This character  is  given
       in  the  <STRONG>cmdch</STRONG>  capability to identify it.  The following convention is
       supported on some UNIX systems: The environment is to be searched for a
       <STRONG>CC</STRONG>  variable,  and if found, all occurrences of the prototype character
       are replaced with the character in the environment variable.

       Terminal descriptions that do not represent a specific  kind  of  known
       terminal,  such  as  <EM>switch</EM>, <EM>dialup</EM>, <EM>patch</EM>, and <EM>network</EM>, should include
       the <STRONG>gn</STRONG> (generic) capability so that programs can complain that they  do
       not  know how to talk to the terminal.  (This capability does not apply
       to <EM>virtual</EM> terminal descriptions for which  the  escape  sequences  are
       known.)

       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
       <STRONG>km</STRONG>.   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 <STRONG>smm</STRONG> and <STRONG>rmm</STRONG>.

       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 <STRONG>lm</STRONG>.  A  value
       of <STRONG>lm</STRONG>#0 indicates that the number of lines is not fixed, but that there
       is still more memory than fits on the screen.

       If the terminal is one of those supported by the UNIX virtual  terminal
       protocol, the terminal number can be given as <STRONG>vt</STRONG>.

       Media  copy strings which control an auxiliary printer connected to the
       terminal can be given as <STRONG>mc0</STRONG>: print the contents of  the  screen,  <STRONG>mc4</STRONG>:
       turn  off  the printer, and <STRONG>mc5</STRONG>: turn on the printer.  When the printer
       is on, all text sent to the terminal will be sent to the  printer.   It
       is  undefined whether the text is also displayed on the terminal screen
       when the printer is on.  A variation  <STRONG>mc5p</STRONG>  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.   All  text, including <STRONG>mc4</STRONG>, is transparently passed to the printer
       while an <STRONG>mc5p</STRONG> is in effect.


</PRE><H3><a name="h3-Glitches-and-Braindamage">Glitches and Braindamage</a></H3><PRE>
       Hazeltine terminals, which do not allow "~" characters to be  displayed
       should indicate <STRONG>hz</STRONG>.

       Terminals  which  ignore a line-feed immediately after an <STRONG>am</STRONG> wrap, such
       as the Concept and vt100, should indicate <STRONG>xenl</STRONG>.

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

       Teleray terminals, where tabs turn all characters moved over to blanks,
       should indicate <STRONG>xt</STRONG> (destructive tabs).  Note: the  variable  indicating
       this   is   now  "dest_tabs_magic_smso";  in  older  versions,  it  was
       teleray_glitch.  This glitch is also taken  to  mean  that  it  is  not
       possible  to  position  the  cursor on top of a "magic cookie", that to
       erase standout mode it is instead necessary to use  delete  and  insert
       line.  The ncurses implementation ignores this glitch.

       The  Beehive Superbee, which is unable to correctly transmit the escape
       or control/C characters, has <STRONG>xsb</STRONG>, indicating that the f1  key  is  used
       for  escape  and  f2  for control/C.  (Only certain Superbees have this
       problem, depending on the ROM.)  Note that in older terminfo  versions,
       this capability was called "beehive_glitch"; it is now "no_esc_ctl_c".

       Other  specific  terminal  problems  may  be  corrected  by adding more
       capabilities of the form <STRONG>x</STRONG><EM>x</EM>.


</PRE><H3><a name="h3-Pitfalls-of-Long-Entries">Pitfalls of Long Entries</a></H3><PRE>
       Long terminfo entries are unlikely to be a problem; to date,  no  entry
       has   even   approached   terminfo's  4096-byte  string-table  maximum.
       Unfortunately, the termcap translations are much more strictly  limited
       (to 1023 bytes), thus termcap translations of long terminfo entries can
       cause problems.

       The man pages for 4.3BSD and older versions  of  <STRONG>tgetent</STRONG>  instruct  the
       user  to  allocate a 1024-byte buffer for the termcap entry.  The entry
       gets null-terminated by the termcap library, so that makes the  maximum
       safe  length  for a termcap entry 1k-1 (1023) bytes.  Depending on what
       the application and the termcap library being used does, and  where  in
       the  termcap  file  the terminal type that <STRONG>tgetent</STRONG> is searching for is,
       several bad things can happen.

       Some termcap libraries print a warning message or exit if they find  an
       entry that's longer than 1023 bytes; others do not; others truncate the
       entries to 1023 bytes.  Some application programs  allocate  more  than
       the recommended 1K for the termcap entry; others do not.

       Each  termcap  entry has two important sizes associated with it: before
       "tc" expansion, and after "tc" expansion.  "tc" is the capability  that
       tacks on another termcap entry to the end of the current one, to add on
       its capabilities.  If a termcap entry does not use the "tc" capability,
       then of course the two lengths are the same.

       The  "before tc expansion" length is the most important one, because it
       affects more than just users of that particular terminal.  This is  the
       length  of the entry as it exists in /etc/termcap, minus the backslash-
       newline pairs, which <STRONG>tgetent</STRONG> strips out while reading it.  Some termcap
       libraries strip off the final newline, too (GNU termcap does not).  Now
       suppose:

       <STRONG>o</STRONG>   a termcap entry before expansion is more than 1023 bytes long,

       <STRONG>o</STRONG>   and the application has only allocated a 1k buffer,

       <STRONG>o</STRONG>   and the termcap library (like the one in BSD/OS 1.1 and GNU)  reads
           the  whole entry into the buffer, no matter what its length, to see
           if it is the entry it wants,

       <STRONG>o</STRONG>   and <STRONG>tgetent</STRONG> is searching for a terminal type  that  either  is  the
           long  entry,  appears  in the termcap file after the long entry, or
           does not appear in the file at all (so that <STRONG>tgetent</STRONG> has  to  search
           the whole termcap file).

       Then  <STRONG>tgetent</STRONG>  will  overwrite  memory, perhaps its stack, and probably
       core  dump  the  program.   Programs  like  telnet   are   particularly
       vulnerable;  modern  telnets  pass  along values like the terminal type
       automatically.  The results are almost as undesirable  with  a  termcap
       library,  like SunOS 4.1.3 and Ultrix 4.4, that prints warning messages
       when it reads an overly long  termcap  entry.   If  a  termcap  library
       truncates  long entries, like OSF/1 3.0, it is immune to dying here but
       will return incorrect data for the terminal.

       The "after tc expansion" length will  have  a  similar  effect  to  the
       above, but only for people who actually set TERM to that terminal type,
       since <STRONG>tgetent</STRONG> only does "tc" expansion once it is  found  the  terminal
       type it was looking for, not while searching.

       In  summary,  a termcap entry that is longer than 1023 bytes can cause,
       on various combinations of termcap libraries and applications,  a  core
       dump,  warnings, or incorrect operation.  If it is too long even before
       "tc" expansion, it will have this effect even for users of  some  other
       terminal  types  and  users whose TERM variable does not have a termcap
       entry.

       When in -C (translate to termcap) mode, the <STRONG>ncurses</STRONG>  implementation  of
       <STRONG><A HREF="tic.1m.html">tic(1m)</A></STRONG>  issues  warning  messages  when the pre-tc length of a termcap
       translation is too long.  The -c (check) option  also  checks  resolved
       (after tc expansion) lengths.


</PRE><H3><a name="h3-Binary-Compatibility">Binary Compatibility</a></H3><PRE>
       It  is  not  wise  to  count  on portability of binary terminfo entries
       between commercial UNIX versions.  The problem is  that  there  are  at
       least  two  versions  of  terminfo (under HP-UX and AIX) which diverged
       from  System  V  terminfo  after  SVr1,  and   have   added   extension
       capabilities  to  the  string table that (in the binary format) collide
       with System V and XSI Curses extensions.


</PRE><H2><a name="h2-EXTENSIONS">EXTENSIONS</a></H2><PRE>
       Searching   for   terminal   descriptions   in   <STRONG>$HOME/.terminfo</STRONG>    and
       TERMINFO_DIRS is not supported by older implementations.

       Some  SVr4  <STRONG>curses</STRONG>  implementations,  and  all previous to SVr4, do not
       interpret the %A and %O operators in parameter strings.

       SVr4/XPG4 do not specify whether <STRONG>msgr</STRONG> licenses  movement  while  in  an
       alternate-character-set  mode  (such modes may, among other things, map
       CR and NL to characters  that  do  not  trigger  local  motions).   The
       <STRONG>ncurses</STRONG>  implementation  ignores  <STRONG>msgr</STRONG> in <STRONG>ALTCHARSET</STRONG> mode.  This raises
       the  possibility  that  an  XPG4  implementation  making  the  opposite
       interpretation  may need terminfo entries made for <STRONG>ncurses</STRONG> to have <STRONG>msgr</STRONG>
       turned off.

       The <STRONG>ncurses</STRONG> library handles insert-character and insert-character modes
       in  a  slightly  non-standard way to get better update efficiency.  See
       the <STRONG>Insert/Delete</STRONG> <STRONG>Character</STRONG> subsection above.

       The parameter substitutions for <STRONG>set_clock</STRONG>  and  <STRONG>display_clock</STRONG>  are  not
       documented  in  SVr4 or the XSI Curses standard.  They are deduced from
       the documentation for the AT&amp;T 505 terminal.

       Be careful assigning the <STRONG>kmous</STRONG> capability.  The <STRONG>ncurses</STRONG>  library  wants
       to  interpret  it as <STRONG>KEY_MOUSE</STRONG>, for use by terminals and emulators like
       xterm that can return mouse-tracking information in the  keyboard-input
       stream.

       X/Open  Curses  does  not  mention italics.  Portable applications must
       assume that  numeric  capabilities  are  signed  16-bit  values.   This
       includes  the  <EM>no</EM><STRONG>_</STRONG><EM>color</EM><STRONG>_</STRONG><EM>video</EM>  (ncv)  capability.  The 32768 mask value
       used for italics with ncv can be confused with an absent  or  cancelled
       ncv.   If  italics  should work with colors, then the ncv value must be
       specified, even if it is zero.

       Different commercial ports of terminfo  and  curses  support  different
       subsets  of  the  XSI  Curses  standard  and  (in some cases) different
       extension sets.  Here is a summary, accurate as of October 1995:

       <STRONG>o</STRONG>   <STRONG>SVR4,</STRONG> <STRONG>Solaris,</STRONG> <STRONG>ncurses</STRONG> -- These support all SVr4 capabilities.

       <STRONG>o</STRONG>   <STRONG>SGI</STRONG> -- Supports the SVr4 set, adds one undocumented extended string
           capability (<STRONG>set_pglen</STRONG>).

       <STRONG>o</STRONG>   <STRONG>SVr1,</STRONG>  <STRONG>Ultrix</STRONG>  --  These  support  a  restricted subset of terminfo
           capabilities.  The booleans end with <STRONG>xon_xoff</STRONG>;  the  numerics  with
           <STRONG>width_status_line</STRONG>; and the strings with <STRONG>prtr_non</STRONG>.

       <STRONG>o</STRONG>   <STRONG>HP/UX</STRONG>  --  Supports  the  SVr1  subset,  plus the SVr[234] numerics
           <STRONG>num_labels</STRONG>,  <STRONG>label_height</STRONG>,  <STRONG>label_width</STRONG>,  plus  function  keys   11
           through  63,  plus  <STRONG>plab_norm</STRONG>,  <STRONG>label_on</STRONG>,  and <STRONG>label_off</STRONG>, plus some
           incompatible extensions in the string table.

       <STRONG>o</STRONG>   <STRONG>AIX</STRONG> -- Supports the SVr1 subset, plus function keys 11 through  63,
           plus a number of incompatible string table extensions.

       <STRONG>o</STRONG>   <STRONG>OSF</STRONG> -- Supports both the SVr4 set and the AIX extensions.


</PRE><H2><a name="h2-FILES">FILES</a></H2><PRE>
       /usr/share/terminfo/?/*  files containing terminal descriptions


</PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
       <STRONG><A HREF="infocmp.1m.html">infocmp(1m)</A></STRONG>,     <STRONG><A HREF="tabs.1.html">tabs(1)</A></STRONG>,    <STRONG><A HREF="tic.1m.html">tic(1m)</A></STRONG>,    <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>,    <STRONG><A HREF="curs_color.3x.html">curs_color(3x)</A></STRONG>,
       <STRONG><A HREF="curs_variables.3x.html">curs_variables(3x)</A></STRONG>,    <STRONG>printf(3)</STRONG>,     <STRONG><A HREF="term_variables.3x.html">term_variables(3x)</A></STRONG>.      <STRONG><A HREF="term.5.html">term(5)</A></STRONG>.
       <STRONG><A HREF="user_caps.5.html">user_caps(5)</A></STRONG>.


</PRE><H2><a name="h2-AUTHORS">AUTHORS</a></H2><PRE>
       Zeyd M. Ben-Halim, Eric S. Raymond, Thomas E. Dickey.  Based on pcurses
       by Pavel Curtis.



                                                                   <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>
</PRE>
<div class="nav">
<ul>
<li><a href="#h2-NAME">NAME</a></li>
<li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
<li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
<ul>
<li><a href="#h3-Terminfo-Entry-Syntax">Terminfo Entry Syntax</a></li>
<li><a href="#h3-Terminfo-Capabilities-Syntax">Terminfo Capabilities Syntax</a></li>
<li><a href="#h3-Similar-Terminals">Similar Terminals</a></li>
<li><a href="#h3-Predefined-Capabilities">Predefined Capabilities</a></li>
<li><a href="#h3-User-Defined-Capabilities">User-Defined Capabilities</a></li>
<li><a href="#h3-A-Sample-Entry">A Sample Entry</a></li>
<li><a href="#h3-Types-of-Capabilities">Types of Capabilities</a></li>
<li><a href="#h3-Fetching-Compiled-Descriptions">Fetching Compiled Descriptions</a></li>
<li><a href="#h3-Preparing-Descriptions">Preparing Descriptions</a></li>
<li><a href="#h3-Basic-Capabilities">Basic Capabilities</a></li>
<li><a href="#h3-Parameterized-Strings">Parameterized Strings</a></li>
<li><a href="#h3-Cursor-Motions">Cursor Motions</a></li>
<li><a href="#h3-Margins">Margins</a></li>
<li><a href="#h3-Area-Clears">Area Clears</a></li>
<li><a href="#h3-Insert_delete-line-and-vertical-motions">Insert/delete line and vertical motions</a></li>
<li><a href="#h3-Insert_Delete-Character">Insert/Delete Character</a></li>
<li><a href="#h3-Highlighting_-Underlining_-and-Visible-Bells">Highlighting, Underlining, and Visible Bells</a></li>
<li><a href="#h3-Keypad-and-Function-Keys">Keypad and Function Keys</a></li>
<li><a href="#h3-Tabs-and-Initialization">Tabs and Initialization</a></li>
<li><a href="#h3-Delays-and-Padding">Delays and Padding</a></li>
<li><a href="#h3-Status-Lines">Status Lines</a></li>
<li><a href="#h3-Line-Graphics">Line Graphics</a></li>
<li><a href="#h3-Color-Handling">Color Handling</a></li>
<li><a href="#h3-Miscellaneous">Miscellaneous</a></li>
<li><a href="#h3-Glitches-and-Braindamage">Glitches and Braindamage</a></li>
<li><a href="#h3-Pitfalls-of-Long-Entries">Pitfalls of Long Entries</a></li>
<li><a href="#h3-Binary-Compatibility">Binary Compatibility</a></li>
</ul>
</li>
<li><a href="#h2-EXTENSIONS">EXTENSIONS</a></li>
<li><a href="#h2-FILES">FILES</a></li>
<li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
<li><a href="#h2-AUTHORS">AUTHORS</a></li>
</ul>
</div>
</BODY>
</HTML>
