diff --git a/doc/html/man/terminfo.5.html b/doc/html/man/terminfo.5.html
index 1284d02..cf70f7f 100644
--- a/doc/html/man/terminfo.5.html
+++ b/doc/html/man/terminfo.5.html
@@ -1,4 +1,3 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
 <!-- 
   * t
   * DO NOT EDIT THIS FILE BY HAND!
@@ -6,7 +5,7 @@
   * Note: this must be run through tbl before nroff.
   * The magic cookie on the first line triggers this under some man programs.
   ****************************************************************************
-  * Copyright (c) 1998-2004,2006 Free Software Foundation, Inc.              *
+  * Copyright (c) 1998-2012,2013 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            *
@@ -32,9 +31,9 @@
   * sale, use or other dealings in this Software without prior written       *
   * authorization.                                                           *
   ****************************************************************************
-  * @Id: terminfo.head,v 1.16 2007/03/04 00:09:46 tom Exp @
+  * @Id: terminfo.head,v 1.21 2013/03/09 22:11:36 tom Exp @
   * Head of terminfo man page ends here
-  * @Id: terminfo.tail,v 1.49 2008/02/16 20:57:43 tom Exp @
+  * @Id: terminfo.tail,v 1.69 2015/04/26 14:47:23 tom Exp @
   * Beginning of terminfo.tail file
   * This file is part of ncurses.
   * See "terminfo.head" for copyright.
@@ -44,41 +43,42 @@
   *.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 http://invisible-island.net/scripts/readme.html#others_scripts">
 <TITLE>terminfo 5   File Formats</TITLE>
 <link rev=made href="mailto:bug-ncurses@gnu.org">
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 </HEAD>
 <BODY>
-<H1>terminfo 5   File Formats</H1>
-<HR>
+<H1 class="no-header">terminfo 5   File Formats</H1>
 <PRE>
-<!-- Manpage converted by man2html 3.0.1 -->
 <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>                   File Formats                  <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>
 
 
 
 
 </PRE>
-<H2>NAME</H2><PRE>
+<H2><a name="h2-NAME">NAME</a></H2><PRE>
        terminfo - terminal capability data base
 
 
 </PRE>
-<H2>SYNOPSIS</H2><PRE>
+<H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
        /usr/share/terminfo/*/*
 
 
 </PRE>
-<H2>DESCRIPTION</H2><PRE>
+<H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
        <EM>Terminfo</EM>  is  a  data  base  describing terminals, used by
-       screen-oriented programs  such  as  <STRONG><A HREF="nvi.1.html">nvi(1)</A></STRONG>,  <STRONG><A HREF="rogue.1.html">rogue(1)</A></STRONG>  and
+       screen-oriented programs  such  as  <STRONG>nvi(1)</STRONG>,  <STRONG>rogue(1)</STRONG>  and
        libraries  such  as <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>.  <EM>Terminfo</EM> describes termi-
        nals by giving a set of capabilities which they  have,  by
        specifying how to perform screen operations, and by speci-
        fying padding requirements and  initialization  sequences.
-       This describes <STRONG>ncurses</STRONG> version 5.6 (patch 20081011).
+       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20150808).
 
        Entries in <EM>terminfo</EM> consist of a sequence of `,' separated
        fields (embedded commas may be escaped with a backslash or
@@ -106,14 +106,13 @@
        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
+       root  name,  thus  "hp2621".  This name should not contain
        hyphens.  Modes that the hardware can be in, or user pref-
        erences,  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 pos-
        sible:
 
-
       <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
@@ -126,14 +125,16 @@
       -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>term(7)</STRONG>
        manual page.
 
-   <STRONG>Capabilities</STRONG>
+
+</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,
@@ -176,133 +177,134 @@
        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 col-
+               <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 col-
                                              umn 0 to last column
-       auto_right_margin         am    am    terminal has auto-
+       auto_right_margin         am     am   terminal has auto-
                                              matic margins
-       back_color_erase          bce   ut    screen erased with
+       back_color_erase          bce    ut   screen erased with
                                              background color
-       can_change                ccc   cc    terminal can re-
+       can_change                ccc    cc   terminal can re-
                                              define existing col-
                                              ors
-       ceol_standout_glitch      xhp   xs    standout not erased
+       ceol_standout_glitch      xhp    xs   standout not erased
                                              by overwriting (hp)
-       col_addr_glitch           xhpa  YA    only positive motion
+       col_addr_glitch           xhpa   YA   only positive motion
                                              for hpa/mhpa caps
 
 
-       cpi_changes_res           cpix  YF    changing character
+
+       cpi_changes_res           cpix   YF   changing character
                                              pitch changes reso-
                                              lution
-       cr_cancels_micro_mode     crxm  YB    using cr turns off
+       cr_cancels_micro_mode     crxm   YB   using cr turns off
                                              micro mode
-       dest_tabs_magic_smso      xt    xt    tabs destructive,
+       dest_tabs_magic_smso      xt     xt   tabs destructive,
                                              magic so char
                                              (t1061)
-       eat_newline_glitch        xenl  xn    newline ignored
+       eat_newline_glitch        xenl   xn   newline ignored
                                              after 80 cols (con-
                                              cept)
-       erase_overstrike          eo    eo    can erase over-
+       erase_overstrike          eo     eo   can erase over-
                                              strikes with a blank
-       generic_type              gn    gn    generic line type
-       hard_copy                 hc    hc    hardcopy terminal
-       hard_cursor               chts  HC    cursor is hard to
+       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
+       has_meta_key              km     km   Has a meta key
                                              (i.e., sets 8th-bit)
-       has_print_wheel           daisy YC    printer needs opera-
+       has_print_wheel           daisy  YC   printer needs opera-
                                              tor to change char-
                                              acter set
-       has_status_line           hs    hs    has extra status
+       has_status_line           hs     hs   has extra status
                                              line
-       hue_lightness_saturation  hls   hl    terminal uses only
+       hue_lightness_saturation  hls    hl   terminal uses only
                                              HLS color notation
                                              (Tektronix)
-       insert_null_glitch        in    in    insert mode distin-
+       insert_null_glitch        in     in   insert mode distin-
                                              guishes nulls
-       lpi_changes_res           lpix  YG    changing line pitch
+       lpi_changes_res           lpix   YG   changing line pitch
                                              changes resolution
-       memory_above              da    da    display may be
+       memory_above              da     da   display may be
                                              retained above the
                                              screen
-       memory_below              db    db    display may be
+       memory_below              db     db   display may be
                                              retained below the
                                              screen
-       move_insert_mode          mir   mi    safe to move while
+       move_insert_mode          mir    mi   safe to move while
                                              in insert mode
-       move_standout_mode        msgr  ms    safe to move while
+       move_standout_mode        msgr   ms   safe to move while
                                              in standout mode
-       needs_xon_xoff            nxon  nx    padding will not
+       needs_xon_xoff            nxon   nx   padding will not
                                              work, xon/xoff
                                              required
-       no_esc_ctlc               xsb   xb    beehive (f1=escape,
+       no_esc_ctlc               xsb    xb   beehive (f1=escape,
                                              f2=ctrl C)
-       no_pad_char               npc   NP    pad character does
+       no_pad_char               npc    NP   pad character does
                                              not exist
-       non_dest_scroll_region    ndscr ND    scrolling region is
+       non_dest_scroll_region    ndscr  ND   scrolling region is
                                              non-destructive
-       non_rev_rmcup             nrrmc NR    smcup does not
+       non_rev_rmcup             nrrmc  NR   smcup does not
                                              reverse rmcup
-       over_strike               os    os    terminal can over-
+       over_strike               os     os   terminal can over-
                                              strike
-       prtr_silent               mc5i  5i    printer will not
+       prtr_silent               mc5i   5i   printer will not
                                              echo on screen
-       row_addr_glitch           xvpa  YD    only positive motion
+       row_addr_glitch           xvpa   YD   only positive motion
                                              for vpa/mvpa caps
-       semi_auto_right_margin    sam   YE    printing in last
+       semi_auto_right_margin    sam    YE   printing in last
                                              column causes cr
-       status_line_esc_ok        eslok es    escape can be used
+       status_line_esc_ok        eslok  es   escape can be used
                                              on the status line
-       tilde_glitch              hz    hz    cannot print ~'s
-                                             (hazeltine)
+       tilde_glitch              hz     hz   cannot print ~'s
+                                             (Hazeltine)
 
 
-       transparent_underline     ul    ul    underline character
+       transparent_underline     ul     ul   underline character
                                              overstrikes
-       xon_xoff                  xon   xo    terminal uses
+       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
+               <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
+       init_tabs                 it     it   tabs initially every
                                              # spaces
-       label_height          lh       lh     rows in each label
-       label_width           lw       lw     columns in each
+       label_height              lh     lh   rows in each label
+       label_width               lw     lw   columns in each
                                              label
-       lines                 lines    li     number of lines on
+       lines                     lines  li   number of lines on
                                              screen or page
-       lines_of_memory       lm       lm     lines of memory if &gt;
+       lines_of_memory           lm     lm   lines of memory if &gt;
                                              line. 0 means varies
-       magic_cookie_glitch   xmc      sg     number of blank
+       magic_cookie_glitch       xmc    sg   number of blank
                                              characters left by
                                              smso or rmso
-       max_attributes        ma       ma     maximum combined
+       max_attributes            ma     ma   maximum combined
                                              attributes terminal
                                              can handle
-       max_colors            colors   Co     maximum number of
+       max_colors                colors Co   maximum number of
                                              colors on screen
-       max_pairs             pairs    pa     maximum number of
+       max_pairs                 pairs  pa   maximum number of
                                              color-pairs on the
                                              screen
-       maximum_windows       wnum     MW     maximum number of
-                                             defineable windows
-       no_color_video        ncv      NC     video attributes
+       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
+       num_labels                nlab   Nl   number of labels on
                                              screen
-       padding_baud_rate     pb       pb     lowest baud rate
+       padding_baud_rate         pb     pb   lowest baud rate
                                              where padding needed
-       virtual_terminal      vt       vt     virtual terminal
+       virtual_terminal          vt     vt   virtual terminal
                                              number (CB/unix)
-       width_status_line     wsl      ws     number of columns in
+       width_status_line         wsl    ws   number of columns in
                                              status line
 
        The following numeric  capabilities  are  present  in  the
@@ -310,47 +312,47 @@
        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
+               <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
+       bit_image_type            bitype Yp   type of bit-image
                                              device
-       buffer_capacity        bufsz   Ya     numbers of bytes
+       buffer_capacity           bufsz  Ya   numbers of bytes
                                              buffered before
                                              printing
-       buttons                btns    BT     number of buttons on
+       buttons                   btns   BT   number of buttons on
                                              mouse
-       dot_horz_spacing       spinh   Yc     spacing of dots hor-
+       dot_horz_spacing          spinh  Yc   spacing of dots hor-
                                              izontally in dots
                                              per inch
 
-       dot_vert_spacing       spinv   Yb     spacing of pins ver-
+       dot_vert_spacing          spinv  Yb   spacing of pins ver-
                                              tically in pins per
                                              inch
-       max_micro_address      maddr   Yd     maximum value in
+       max_micro_address         maddr  Yd   maximum value in
                                              micro_..._address
-       max_micro_jump         mjump   Ye     maximum value in
+       max_micro_jump            mjump  Ye   maximum value in
                                              parm_..._micro
-       micro_col_size         mcs     Yf     character step size
+       micro_col_size            mcs    Yf   character step size
                                              when in micro mode
-       micro_line_size        mls     Yg     line step size when
+       micro_line_size           mls    Yg   line step size when
                                              in micro mode
-       number_of_pins         npins   Yh     numbers of pins in
+       number_of_pins            npins  Yh   numbers of pins in
                                              print-head
-       output_res_char        orc     Yi     horizontal resolu-
+       output_res_char           orc    Yi   horizontal resolu-
                                              tion in units per
                                              line
-       output_res_horz_inch   orhi    Yk     horizontal resolu-
+       output_res_horz_inch      orhi   Yk   horizontal resolu-
                                              tion in units per
                                              inch
-       output_res_line        orl     Yj     vertical resolution
+       output_res_line           orl    Yj   vertical resolution
                                              in units per line
-       output_res_vert_inch   orvi    Yl     vertical resolution
+       output_res_vert_inch      orvi   Yl   vertical resolution
                                              in units per inch
-       print_rate             cps     Ym     print rate in char-
+       print_rate                cps    Ym   print rate in char-
                                              acters per second
-       wide_char_size         widcs   Yn     character step size
+       wide_char_size            widcs  Yn   character step size
                                              when in double wide
                                              mode
 
@@ -402,8 +404,8 @@
                                              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_address            cup    cm   move to row #1 col-
+                                             umns #2
        cursor_down               cud1   do   down one line
        cursor_home               home   ho   home cursor (if no
                                              cup)
@@ -904,8 +906,8 @@
        zero_motion               zerom  Zx   No motion for subse-
                                              quent character
 
-       The  following  string  capabilities  are  present  in the
-       SVr4.0 term structure, but were originally not  documented
+       The following  string  capabilities  are  present  in  the
+       SVr4.0  term structure, but were originally not documented
        in the man page.
 
 
@@ -928,9 +930,8 @@
                                                multiple codesets
        color_names               colornm  Yw   Give name for
                                                color #1
-       define_bit_image_region   defbi    Yx   Define rectan-
-                                               gualar bit image
-                                               region
+       define_bit_image_region   defbi    Yx   Define rectangular
+                                               bit image region
        device_type               devt     dv   Indicate lan-
                                                guage/codeset sup-
                                                port
@@ -985,17 +986,19 @@
        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.   They  are  some
-        post-4.1  versions  of System V curses, e.g., Solaris 2.5
-        and IRIX 6.x.  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!
+        The XSI Curses standard added  these  hardcopy  capabili-
+        ties.  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.  Accord-
+        ing 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>
@@ -1015,90 +1018,173 @@
         set_a_attributes         sgr1   sA   Define second set of
                                              video attributes
                                              #1-#6
-        set_pglen_inch           slengthsL   YI Set page length
-                                             to #1 hundredth of
-                                             an inch
+        set_pglen_inch           slengthYI   Set page length to
+                                             #1 hundredth of an
+                                             inch (some implemen-
+                                             tations use sL for
+                                             termcap).
 
-   <STRONG>A</STRONG> <STRONG>Sample</STRONG> <STRONG>Entry</STRONG>
+
+</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 capa-
+       bilities.
+
+       <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 capabil-
+       ity.   The <STRONG>use_extended_names</STRONG> function makes this informa-
+       tion 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,
-             mc5i,
-             colors#8, ncv#3, pairs#64,
-             cub=\E[%p1%dD, cud=\E[%p1%dB, cuf=\E[%p1%dC,
-             cuu=\E[%p1%dA, dch=\E[%p1%dP, dl=\E[%p1%dM,
-             ech=\E[%p1%dX, el1=\E[1K, hpa=\E[%p1%dG, ht=\E[I,
-             ich=\E[%p1%d@, il=\E[%p1%dL, indn=\E[%p1%dS, .indn=\E[%p1%dT,
-             kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B,
-             kcuf1=\E[C, kcuu1=\E[A, kf1=\E[M, kf10=\E[V,
-             kf11=\E[W, kf12=\E[X, kf2=\E[N, kf3=\E[O, kf4=\E[P,
-             kf5=\E[Q, kf6=\E[R, kf7=\E[S, kf8=\E[T, kf9=\E[U,
-             kich1=\E[L, mc4=\E[4i, mc5=\E[5i, nel=\r\E[S,
-             op=\E[37;40m, rep=%p1%c\E[%p2%{1}%-%db,
-             rin=\E[%p1%dT, s0ds=\E(B, s1ds=\E)B, s2ds=\E*B,
-             s3ds=\E+B, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
-             setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
-             setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
-             sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p8%t;11%;%?%p9%t;12%;m,
-             sgr0=\E[0;10m, tbc=\E[2g, u6=\E[%d;%dR, u7=\E[6n,
-             u8=\E[?%[;0123456789]c, u9=\E[c, vpa=\E[%p1%dd,
+       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: Boolean capa-
-       bilities which indicate that the terminal has some partic-
-       ular  feature, numeric capabilities giving the size of the
-       terminal or the size  of  particular  delays,  and  string
-       capabilities,  which  give a sequence which can be used to
-       perform particular terminal operations.
+       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.
 
 
-   <STRONG>Types</STRONG> <STRONG>of</STRONG> <STRONG>Capabilities</STRONG>
+</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.
+       followed  by  the character "#" and then a positive value.
        Thus <STRONG>cols</STRONG>, which indicates the number of columns the  ter-
-       minal  has,  gives  the  value  `80' for ansi.  Values for
+       minal  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
-       `,'.
+       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.
        Both  <STRONG>\E</STRONG>  and  <STRONG>\e</STRONG> map to an ESCAPE character, <STRONG>^x</STRONG> maps to a
        control-x for any appropriate x, and the sequences  <STRONG>\n</STRONG>  <STRONG>\l</STRONG>
        <STRONG>\r</STRONG>  <STRONG>\t</STRONG>  <STRONG>\b</STRONG>  <STRONG>\f</STRONG>  <STRONG>\s</STRONG> give a newline, line-feed, return, tab,
-       backspace, form-feed, and space.  Other escapes include <STRONG>\^</STRONG>
-       for  <STRONG>^</STRONG>, <STRONG>\\</STRONG> for <STRONG>\</STRONG>, <STRONG>\</STRONG>, for comma, <STRONG>\:</STRONG> for <STRONG>:</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, provid-
-       ing CS7 is specified.  See <STRONG><A HREF="stty.1.html">stty(1)</A></STRONG>.)  Finally,  characters
-       may be given as three octal digits after a <STRONG>\</STRONG>.
+       backspace, form-feed, and space.  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 termi-
+           nals, providing CS7 is specified.  See <STRONG>stty(1)</STRONG>.
+
+           The reason for this quirk is to maintain  binary  com-
+           patibility  of  the compiled terminfo files with other
+           implementations, e.g., the SVr4 systems,  which  docu-
+           ment  this.   Compiled  terminfo files use null-termi-
+           nated 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 <EM>tputs</EM> to provide
        this delay.  The delay must be a number with at  most  one
        decimal place of precision; it may be followed by suffixes
-       `*' or '/' or both.  A  `*'  indicates  that  the  padding
+       "*" or "/" or both.  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.  A `/' suffix indicates that
+       but  does not trigger delays.  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.
@@ -1108,85 +1194,100 @@
        example, see the second <STRONG>ind</STRONG> in the example above.
 
 
-   <STRONG>Fetching</STRONG> <STRONG>Compiled</STRONG> <STRONG>Descriptions</STRONG>
-       If the environment variable TERMINFO is set, it is  inter-
-       preted  as the pathname of a directory containing the com-
-       piled description you are working on.  Only that directory
-       is searched.
+</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.
 
-       If  TERMINFO  is  not set, the <STRONG>ncurses</STRONG> version of the ter-
-       minfo reader code  will  instead  look  in  the  directory
-       <STRONG>$HOME/.terminfo</STRONG>  for  a compiled description.  If it fails
-       to find one  there,  and  the  environment  variable  TER-
-       MINFO_DIRS  is set, it will interpret the contents of that
-       variable as a list of colon- separated directories  to  be
-       searched  (an  empty  entry is interpreted as a command to
-       search <EM>/usr/share/terminfo</EM>).  If no description  is  found
-       in  any of the TERMINFO_DIRS directories, the fetch fails.
+       <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.
 
-       If neither TERMINFO nor TERMINFO_DIRS  is  set,  the  last
-       place   tried  will  be  the  system  terminfo  directory,
-       <EM>/usr/share/terminfo</EM>.
+       <STRONG>o</STRONG>   If TERMINFO is not set, <STRONG>ncurses</STRONG> will instead  look  in
+           the  directory <STRONG>$HOME/.terminfo</STRONG> for a compiled descrip-
+           tion.
 
-       (Neither the  <STRONG>$HOME/.terminfo</STRONG>  lookups  nor  TERMINFO_DIRS
-       extensions   are  supported  under  stock  System  V  ter-
-       minfo/curses.)
+       <STRONG>o</STRONG>   Next, if the  environment  variable  TERMINFO_DIRS  is
+           set, <STRONG>ncurses</STRONG> will interpret the contents of that vari-
+           able 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/ter-</EM>
+           <EM>minfo</EM>.
+
+       <STRONG>o</STRONG>   Finally, <STRONG>ncurses</STRONG> searches these compiled-in locations:
+
+           <STRONG>o</STRONG>   a          list           of           directories
+               (/usr/local/ncurses/share/terminfo:/usr/share/ter-
+               minfo), and
+
+           <STRONG>o</STRONG>   the system terminfo directory, <EM>/usr/share/terminfo</EM>
+               (the compiled-in default).
 
 
-   <STRONG>Preparing</STRONG> <STRONG>Descriptions</STRONG>
-       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
+</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
+       program to check that they are correct.  Be aware  that  a
        very unusual terminal may expose deficiencies in the abil-
-       ity  of  the  <EM>terminfo</EM>  file to describe it or bugs in the
+       ity 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
+       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  usu-
-       ally  needed.  A similar test can be used for insert char-
+       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 usu-
+       ally needed.  A similar test can be used for insert  char-
        acter.
 
 
-   <STRONG>Basic</STRONG> <STRONG>Capabilities</STRONG>
-       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
+</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  mar-
+       beginning  of the next line when it reaches the right mar-
        gin, then it should have the <STRONG>am</STRONG> capability.  If the termi-
-       nal can clear its screen, leaving the cursor in  the  home
-       position,  then this is given by the <STRONG>clear</STRONG> string capabil-
-       ity.  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
+       nal  can  clear its screen, leaving the cursor in the home
+       position, then this is given by the <STRONG>clear</STRONG> string  capabil-
+       ity.   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 car-
-       riage return, control M.)  If there is a code  to  produce
+       riage  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
+       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
+       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
+       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
+       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
@@ -1222,20 +1323,21 @@
        described as
 
        33|tty33|tty|model 33 teletype,
-            bel=^G, cols#72, cr=^M, cud1=^J, hc, ind=^J, os,
+               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,
+               am, bel=^G, clear=^Z, cols#80, cr=^M, cub1=^H, cud1=^J,
+               ind=^J, lines#24,
 
 
-   <STRONG>Parameterized</STRONG> <STRONG>Strings</STRONG>
+</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 <STRONG><A HREF="printf.3.html">printf(3)</A></STRONG> like escapes  <STRONG>%x</STRONG>  in  it.   For
-       example,  to  address  the  cursor,  the <STRONG>cup</STRONG> capability is
+       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
@@ -1252,32 +1354,31 @@
 
        The <STRONG>%</STRONG> encodings have the following meanings:
 
+       <STRONG>%%</STRONG>   outputs "%"
 
-       %%   outputs `%'
-
-       %<EM>[[</EM>:<EM>]flags][width[.precision]][</EM>doxXs<EM>]</EM>
-            as in <STRONG>printf</STRONG>, flags are [-+#] and space.  Use  a  `:'
-            to  allow the next character to be a `-' flag, avoid-
+       <STRONG>%</STRONG><EM>[[</EM>:<EM>]flags][width[.precision]][</EM><STRONG>doxXs</STRONG><EM>]</EM>
+            as in <STRONG>printf</STRONG>, flags are <EM>[-+#]</EM> and <EM>space</EM>.  Use  a  ":"
+            to  allow the next character to be a "-" flag, avoid-
             ing interpreting "%-" as an operator.
 
        %c   print pop() like %c in <STRONG>printf</STRONG>
 
-       %s   print pop() like %s in <STRONG>printf</STRONG>
+       <STRONG>%s</STRONG>   print pop() like %s in <STRONG>printf</STRONG>
 
-       %p[1-9]
+       <STRONG>%p</STRONG><EM>[1-9]</EM>
             push <EM>i</EM>'th parameter
 
-       %P[a-z]
-            set dynamic variable [a-z] to pop()
+       <STRONG>%P</STRONG><EM>[a-z]</EM>
+            set dynamic variable <EM>[a-z]</EM> to pop()
 
-       %g[a-z]
-            get dynamic variable [a-z] and push it
+       <STRONG>%g</STRONG><EM>[a-z]/</EM>
+            get dynamic variable <EM>[a-z]</EM> and push it
 
-       %P[A-Z]
-            set static variable [a-z] to pop()
+       <STRONG>%P</STRONG><EM>[A-Z]</EM>
+            set static variable <EM>[a-z]</EM> to <EM>pop()</EM>
 
-       %g[A-Z]
-            get static variable [a-z] and push it
+       <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
@@ -1286,59 +1387,59 @@
             other implementations.  Relying on it will  adversely
             impact portability to other implementations.
 
-       %'<EM>c</EM>' char constant <EM>c</EM>
+       <STRONG>%'</STRONG><EM>c</EM><STRONG>'</STRONG> char constant <EM>c</EM>
 
-       %{<EM>nn</EM>}
+       <STRONG>%{</STRONG><EM>nn</EM><STRONG>}</STRONG>
             integer constant <EM>nn</EM>
 
-       %l   push strlen(pop)
+       <STRONG>%l</STRONG>   push strlen(pop)
 
-       %+ %- %* %/ %m
-            arithmetic (%m is mod): push(pop() op pop())
+       <STRONG>%+</STRONG>, <STRONG>%-</STRONG>, <STRONG>%*</STRONG>, <STRONG>%/</STRONG>, <STRONG>%m</STRONG>
+            arithmetic (%m is mod): <EM>push(pop()</EM> <EM>op</EM> <EM>pop())</EM>
 
-       %&amp; %| %^
-            bit operations (AND, OR and exclusive-OR): push(pop()
-            op pop())
+       <STRONG>%&amp;</STRONG>, <STRONG>%|</STRONG>, <STRONG>%^</STRONG>
+            bit operations (AND, OR and exclusive-OR): <EM>push(pop()</EM>
+            <EM>op</EM> <EM>pop())</EM>
 
-       %= %&gt; %&lt;
-            logical operations: push(pop() op pop())
+       <STRONG>%=</STRONG>, <STRONG>%&gt;</STRONG>, <STRONG>%&lt;</STRONG>
+            logical operations: <EM>push(pop()</EM> <EM>op</EM> <EM>pop())</EM>
 
-       %A, %O
+       <STRONG>%A</STRONG>, <STRONG>%O</STRONG>
             logical AND and OR operations (for conditionals)
 
-       %! %~
+       <STRONG>%!</STRONG>, <STRONG>%~</STRONG>
             unary  operations  (logical  and   bit   complement):
             push(op pop())
 
-       %i   add 1 to first two parameters (for ANSI terminals)
+       <STRONG>%i</STRONG>   add 1 to first two parameters (for ANSI terminals)
 
-       %? <EM>expr</EM> %t <EM>thenpart</EM> %e <EM>elsepart</EM> %;
-            This  forms  an  if-then-else.   The  %e  <EM>elsepart</EM> is
-            optional.  Usually the %? <EM>expr</EM> part  pushes  a  value
-            onto  the stack, and %t pops it from the stack, test-
+       <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, test-
             ing if it is nonzero (true).  If it is zero  (false),
-            control passes to the %e (else) part.
+            control passes to the <STRONG>%e</STRONG> (else) part.
 
             It is possible to form else-if's a la Algol 68:
-            %? c1 %t b1 %e c2 %t b2 %e c3 %t b3 %e c4 %t b4 %e %;
+            <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 struc-
-            ture  of  if-the-else's.  Some strings, e.g., <STRONG>sgr</STRONG> can
+            ture 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
+            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}%-".  %P and %g variables  are  persistent  across
+       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  dig-
+       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 dig-
        its.  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
@@ -1354,7 +1455,7 @@
 
        A final example is the LSI ADM-3a, which uses row and col-
        umn  offset  by  a  blank  character,  thus  "cup=\E=%p1%'
-       '%+%c%p2%'  '%+%c".   After sending `\E=', this pushes the
+       '%+%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  charac-
@@ -1362,7 +1463,8 @@
        More complex arithmetic is possible using the stack.
 
 
-   <STRONG>Cursor</STRONG> <STRONG>Motions</STRONG>
+</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-
@@ -1380,12 +1482,12 @@
        <STRONG>hpa</STRONG> (horizontal position absolute) and <STRONG>vpa</STRONG> (vertical posi-
        tion 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.
+       can be used in preference to <STRONG>cup</STRONG>.  If there are parameter-
+       ized 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
@@ -1402,7 +1504,8 @@
        <STRONG>rmcup</STRONG>), specify <STRONG>nrrmc</STRONG>.
 
 
-   <STRONG>Area</STRONG> <STRONG>Clears</STRONG>
+</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
@@ -1415,7 +1518,8 @@
        number of lines, if a true <STRONG>ed</STRONG> is not available.)
 
 
-   <STRONG>Insert/delete</STRONG> <STRONG>line</STRONG> <STRONG>and</STRONG> <STRONG>vertical</STRONG> <STRONG>motions</STRONG>
+</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
@@ -1478,7 +1582,8 @@
        bring down non-blank lines.
 
 
-   <STRONG>Insert/Delete</STRONG> <STRONG>Character</STRONG>
+</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
@@ -1488,34 +1593,36 @@
        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 ter-
-       minal  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  ter-
-       minals whose insert mode cannot be described with the sin-
-       gle attribute.
+       eliminated, or expanded to two untyped blanks.
+
+       You  can determine the kind of terminal you have by clear-
+       ing 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  posi-
+       tion  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.
+       sequence needed to be sent just before sending the charac-
+       ter 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  prefer-
        able  to  <STRONG>ich1</STRONG>.   Technically,  you  should  not give both
@@ -1535,15 +1642,15 @@
        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
+       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>.
+       in insert mode, give this as a number of milliseconds pad-
+       ding in <STRONG>rmp</STRONG>.
 
        It is occasionally  necessary  to  move  around  while  in
        insert  mode  to delete characters on the same line (e.g.,
@@ -1565,7 +1672,8 @@
        with one parameter.
 
 
-   <STRONG>Highlighting,</STRONG> <STRONG>Underlining,</STRONG> <STRONG>and</STRONG> <STRONG>Visible</STRONG> <STRONG>Bells</STRONG>
+</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  dif-
        ferent ways.  You should choose one display form as <EM>stand-</EM>
@@ -1575,205 +1683,234 @@
        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,
+       or out of standout mode leaves one or even two blank  spa-
+       ces  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
+       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
+       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), tak-
-       ing 9 parameters.  Each parameter is either 0 or  nonzero,
+       If  there  is  a sequence to set arbitrary combinations of
+       modes, this should be given as <STRONG>sgr</STRONG> (set attributes),  tak-
+       ing  9 parameters.  Each parameter is either 0 or nonzero,
        as the corresponding attribute is on or off.  The 9 param-
-       eters 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
+       eters  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>
 
-           <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)
 
-           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
+       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  era-
-       sures.   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
+       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 era-
+       sures.  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  exam-
-       ple,  ;7  is output when either p1 or p3 is true, that is,
+       Some  sequences  are common to different modes.  For exam-
+       ple, ;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  depen-
+       Writing  out  the above sequences, along with their depen-
        dencies yields
 
+      <STRONG>sequence</STRONG>             <STRONG>when</STRONG> <STRONG>to</STRONG> <STRONG>output</STRONG>      <STRONG>terminfo</STRONG> <STRONG>translation</STRONG>
 
-         <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%;
+      \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%;%?%p1%p3%|%t;7%;
-               %?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
+           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
+       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
+       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 indi-
-       cate an error quietly (a bell replacement) then  this  can
+       If the terminal has a way of flashing the screen to  indi-
+       cate  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
+       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
+       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
+       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
+       (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
+       erasable  with  a  blank, then this should be indicated by
        giving <STRONG>eo</STRONG>.
 
 
-   <STRONG>Keypad</STRONG> <STRONG>and</STRONG> <STRONG>Function</STRONG> <STRONG>Keys</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
+       keys  are  pressed,  this  information can be given.  Note
        that it is not possible to handle terminals where the key-
        pad 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
+       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  func-
        tion  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>kll</STRONG> (home down), <STRONG>kbs</STRONG> (backspace), <STRONG>ktbc</STRONG> (clear  all  tabs),
-       <STRONG>kctab</STRONG>  (clear  the  tab  stop in this column), <STRONG>kclr</STRONG> (clear
-       screen or  erase  key),  <STRONG>kdch1</STRONG>  (delete  character),  <STRONG>kdl1</STRONG>
-       (delete line), <STRONG>krmir</STRONG> (exit insert mode), <STRONG>kel</STRONG> (clear to end
-       of line), <STRONG>ked</STRONG> (clear to  end  of  screen),  <STRONG>kich1</STRONG>  (insert
-       character  or  enter insert mode), <STRONG>kil1</STRONG> (insert line), <STRONG>knp</STRONG>
-       (next  page),  <STRONG>kpp</STRONG>  (previous  page),  <STRONG>kind</STRONG>  (scroll  for-
-       ward/down), <STRONG>kri</STRONG> (scroll backward/up), <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 direc-
-       tional pad are needed.
+       can be given as <STRONG>lf0,</STRONG> <STRONG>lf1,</STRONG> <STRONG>...,</STRONG> <STRONG>lf10</STRONG>.
 
-       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  num-
-       bers  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>
+       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 use-
+       ful 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 num-
+       bers 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  com-
+       and  <STRONG>pfx</STRONG>  causes  the string to be transmitted to the com-
        puter.
 
        The capabilities <STRONG>nlab</STRONG>, <STRONG>lw</STRONG> and <STRONG>lh</STRONG> define the number of pro-
-       grammable 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
+       grammable  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.
 
 
-   <STRONG>Tabs</STRONG> <STRONG>and</STRONG> <STRONG>Initialization</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).  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 prop-
-       erly set.  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.  This is normally used by
-       the <EM>tset</EM> 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
+</PRE>
+<H3><a name="h3-Tabs-and-Initialization">Tabs and Initialization</a></H3><PRE>
+       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).  A "back-tab" command which moves leftward to the pre-
+       ceding 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  prop-
+       erly  set.   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.  This is normally  used  by
+       the  <EM>tset</EM> 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>is1</STRONG>, <STRONG>is2</STRONG>, and <STRONG>is3</STRONG>,  initializa-
-       tion  strings  for the terminal, <STRONG>iprog</STRONG>, the path name of a
-       program to be run to initialize the terminal, 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.
+       Other  capabilities include <STRONG>is1</STRONG>, <STRONG>is2</STRONG>, and <STRONG>is3</STRONG>, initializa-
+       tion strings for the terminal, <STRONG>iprog</STRONG>, the path name  of  a
+       program  to be run to initialize the terminal, 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  <EM>tput</EM>  program,  each time the user logs in.  They
+       of the <EM>tput</EM> program, each time the  user  logs  in.   They
        will be printed in the following order:
 
               run the program
@@ -1793,94 +1930,97 @@
               and finally
                      output <STRONG>is3</STRONG>.
 
-       Most initialization is done with  <STRONG>is2</STRONG>.   Special  terminal
+       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
+       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>, analo-
-       gous  to  <STRONG>is1</STRONG>  <STRONG>,</STRONG>  <STRONG>is2</STRONG>  <STRONG>,</STRONG>  <STRONG>if</STRONG>  and <STRONG>is3</STRONG> respectively.  These
-       strings are output by the <EM>reset</EM>  program,  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  pro-
-       duce  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
+       gous to <STRONG>is1</STRONG> <STRONG>,</STRONG>  <STRONG>is2</STRONG>  <STRONG>,</STRONG>  <STRONG>if</STRONG>  and  <STRONG>is3</STRONG>  respectively.   These
+       strings  are  output  by  the <EM>reset</EM> program, 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 pro-
+       duce 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 <EM>reset</EM> program writes strings including <STRONG>iprog</STRONG>, etc., in
-       the  same  order  as  the  <EM>init</EM>  program, using <STRONG>rs1</STRONG>, etc.,
+       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 <EM>reset</EM> program falls
+       capability strings are missing, the  <EM>reset</EM>  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 com-
-       plex sequence is needed  to  set  the  tabs  than  can  be
-       described  by  this,  the sequence can be placed in <STRONG>is2</STRONG> or
+       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  com-
+       plex  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>.
 
-   <STRONG>Delays</STRONG> <STRONG>and</STRONG> <STRONG>Padding</STRONG>
-       Many older and slower  terminals  do  not  support  either
+
+</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 cer-
+       and  some  very  archaic CRTs (including, for example, DEC
+       VT100s).  These may require padding characters after  cer-
        tain 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
+       (that is, it automatically emits ^S back to the host  when
        its input buffers are close to full), set <STRONG>xon</STRONG>.  This capa-
-       bility  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  deci-
+       bility 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 deci-
        sions 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
+       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) charac-
-       ter as a pad, then this can be given  as  <STRONG>pad</STRONG>.   Only  the
+       If the terminal requires other than a null (zero)  charac-
+       ter  as  a  pad,  then this can be given as <STRONG>pad</STRONG>.  Only the
        first character of the <STRONG>pad</STRONG> string is used.
 
 
-   <STRONG>Status</STRONG> <STRONG>Lines</STRONG>
-       Some  terminals  have  an extra `status line' which is not
-       normally used by software (and thus  not  counted  in  the
+</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 indi-
+       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  indi-
        cated 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
+       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 capa-
+       a given zero-origin column on the status line.  The  capa-
        bility <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>
+       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
+       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 speci-
+       A command to erase or blank the status line may be  speci-
        fied as <STRONG>dsl</STRONG>.
 
-       The  boolean  capability  <STRONG>eslok</STRONG>  specifies   that   escape
+       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
@@ -1888,49 +2028,48 @@
        become important.
 
 
-   <STRONG>Line</STRONG> <STRONG>Graphics</STRONG>
+</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> build in support for
        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>VT100</STRONG>
-                 <STRONG>Name</STRONG>             <STRONG>Name</STRONG>           <STRONG>Default</STRONG>    <STRONG>Name</STRONG>
-       UK pound sign              ACS_STERLING   f          }
-       arrow pointing down        ACS_DARROW     v          .
-       arrow pointing left        ACS_LARROW     &lt;          ,
-       arrow pointing right       ACS_RARROW     &gt;          +
-       arrow pointing up          ACS_UARROW     ^          -
-       board of squares           ACS_BOARD      #          h
-       bullet                     ACS_BULLET     o          ~
-       checker board (stipple)    ACS_CKBOARD    :          a
-       degree symbol              ACS_DEGREE     \          f
-       diamond                    ACS_DIAMOND    +          `
-       greater-than-or-equal-to   ACS_GEQUAL     &gt;          z
-       greek pi                   ACS_PI         *          {
-       horizontal line            ACS_HLINE      -          q
-       lantern symbol             ACS_LANTERN    #          i
-       large plus or crossover    ACS_PLUS       +          n
-       less-than-or-equal-to      ACS_LEQUAL     &lt;          y
-
-       lower left corner          ACS_LLCORNER   +          m
-       lower right corner         ACS_LRCORNER   +          j
-       not-equal                  ACS_NEQUAL     !          |
-       plus/minus                 ACS_PLMINUS    #          g
-       scan line 1                ACS_S1         ~          o
-       scan line 3                ACS_S3         -          p
-       scan line 7                ACS_S7         -          r
-       scan line 9                ACS_S9         _          s
-       solid square block         ACS_BLOCK      #          0
-       tee pointing down          ACS_TTEE       +          w
-       tee pointing left          ACS_RTEE       +          u
-       tee pointing right         ACS_LTEE       +          t
-       tee pointing up            ACS_BTEE       +          v
-       upper left corner          ACS_ULCORNER   +          l
-       upper right corner         ACS_URCORNER   +          k
-       vertical line              ACS_VLINE      |          x
+       <STRONG>Glyph</STRONG>                       <STRONG>ACS</STRONG>           <STRONG>Ascii</STRONG>     <STRONG>VT100</STRONG>
+       <STRONG>Name</STRONG>                        <STRONG>Name</STRONG>          <STRONG>Default</STRONG>   <STRONG>Name</STRONG>
+       UK pound sign               ACS_STERLING  f         }
+       arrow pointing down         ACS_DARROW    v         .
+       arrow pointing left         ACS_LARROW    &lt;         ,
+       arrow pointing right        ACS_RARROW    &gt;         +
+       arrow pointing up           ACS_UARROW    ^         -
+       board of squares            ACS_BOARD     #         h
+       bullet                      ACS_BULLET    o         ~
+       checker board (stipple)     ACS_CKBOARD   :         a
+       degree symbol               ACS_DEGREE    \         f
+       diamond                     ACS_DIAMOND   +         `
+       greater-than-or-equal-to    ACS_GEQUAL    &gt;         z
+       greek pi                    ACS_PI        *         {
+       horizontal line             ACS_HLINE     -         q
+       lantern symbol              ACS_LANTERN   #         i
+       large plus or crossover     ACS_PLUS      +         n
+       less-than-or-equal-to       ACS_LEQUAL    &lt;         y
+       lower left corner           ACS_LLCORNER  +         m
+       lower right corner          ACS_LRCORNER  +         j
+       not-equal                   ACS_NEQUAL    !         |
+       plus/minus                  ACS_PLMINUS   #         g
+       scan line 1                 ACS_S1        ~         o
+       scan line 3                 ACS_S3        -         p
+       scan line 7                 ACS_S7        -         r
+       scan line 9                 ACS_S9        _         s
+       solid square block          ACS_BLOCK     #         0
+       tee pointing down           ACS_TTEE      +         w
+       tee pointing left           ACS_RTEE      +         u
+       tee pointing right          ACS_LTEE      +         t
+       tee pointing up             ACS_BTEE      +         v
+       upper left corner           ACS_ULCORNER  +         l
+       upper right corner          ACS_URCORNER  +         k
+       vertical line               ACS_VLINE     |         x
 
        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,
@@ -1941,9 +2080,10 @@
        ACSC string.
 
 
-   <STRONG>Color</STRONG> <STRONG>Handling</STRONG>
-       Most color terminals are either `Tektronix-like'  or  `HP-
-       like'.   Tektronix-like terminals have a predefined set of
+</PRE>
+<H3><a name="h3-Color-Handling">Color Handling</a></H3><PRE>
+       Most color terminals are either "Tektronix-like"  or  "HP-
+       like".   Tektronix-like terminals have a predefined set of
        N colors (where N usually 8), and can  set  character-cell
        foreground and background characters independently, mixing
        them into N * N color-pairs.  On  HP-like  terminals,  the
@@ -1986,7 +2126,6 @@
        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
@@ -2009,6 +2148,7 @@
              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 capa-
        bilities; otherwise red/blue will be interchanged  on  the
        display.
@@ -2038,17 +2178,23 @@
        ors  are  enabled.  The correspondence with the attributes
        understood by <STRONG>curses</STRONG> is as follows:
 
-
-                      <STRONG>Attribute</STRONG>      <STRONG>Bit</STRONG>   <STRONG>Decimal</STRONG>
-                      A_STANDOUT     0     1
-                      A_UNDERLINE    1     2
-                      A_REVERSE      2     4
-                      A_BLINK        3     8
-                      A_DIM          4     16
-                      A_BOLD         5     32
-                      A_INVIS        6     64
-                      A_PROTECT      7     128
-                      A_ALTCHARSET   8     256
+          <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
@@ -2059,7 +2205,8 @@
        and optimizes the output in favor of colors.
 
 
-   <STRONG>Miscellaneous</STRONG>
+</PRE>
+<H3><a name="h3-Miscellaneous">Miscellaneous</a></H3><PRE>
        If the terminal requires other than a null (zero)  charac-
        ter  as  a  pad,  then this can be given as pad.  Only the
        first character of the pad string is used.  If the  termi-
@@ -2082,7 +2229,7 @@
        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'.
+       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
@@ -2102,12 +2249,12 @@
        <EM>virtual</EM>   terminal   descriptions  for  which  the  escape
        sequences are known.)
 
-       If the terminal has a ``meta key'' which acts as  a  shift
+       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>.
+       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
@@ -2133,161 +2280,169 @@
        printer while an <STRONG>mc5p</STRONG> is in effect.
 
 
-   <STRONG>Glitches</STRONG> <STRONG>and</STRONG> <STRONG>Braindamage</STRONG>
-       Hazeltine terminals, which do not allow `~' characters  to
+</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
+       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  tel-
+       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 tel-
        eray_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 neces-
+       not  possible  to  position  the cursor on top of a "magic
+       cookie", that to erase standout mode it is instead  neces-
        sary to use delete and insert line.  The ncurses implemen-
        tation ignores this glitch.
 
-       The  Beehive Superbee, which is unable to correctly trans-
-       mit the escape or control C characters, has <STRONG>xsb</STRONG>,  indicat-
-       ing  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'.
+       The Beehive Superbee, which is unable to correctly  trans-
+       mit  the escape or control C characters, has <STRONG>xsb</STRONG>, indicat-
+       ing 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
+       Other specific  terminal  problems  may  be  corrected  by
        adding more capabilities of the form <STRONG>x</STRONG><EM>x</EM>.
 
 
-   <STRONG>Similar</STRONG> <STRONG>Terminals</STRONG>
+</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  vari-
-       ant,  the string capability <STRONG>use</STRONG> can be given with the name
-       of the base terminal.  The capabilities given  before  <STRONG>use</STRONG>
-       override  those  in  the base type named by <STRONG>use</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.   Capabili-
-       ties  given explicitly in the entry override those brought
+       can be defined as being just like  the  other  (the  base)
+       with  certain  exceptions.  In the definition of the vari-
+       ant, the string capability <STRONG>use</STRONG> can be given with the  name
+       of  the  base terminal.  The capabilities given before <STRONG>use</STRONG>
+       override those in the base type named by  <STRONG>use</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.  Capabili-
+       ties 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 capa-
+       the use reference that imports it, where <EM>xx</EM> is  the  capa-
        bility.  For example, the entry
 
-                   2621-nl, smkx@, rmkx@, use=2621,
+              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
+       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.
 
 
-   <STRONG>Pitfalls</STRONG> <STRONG>of</STRONG> <STRONG>Long</STRONG> <STRONG>Entries</STRONG>
-       Long  terminfo  entries  are  unlikely to be a problem; to
-       date, no entry has even  approached  terminfo's  4096-byte
+</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 transla-
        tions are much more strictly limited (to 1023 bytes), thus
-       termcap  translations  of  long terminfo entries can cause
+       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
+       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
+       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
+       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
+       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 par-
-       ticular terminal.  This is the length of the entry  as  it
+       The  "before  tc  expansion"  length is the most important
+       one, because it affects more than just users of that  par-
+       ticular  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
+       libraries strip off the final newline,  too  (GNU  termcap
        does not).  Now suppose:
 
-       *    a termcap entry before expansion is  more  than  1023
-            bytes long,
+       <STRONG>o</STRONG>   a  termcap  entry  before  expansion is more than 1023
+           bytes long,
 
-       *    and the application has only allocated a 1k buffer,
+       <STRONG>o</STRONG>   and the application has only allocated a 1k buffer,
 
-       *    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 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,
 
-       *    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).
+       <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
+       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" expan-
-       sion once it is found the terminal  type  it  was  looking
+       that terminal type, since <STRONG>tgetent()</STRONG> only does "tc"  expan-
+       sion  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,
+       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 ter-
-       minal types and users whose TERM variable does not have  a
+       minal  types and users whose TERM variable does not have a
        termcap entry.
 
        When in -C (translate to termcap) mode, the <STRONG>ncurses</STRONG> imple-
        mentation 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)
+       tc length of a termcap translation is too  long.   The  -c
+       (check)  option  also checks resolved (after tc expansion)
        lengths.
 
-   <STRONG>Binary</STRONG> <STRONG>Compatibility</STRONG>
-       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
+
+</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
+       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>EXTENSIONS</H2><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  parame-
        ter strings.
@@ -2316,6 +2471,14 @@
        and emulators like xterm that  can  return  mouse-tracking
        information in the keyboard-input stream.
 
+       X/Open Curses does not mention italics.  Portable applica-
+       tions 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, accu-
@@ -2342,22 +2505,23 @@
        through 63, plus a number  of  incompatible  string  table
        extensions.
 
-       <STRONG>OSF</STRONG>  -- Supports both the SVr4 set and the AIX extensions.
+       <STRONG>OSF</STRONG> -- Supports both the SVr4 set and the AIX extensions.
 
 
 </PRE>
-<H2>FILES</H2><PRE>
+<H2><a name="h2-FILES">FILES</a></H2><PRE>
        /usr/share/terminfo/?/*  files     containing     terminal
                                 descriptions
 
 
 </PRE>
-<H2>SEE ALSO</H2><PRE>
-       <STRONG><A HREF="tic.1m.html">tic(1m)</A></STRONG>, <STRONG><A HREF="infocmp.1m.html">infocmp(1m)</A></STRONG>, <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>, <STRONG><A HREF="printf.3.html">printf(3)</A></STRONG>, <STRONG><A HREF="term.5.html">term(5)</A></STRONG>.
+<H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
+       <STRONG><A HREF="tic.1m.html">tic(1m)</A></STRONG>,  <STRONG><A HREF="infocmp.1m.html">infocmp(1m)</A></STRONG>,  <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>,  <STRONG>printf(3)</STRONG>,   <STRONG><A HREF="term.5.html">term(5)</A></STRONG>.
+       <STRONG><A HREF="term_variables.3x.html">term_variables(3x)</A></STRONG>.
 
 
 </PRE>
-<H2>AUTHORS</H2><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.
 
@@ -2365,10 +2529,43 @@
 
                                                             <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>
 </PRE>
-<HR>
-<ADDRESS>
-Man(1) output converted with
-<a href="http://www.oac.uci.edu/indiv/ehood/man2html.html">man2html</a>
-</ADDRESS>
+<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-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-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-Similar-Terminals">Similar Terminals</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>
