ncurses 6.0 - patch 20170204
authorThomas E. Dickey <dickey@invisible-island.net>
Sun, 5 Feb 2017 02:12:49 +0000 (02:12 +0000)
committerThomas E. Dickey <dickey@invisible-island.net>
Sun, 5 Feb 2017 02:12:49 +0000 (02:12 +0000)
+ trim newlines, tabs and escaped newlines from terminfo "paths" passed
  to db-iterator.
+ ignore zero-length files in db-iterator; these are useful for
  instance to suppress "$HOME/.terminfo" when not wanted.
+ amended "b64:" encoder to work with the terminfo reader.
+ modify terminfo reader to accept "b64:" format using RFC-3548 in
  as well as RFC-4648 url/filename-safe format.
+ modify terminfo reader to accept "hex:" format as generated by
  "infocmp -0qQ1" (cf: 20150905).
+ adjust authors comment to reflect drop below 1% for SV.

34 files changed:
AUTHORS
NEWS
VERSION
dist.mk
doc/html/man/adacurses6-config.1.html
doc/html/man/captoinfo.1m.html
doc/html/man/clear.1.html
doc/html/man/form.3x.html
doc/html/man/infocmp.1m.html
doc/html/man/infotocap.1m.html
doc/html/man/menu.3x.html
doc/html/man/ncurses.3x.html
doc/html/man/ncurses6-config.1.html
doc/html/man/panel.3x.html
doc/html/man/tabs.1.html
doc/html/man/terminfo.5.html
doc/html/man/tic.1m.html
doc/html/man/toe.1m.html
doc/html/man/tput.1.html
doc/html/man/tset.1.html
include/tic.h
man/infocmp.1m
man/ncurses.3x
ncurses/curses.priv.h
ncurses/tinfo/db_iterator.c
ncurses/tinfo/read_entry.c
ncurses/tinfo/write_entry.c
package/debian-mingw/changelog
package/debian-mingw64/changelog
package/debian/changelog
package/mingw-ncurses.nsi
package/mingw-ncurses.spec
package/ncurses.spec
progs/dump_entry.c

diff --git a/AUTHORS b/AUTHORS
index 57904c40453751abdaf196996f7885f77ce095f8..708e1ef735b244f7f5f136fb560650d0f870e798 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,5 +1,5 @@
 -------------------------------------------------------------------------------
--- Copyright (c) 2006 Free Software Foundation, Inc.                         --
+-- Copyright (c) 2006,2017 Free Software Foundation, Inc.                    --
 --                                                                           --
 -- Permission is hereby granted, free of charge, to any person obtaining a   --
 -- copy of this software and associated documentation files (the             --
@@ -25,7 +25,7 @@
 -- sale, use or other dealings in this Software without prior written        --
 -- authorization.                                                            --
 -------------------------------------------------------------------------------
--- $Id: AUTHORS,v 1.2 2006/10/28 21:44:52 tom Exp $
+-- $Id: AUTHORS,v 1.3 2017/02/04 15:20:52 tom Exp $
 -------------------------------------------------------------------------------
 These are the principal authors/contributors of ncurses since 1.9.9e,
 in decreasing order of their contribution:
@@ -36,3 +36,4 @@ ESR   Eric S Raymond
 AVL    Alexander V Lukyanov
 PB     Philippe Blain
 SV     Sven Verdoolaege
+NB  Nicolas Boulenguez
diff --git a/NEWS b/NEWS
index 116bf91e8dbdd85f77fda8fc6b500d4d7c47fe42..e5df183ca81b6595b91a654cf60ad8bdd5b6e375 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -25,7 +25,7 @@
 -- sale, use or other dealings in this Software without prior written        --
 -- authorization.                                                            --
 -------------------------------------------------------------------------------
--- $Id: NEWS,v 1.2744 2017/01/29 00:42:37 tom Exp $
+-- $Id: NEWS,v 1.2751 2017/02/04 21:42:06 tom Exp $
 -------------------------------------------------------------------------------
 
 This is a log of changes that ncurses has gone through since Zeyd started
@@ -38,13 +38,25 @@ Contributors include those who have provided patches (even small ones), as well
 as those who provide useful information (bug reports, analyses).  Changes with
 no cited author are the work of Thomas E Dickey (TD).
 
-A few contributors are given in this file by their initials.
-They each account for one percent or more of the changes since 1.9.9e.
+A few contributors may be cited in this file by their initials.
+Each accounts for half of one percent or more of the changes since 1.9.9e.
 See the AUTHORS file for the corresponding full names.
 
 Changes through 1.9.9e did not credit all contributions;
 it is not possible to add this information.
 
+20170204
+       + trim newlines, tabs and escaped newlines from terminfo "paths" passed
+         to db-iterator.
+       + ignore zero-length files in db-iterator; these are useful for
+         instance to suppress "$HOME/.terminfo" when not wanted.
+       + amended "b64:" encoder to work with the terminfo reader.
+       + modify terminfo reader to accept "b64:" format using RFC-3548 in
+         as well as RFC-4648 url/filename-safe format.
+       + modify terminfo reader to accept "hex:" format as generated by
+         "infocmp -0qQ1" (cf: 20150905).
+       + adjust authors comment to reflect drop below 1% for SV.
+
 20170128
        + minor comment-fixes to help automate links to bug-urls -TD
        + add dvtm, dvtm-256color -TD
diff --git a/VERSION b/VERSION
index 2d7ace60b2656909bc14406906806a7fa5a8d92e..35439f34f7fa3e192bed641df97adcf513b07ac2 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-5:0:9  6.0     20170128
+5:0:9  6.0     20170204
diff --git a/dist.mk b/dist.mk
index 9408c1b049e7fe45171168a90c487195131776b9..c556fa2f76c7a91e2db76599863e032627aca0d3 100644 (file)
--- a/dist.mk
+++ b/dist.mk
@@ -25,7 +25,7 @@
 # use or other dealings in this Software without prior written               #
 # authorization.                                                             #
 ##############################################################################
-# $Id: dist.mk,v 1.1144 2017/01/28 14:18:58 tom Exp $
+# $Id: dist.mk,v 1.1145 2017/02/03 22:37:25 tom Exp $
 # Makefile for creating ncurses distributions.
 #
 # This only needs to be used directly as a makefile by developers, but
@@ -37,7 +37,7 @@ SHELL = /bin/sh
 # These define the major/minor/patch versions of ncurses.
 NCURSES_MAJOR = 6
 NCURSES_MINOR = 0
-NCURSES_PATCH = 20170128
+NCURSES_PATCH = 20170204
 
 # We don't append the patch to the version, since this only applies to releases
 VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR)
index 54723ce5e5a4e9582f0ae6246a94e4b7d0a23303..e90e0f90668bd049237f6521f9d60fa1e8404b91 100644 (file)
 </PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
        <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>
 
-       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170128).
+       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170204).
 
 
 
index 637c35bd003695f725836674ba610d21b252d585..d703b8671ea2360616a1406ba70d9812ad1664ef 100644 (file)
 </PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
        <STRONG><A HREF="infocmp.1m.html">infocmp(1m)</A></STRONG>, <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>, <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>
 
-       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170128).
+       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170204).
 
 
 </PRE><H2><a name="h2-AUTHOR">AUTHOR</a></H2><PRE>
index b44916280b21915b21ee8eb55ae8938ad27eaf8c..c04197f312f6ea232478794c1b3e5333a7782063 100644 (file)
 </PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
        <STRONG><A HREF="tput.1.html">tput(1)</A></STRONG>, <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>
 
-       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170128).
+       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170204).
 
 
 
index 5ede1a734c07cb1ad5bc5c6d22287ba91d18aadd..6251f05d2ffe5c3190d59ee2e9f98ade94d4fcc4 100644 (file)
        <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG> and related pages whose names begin "form_" for
        detailed descriptions of the entry points.
 
-       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170128).
+       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170204).
 
 
 
index 06a5d5d41730e910a86fbc1491a7c15f25cf0af7..bf777ce19187aa167573e0a85c62678ff6da6ebb 100644 (file)
@@ -27,7 +27,7 @@
   * sale, use or other dealings in this Software without prior written       *
   * authorization.                                                           *
   ****************************************************************************
-  * @Id: infocmp.1m,v 1.60 2017/01/14 19:55:27 tom Exp @
+  * @Id: infocmp.1m,v 1.61 2017/02/05 00:27:46 tom Exp @
 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
 <HTML>
 
 
 </PRE><H2><a name="h2-EXTENSIONS">EXTENSIONS</a></H2><PRE>
-       The <STRONG>-0</STRONG>, <STRONG>-1</STRONG>, <STRONG>-E</STRONG>, <STRONG>-F</STRONG>, <STRONG>-G</STRONG>, <STRONG>-R</STRONG>, <STRONG>-T</STRONG>, <STRONG>-V</STRONG>, <STRONG>-a</STRONG>, <STRONG>-e</STRONG>,  <STRONG>-f</STRONG>,  <STRONG>-g</STRONG>,  <STRONG>-i</STRONG>,
-       <STRONG>-l</STRONG>,  <STRONG>-p</STRONG>,  <STRONG>-q</STRONG>  and  <STRONG>-t</STRONG>  options  are  not supported in SVr4
+       The <STRONG>-0</STRONG>, <STRONG>-1</STRONG>, <STRONG>-E</STRONG>, <STRONG>-F</STRONG>, <STRONG>-G</STRONG>, <STRONG>-Q</STRONG>, <STRONG>-R</STRONG>, <STRONG>-T</STRONG>, <STRONG>-V</STRONG>, <STRONG>-a</STRONG>,  <STRONG>-e</STRONG>,  <STRONG>-f</STRONG>,  <STRONG>-g</STRONG>,
+       <STRONG>-i</STRONG>,  <STRONG>-l</STRONG>,  <STRONG>-p</STRONG>,  <STRONG>-q</STRONG> and <STRONG>-t</STRONG> options are not supported in SVr4
        curses.
 
        The <STRONG>-r</STRONG> option's notion of `termcap' capabilities is System
 
        http://invisible-island.net/ncurses/tctest.html
 
-       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170128).
+       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170204).
 
 
 </PRE><H2><a name="h2-AUTHOR">AUTHOR</a></H2><PRE>
index dd58820d354ff7ef777c8e82a7710d4ced569e9a..b4b16bfb87f3e5839da4077e05f84e7492e7e293 100644 (file)
@@ -88,7 +88,7 @@
 </PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
        <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>, <STRONG><A HREF="tic.1m.html">tic(1m)</A></STRONG>, <STRONG><A HREF="infocmp.1m.html">infocmp(1m)</A></STRONG>, <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>
 
-       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170128).
+       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170204).
 
 
 </PRE><H2><a name="h2-AUTHOR">AUTHOR</a></H2><PRE>
index 3681f664671b4a2ce34dd27c9eb3b33d6eaccba4..767b344a5e53b67b18d7ac3b3b9a35ee7ec902e9 100644 (file)
        <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG> and related pages whose names begin "menu_" for
        detailed descriptions of the entry points.
 
-       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170128).
+       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170204).
 
 
 
index c7de750220e6c75bcff9ebec789f30fc1ad54fe2..753ccfebf6df2f9dc93c3050be721cd77233a956 100644 (file)
@@ -27,7 +27,7 @@
   * sale, use or other dealings in this Software without prior written       *
   * authorization.                                                           *
   ****************************************************************************
-  * @Id: ncurses.3x,v 1.125 2017/01/07 19:25:15 tom Exp @
+  * @Id: ncurses.3x,v 1.128 2017/02/05 00:33:02 tom Exp @
 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
 <HTML>
@@ -60,7 +60,7 @@
        sonable optimization.  This implementation is "new curses"
        (ncurses) and is the approved replacement for 4.4BSD clas-
        sic  curses,  which has been discontinued.  This describes
-       <STRONG>ncurses</STRONG> version 6.0 (patch 20170128).
+       <STRONG>ncurses</STRONG> version 6.0 (patch 20170204).
 
        The <STRONG>ncurses</STRONG> library emulates the curses library of  System
        V  Release  4  UNIX,  and  XPG4 (X/Open Portability Guide)
        The  library uses the locale which the calling program has
        initialized.  That is normally done with <STRONG>setlocale</STRONG>:
 
-             <STRONG>setlocale(LC_ALL,</STRONG> <STRONG>"");</STRONG>
-
-       If the locale is not initialized, the library assumes that
-       characters  are  printable  as in ISO-8859-1, to work with
-       certain legacy programs.  You should initialize the locale
-       and  not  rely on specific details of the library when the
-       locale has not been setup.
+               <STRONG>setlocale(LC_ALL,</STRONG> <STRONG>"");</STRONG>
+     If the locale is not initialized, the library  assumes  that
+     characters are printable as in ISO-8859-1, to work with cer-
+     tain legacy programs.  You should initialize the locale  and
+     not  rely on specific details of the library when the locale
+     has not been setup.
 
        The function <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG> must be called to initial-
        ize the library before any of the other routines that deal
        interactive, screen oriented programs want this), the fol-
        lowing sequence should be used:
 
-             <STRONG>initscr();</STRONG> <STRONG>cbreak();</STRONG> <STRONG>noecho();</STRONG>
-
-       Most programs would additionally use the sequence:
+               <STRONG>initscr();</STRONG> <STRONG>cbreak();</STRONG> <STRONG>noecho();</STRONG>
+     Most programs would additionally use the sequence:
 
              <STRONG>nonl();</STRONG>
              <STRONG>intrflush(stdscr,</STRONG> <STRONG>FALSE);</STRONG>
              <STRONG>keypad(stdscr,</STRONG> <STRONG>TRUE);</STRONG>
-
-       Before  a <STRONG>curses</STRONG> program is run, the tab stops of the ter-
-       minal should be set and  its  initialization  strings,  if
-       defined,  must  be  output.  This can be done by executing
-       the <STRONG>tput</STRONG> <STRONG>init</STRONG> command after the shell environment variable
-       <STRONG>TERM</STRONG>  has  been  exported.  <STRONG>tset(1)</STRONG> is usually responsible
-       for doing this.  [See <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG> for further details.]
+   Before  a <STRONG>curses</STRONG> program is run, the tab stops of the terminal
+   should be set and its initialization strings, if defined, must
+   be  output.   This can be done by executing the <STRONG>tput</STRONG> <STRONG>init</STRONG> com-
+   mand after  the  shell  environment  variable  <STRONG>TERM</STRONG>  has  been
+   exported.   <STRONG>tset(1)</STRONG>  is  usually  responsible  for doing this.
+   [See <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG> for further details.]
 
 
 </PRE><H3><a name="h3-Datatypes">Datatypes</a></H3><PRE>
        <STRONG>TERM</STRONG> is set to <STRONG>att4424</STRONG>, then the compiled terminal defini-
        tion is found in
 
-             <STRONG>/usr/share/terminfo/a/att4424</STRONG>.
-
-       (The <STRONG>a</STRONG> is copied from the first letter of <STRONG>att4424</STRONG> to avoid
-       creation of huge directories.)  However,  if  <STRONG>TERMINFO</STRONG>  is
-       set to <STRONG>$HOME/myterms</STRONG>, <STRONG>curses</STRONG> first checks
+               <STRONG>/usr/share/terminfo/a/att4424</STRONG>.
+     (The  <STRONG>a</STRONG>  is copied from the first letter of <STRONG>att4424</STRONG> to avoid
+     creation of huge directories.)  However, if <STRONG>TERMINFO</STRONG> is  set
+     to <STRONG>$HOME/myterms</STRONG>, <STRONG>curses</STRONG> first checks
 
              <STRONG>$HOME/myterms/a/att4424</STRONG>,
+   and if that fails, it then checks
 
-       and if that fails, it then checks
-
            <STRONG>/usr/share/terminfo/a/att4424</STRONG>.
+           <STRONG>/usr/share/terminfo/a/att4424</STRONG>.
+ This  is  useful for developing experimental definitions or when
write permission in <STRONG>/usr/share/terminfo</STRONG> is not available.
 
-       This  is useful for developing experimental definitions or
-       when write permission in <STRONG>/usr/share/terminfo</STRONG> is not avail-
-       able.
-
-       The  integer  variables  <STRONG>LINES</STRONG>  and  <STRONG>COLS</STRONG>  are  defined in
-       <STRONG>&lt;curses.h&gt;</STRONG> and will be filled in by <STRONG>initscr</STRONG> with the  size
+       The integer  variables  <STRONG>LINES</STRONG>  and  <STRONG>COLS</STRONG>  are  defined  in
+       <STRONG>&lt;curses.h&gt;</STRONG>  and will be filled in by <STRONG>initscr</STRONG> with the size
        of the screen.  The constants <STRONG>TRUE</STRONG> and <STRONG>FALSE</STRONG> have the val-
        ues <STRONG>1</STRONG> and <STRONG>0</STRONG>, respectively.
 
-       The <STRONG>curses</STRONG> routines also  define  the  <STRONG>WINDOW</STRONG>  <STRONG>*</STRONG>  variable
+       The  <STRONG>curses</STRONG>  routines  also  define  the <STRONG>WINDOW</STRONG> <STRONG>*</STRONG> variable
        <STRONG>curscr</STRONG> which is used for certain low-level operations like
-       clearing and redrawing a screen containing  garbage.   The
+       clearing  and  redrawing a screen containing garbage.  The
        <STRONG>curscr</STRONG> can be used in only a few routines.
 
 
 </PRE><H3><a name="h3-Routine-and-Argument-Names">Routine and Argument Names</a></H3><PRE>
-       Many  <STRONG>curses</STRONG> routines have two or more versions.  The rou-
+       Many <STRONG>curses</STRONG> routines have two or more versions.  The  rou-
        tines prefixed with <STRONG>w</STRONG> require a window argument.  The rou-
        tines prefixed with <STRONG>p</STRONG> require a pad argument.  Those with-
        out a prefix generally use <STRONG>stdscr</STRONG>.
 
        The routines prefixed with <STRONG>mv</STRONG> require a <EM>y</EM> and <EM>x</EM> coordinate
-       to  move to before performing the appropriate action.  The
-       <STRONG>mv</STRONG> routines imply a call to <STRONG>move</STRONG> before the  call  to  the
-       other  routine.  The coordinate <EM>y</EM> always refers to the row
-       (of the window), and <EM>x</EM> always refers to the  column.   The
+       to move to before performing the appropriate action.   The
+       <STRONG>mv</STRONG>  routines  imply  a call to <STRONG>move</STRONG> before the call to the
+       other routine.  The coordinate <EM>y</EM> always refers to the  row
+       (of  the  window), and <EM>x</EM> always refers to the column.  The
        upper left-hand corner is always (0,0), not (1,1).
 
        The routines prefixed with <STRONG>mvw</STRONG> take both a window argument
-       and <EM>x</EM> and <EM>y</EM> coordinates.  The window  argument  is  always
+       and  <EM>x</EM>  and  <EM>y</EM> coordinates.  The window argument is always
        specified before the coordinates.
 
-       In  each  case, <EM>win</EM> is the window affected, and <EM>pad</EM> is the
+       In each case, <EM>win</EM> is the window affected, and <EM>pad</EM>  is  the
        pad affected; <EM>win</EM> and <EM>pad</EM> are always pointers to type <STRONG>WIN-</STRONG>
        <STRONG>DOW</STRONG>.
 
        Option setting routines require a Boolean flag <EM>bf</EM> with the
-       value <STRONG>TRUE</STRONG> or <STRONG>FALSE</STRONG>; <EM>bf</EM> is always of type <STRONG>bool</STRONG>.   Most  of
-       the  data types used in the library routines, such as <STRONG>WIN-</STRONG>
-       <STRONG>DOW</STRONG>, <STRONG>SCREEN</STRONG>, <STRONG>bool</STRONG>, and <STRONG>chtype</STRONG> are defined  in  <STRONG>&lt;curses.h&gt;</STRONG>.
-       Types  used for the terminfo routines such as <STRONG>TERMINAL</STRONG> are
+       value  <STRONG>TRUE</STRONG>  or <STRONG>FALSE</STRONG>; <EM>bf</EM> is always of type <STRONG>bool</STRONG>.  Most of
+       the data types used in the library routines, such as  <STRONG>WIN-</STRONG>
+       <STRONG>DOW</STRONG>,  <STRONG>SCREEN</STRONG>,  <STRONG>bool</STRONG>, and <STRONG>chtype</STRONG> are defined in <STRONG>&lt;curses.h&gt;</STRONG>.
+       Types used for the terminfo routines such as <STRONG>TERMINAL</STRONG>  are
        defined in <STRONG>&lt;term.h&gt;</STRONG>.
 
-       This manual page describes functions which may  appear  in
-       any  configuration  of  the library.  There are two common
+       This  manual  page describes functions which may appear in
+       any configuration of the library.  There  are  two  common
        configurations of the library:
 
           <EM>ncurses</EM>
-               the "normal" library, which handles 8-bit  charac-
-               ters.   The  normal (8-bit) library stores charac-
+               the  "normal" library, which handles 8-bit charac-
+               ters.  The normal (8-bit) library  stores  charac-
                ters combined with attributes in <STRONG>chtype</STRONG> data.
 
-               Attributes alone (no corresponding character)  may
+               Attributes  alone (no corresponding character) may
                be stored in <STRONG>chtype</STRONG> or the equivalent <STRONG>attr_t</STRONG> data.
-               In either case, the data is  stored  in  something
+               In  either  case,  the data is stored in something
                like an integer.
 
-               Each  cell  (row and column) in a <STRONG>WINDOW</STRONG> is stored
+               Each cell (row and column) in a <STRONG>WINDOW</STRONG>  is  stored
                as a <STRONG>chtype</STRONG>.
 
           <EM>ncursesw</EM>
                the so-called "wide" library, which handles multi-
                byte characters (see the section on <STRONG>ALTERNATE</STRONG> <STRONG>CON-</STRONG>
-               <STRONG>FIGURATIONS</STRONG>).  The "wide" library includes all  of
-               the  calls  from  the  "normal"  library.  It adds
-               about one third more calls using data types  which
+               <STRONG>FIGURATIONS</STRONG>).   The "wide" library includes all of
+               the calls from  the  "normal"  library.   It  adds
+               about  one third more calls using data types which
                store multibyte characters:
 
                <STRONG>cchar_t</STRONG>
                     corresponds  to  <STRONG>chtype</STRONG>.   However  it  is  a
-                    structure, because more data is  stored  than
-                    can  fit into an integer.  The characters are
-                    large enough to require a full integer  value
-                    -  and  there  may be more than one character
+                    structure,  because  more data is stored than
+                    can fit into an integer.  The characters  are
+                    large  enough to require a full integer value
+                    - and there may be more  than  one  character
                     per cell.  The video attributes and color are
                     stored in separate fields of the structure.
 
-                    Each  cell  (row  and  column) in a <STRONG>WINDOW</STRONG> is
+                    Each cell (row and column)  in  a  <STRONG>WINDOW</STRONG>  is
                     stored as a <STRONG>cchar_t</STRONG>.
 
                <STRONG>wchar_t</STRONG>
                     may be an integer.
 
                <STRONG>wint_t</STRONG>
-                    stores  a  <STRONG>wchar_t</STRONG>  or  <STRONG>WEOF</STRONG>  - not the same,
+                    stores a <STRONG>wchar_t</STRONG> or  <STRONG>WEOF</STRONG>  -  not  the  same,
                     though both may have the same size.
 
-               The "wide" library provides  new  functions  which
-               are   analogous   to  functions  in  the  "normal"
+               The  "wide"  library  provides new functions which
+               are  analogous  to  functions  in   the   "normal"
                library.   There  is  a  naming  convention  which
-               relates  many  of the normal/wide variants: a "_w"
-               is inserted into the name.   For  example,  <STRONG>waddch</STRONG>
+               relates many of the normal/wide variants:  a  "_w"
+               is  inserted  into  the name.  For example, <STRONG>waddch</STRONG>
                becomes <STRONG>wadd_wch</STRONG>.
 
 
 </PRE><H3><a name="h3-Routine-Name-Index">Routine Name Index</a></H3><PRE>
        The following table lists each <STRONG>curses</STRONG> routine and the name
-       of the manual page on which  it  is  described.   Routines
-       flagged  with  `*'  are ncurses-specific, not described by
+       of  the  manual  page  on which it is described.  Routines
+       flagged with `*' are ncurses-specific,  not  described  by
        XPG4 or present in SVr4.
 
               <STRONG>curses</STRONG> Routine Name     Manual Page Name
               _traceattr              <STRONG><A HREF="curs_trace.3x.html">curs_trace(3x)</A></STRONG>*
               _traceattr2             <STRONG><A HREF="curs_trace.3x.html">curs_trace(3x)</A></STRONG>*
               _tracechar              <STRONG><A HREF="curs_trace.3x.html">curs_trace(3x)</A></STRONG>*
-
               _tracechtype            <STRONG><A HREF="curs_trace.3x.html">curs_trace(3x)</A></STRONG>*
               _tracechtype2           <STRONG><A HREF="curs_trace.3x.html">curs_trace(3x)</A></STRONG>*
               _tracedump              <STRONG><A HREF="curs_trace.3x.html">curs_trace(3x)</A></STRONG>*
               _tracef                 <STRONG><A HREF="curs_trace.3x.html">curs_trace(3x)</A></STRONG>*
+
               _tracemouse             <STRONG><A HREF="curs_trace.3x.html">curs_trace(3x)</A></STRONG>*
               add_wch                 <STRONG><A HREF="curs_add_wch.3x.html">curs_add_wch(3x)</A></STRONG>
               add_wchnstr             <STRONG><A HREF="curs_add_wchstr.3x.html">curs_add_wchstr(3x)</A></STRONG>
               erasewchar              <STRONG><A HREF="curs_termattrs.3x.html">curs_termattrs(3x)</A></STRONG>
               filter                  <STRONG><A HREF="curs_util.3x.html">curs_util(3x)</A></STRONG>
               flash                   <STRONG><A HREF="curs_beep.3x.html">curs_beep(3x)</A></STRONG>
-
               flushinp                <STRONG><A HREF="curs_util.3x.html">curs_util(3x)</A></STRONG>
               get_wch                 <STRONG><A HREF="curs_get_wch.3x.html">curs_get_wch(3x)</A></STRONG>
               get_wstr                <STRONG><A HREF="curs_get_wstr.3x.html">curs_get_wstr(3x)</A></STRONG>
+
               getattrs                <STRONG><A HREF="curs_attr.3x.html">curs_attr(3x)</A></STRONG>
               getbegx                 <STRONG><A HREF="curs_legacy.3x.html">curs_legacy(3x)</A></STRONG>*
               getbegy                 <STRONG><A HREF="curs_legacy.3x.html">curs_legacy(3x)</A></STRONG>*
               is_leaveok              <STRONG><A HREF="curs_opaque.3x.html">curs_opaque(3x)</A></STRONG>*
               is_linetouched          <STRONG><A HREF="curs_touch.3x.html">curs_touch(3x)</A></STRONG>
               is_nodelay              <STRONG><A HREF="curs_opaque.3x.html">curs_opaque(3x)</A></STRONG>*
-
               is_notimeout            <STRONG><A HREF="curs_opaque.3x.html">curs_opaque(3x)</A></STRONG>*
               is_pad                  <STRONG><A HREF="curs_opaque.3x.html">curs_opaque(3x)</A></STRONG>*
+
               is_scrollok             <STRONG><A HREF="curs_opaque.3x.html">curs_opaque(3x)</A></STRONG>*
               is_subwin               <STRONG><A HREF="curs_opaque.3x.html">curs_opaque(3x)</A></STRONG>*
               is_syncok               <STRONG><A HREF="curs_opaque.3x.html">curs_opaque(3x)</A></STRONG>*
               mvscanw                 <STRONG><A HREF="curs_scanw.3x.html">curs_scanw(3x)</A></STRONG>
               mvvline                 <STRONG><A HREF="curs_border.3x.html">curs_border(3x)</A></STRONG>
               mvvline_set             <STRONG><A HREF="curs_border_set.3x.html">curs_border_set(3x)</A></STRONG>
-
               mvwadd_wch              <STRONG><A HREF="curs_add_wch.3x.html">curs_add_wch(3x)</A></STRONG>
+
               mvwadd_wchnstr          <STRONG><A HREF="curs_add_wchstr.3x.html">curs_add_wchstr(3x)</A></STRONG>
               mvwadd_wchstr           <STRONG><A HREF="curs_add_wchstr.3x.html">curs_add_wchstr(3x)</A></STRONG>
               mvwaddch                <STRONG><A HREF="curs_addch.3x.html">curs_addch(3x)</A></STRONG>
               tputs                   <STRONG><A HREF="curs_termcap.3x.html">curs_termcap(3x)</A></STRONG>
               tputs                   <STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3x)</A></STRONG>
               trace                   <STRONG><A HREF="curs_trace.3x.html">curs_trace(3x)</A></STRONG>*
-              typeahead               <STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3x)</A></STRONG>
 
+              typeahead               <STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3x)</A></STRONG>
               unctrl                  <STRONG><A HREF="curs_util.3x.html">curs_util(3x)</A></STRONG>
               unget_wch               <STRONG><A HREF="curs_get_wch.3x.html">curs_get_wch(3x)</A></STRONG>
               ungetch                 <STRONG><A HREF="curs_getch.3x.html">curs_getch(3x)</A></STRONG>
               wgetnstr                <STRONG><A HREF="curs_getstr.3x.html">curs_getstr(3x)</A></STRONG>
               wgetparent              <STRONG><A HREF="curs_opaque.3x.html">curs_opaque(3x)</A></STRONG>*
               wgetscrreg              <STRONG><A HREF="curs_opaque.3x.html">curs_opaque(3x)</A></STRONG>*
+
               wgetstr                 <STRONG><A HREF="curs_getstr.3x.html">curs_getstr(3x)</A></STRONG>
               whline                  <STRONG><A HREF="curs_border.3x.html">curs_border(3x)</A></STRONG>
-
               whline_set              <STRONG><A HREF="curs_border_set.3x.html">curs_border_set(3x)</A></STRONG>
               win_wch                 <STRONG><A HREF="curs_in_wch.3x.html">curs_in_wch(3x)</A></STRONG>
               win_wchnstr             <STRONG><A HREF="curs_in_wchstr.3x.html">curs_in_wchstr(3x)</A></STRONG>
 
 
 </PRE><H2><a name="h2-RETURN-VALUE">RETURN VALUE</a></H2><PRE>
-       Routines that return an integer return  <STRONG>ERR</STRONG>  upon  failure
-       and  an  integer value other than <STRONG>ERR</STRONG> upon successful com-
-       pletion, unless otherwise noted in  the  routine  descrip-
+       Routines  that  return  an integer return <STRONG>ERR</STRONG> upon failure
+       and an integer value other than <STRONG>ERR</STRONG> upon  successful  com-
+       pletion,  unless  otherwise  noted in the routine descrip-
        tions.
 
        As a general rule, routines check for null pointers passed
        as parameters, and handle this as an error.
 
-       All macros return the  value  of  the  <STRONG>w</STRONG>  version,  except
+       All  macros  return  the  value  of  the <STRONG>w</STRONG> version, except
        <STRONG>setscrreg</STRONG>, <STRONG>wsetscrreg</STRONG>, <STRONG>getyx</STRONG>, <STRONG>getbegyx</STRONG>, and <STRONG>getmaxyx</STRONG>.  The
-       return values of <STRONG>setscrreg</STRONG>, <STRONG>wsetscrreg</STRONG>,  <STRONG>getyx</STRONG>,  <STRONG>getbegyx</STRONG>,
+       return  values  of <STRONG>setscrreg</STRONG>, <STRONG>wsetscrreg</STRONG>, <STRONG>getyx</STRONG>, <STRONG>getbegyx</STRONG>,
        and <STRONG>getmaxyx</STRONG> are undefined (i.e., these should not be used
        as the right-hand side of assignment statements).
 
        important ones have been already discussed in detail.
 
    <STRONG>CC</STRONG>
-       When set,  change  occurrences  of  the  command_character
+       When  set,  change  occurrences  of  the command_character
        (i.e.,  the  <STRONG>cmdch</STRONG>  capability)  of  the  loaded  terminfo
-       entries to the value of this variable.  Very few  terminfo
+       entries  to the value of this variable.  Very few terminfo
        entries provide this feature.
 
        Because this name is also used in development environments
-       to represent the C compiler's name, <STRONG>ncurses</STRONG> ignores it  if
+       to  represent the C compiler's name, <STRONG>ncurses</STRONG> ignores it if
        it does not happen to be a single character.
 
 
 </PRE><H3><a name="h3-BAUDRATE">BAUDRATE</a></H3><PRE>
-       The  debugging  library  checks  this environment variable
+       The debugging library  checks  this  environment  variable
        when the application has redirected output to a file.  The
-       variable's  numeric value is used for the baudrate.  If no
+       variable's numeric value is used for the baudrate.  If  no
        value is found, <STRONG>ncurses</STRONG> uses 9600.  This allows testers to
-       construct  repeatable  test-cases  that  take into account
+       construct repeatable test-cases  that  take  into  account
        costs that depend on baudrate.
 
 
 </PRE><H3><a name="h3-COLUMNS">COLUMNS</a></H3><PRE>
-       Specify the width of the screen in  characters.   Applica-
-       tions  running in a windowing environment usually are able
-       to obtain the width of the window in which they  are  exe-
-       cuting.   If  neither the <STRONG>COLUMNS</STRONG> value nor the terminal's
-       screen size is available, <STRONG>ncurses</STRONG> uses the size which  may
-       be  specified  in  the  terminfo  database (i.e., the <STRONG>cols</STRONG>
+       Specify  the  width of the screen in characters.  Applica-
+       tions running in a windowing environment usually are  able
+       to  obtain  the width of the window in which they are exe-
+       cuting.  If neither the <STRONG>COLUMNS</STRONG> value nor  the  terminal's
+       screen  size is available, <STRONG>ncurses</STRONG> uses the size which may
+       be specified in the  terminfo  database  (i.e.,  the  <STRONG>cols</STRONG>
        capability).
 
-       It is important that your application use a  correct  size
-       for  the screen.  This is not always possible because your
-       application may be running on a host which does not  honor
-       NAWS  (Negotiations About Window Size), or because you are
-       temporarily running as  another  user.   However,  setting
-       <STRONG>COLUMNS</STRONG>  and/or  <STRONG>LINES</STRONG>  overrides the library's use of the
+       It  is  important that your application use a correct size
+       for the screen.  This is not always possible because  your
+       application  may be running on a host which does not honor
+       NAWS (Negotiations About Window Size), or because you  are
+       temporarily  running  as  another  user.  However, setting
+       <STRONG>COLUMNS</STRONG> and/or <STRONG>LINES</STRONG> overrides the library's  use  of  the
        screen size obtained from the operating system.
 
-       Either <STRONG>COLUMNS</STRONG> or <STRONG>LINES</STRONG> symbols may be specified  indepen-
-       dently.   This  is mainly useful to circumvent legacy mis-
-       features of terminal descriptions, e.g., xterm which  com-
+       Either  <STRONG>COLUMNS</STRONG> or <STRONG>LINES</STRONG> symbols may be specified indepen-
+       dently.  This is mainly useful to circumvent  legacy  mis-
+       features  of terminal descriptions, e.g., xterm which com-
        monly specifies a 65 line screen.  For best results, <STRONG>lines</STRONG>
        and <STRONG>cols</STRONG> should not be specified in a terminal description
        for terminals which are run as emulations.
 
-       Use  the  <STRONG>use_env</STRONG>  function to disable all use of external
-       environment (but not including system calls) to  determine
-       the  screen  size.   Use the <STRONG>use_tioctl</STRONG> function to update
-       <STRONG>COLUMNS</STRONG> or <STRONG>LINES</STRONG> to match the screen  size  obtained  from
+       Use the <STRONG>use_env</STRONG> function to disable all  use  of  external
+       environment  (but not including system calls) to determine
+       the screen size.  Use the <STRONG>use_tioctl</STRONG>  function  to  update
+       <STRONG>COLUMNS</STRONG>  or  <STRONG>LINES</STRONG>  to match the screen size obtained from
        system calls or the terminal database.
 
 
 </PRE><H3><a name="h3-ESCDELAY">ESCDELAY</a></H3><PRE>
-       Specifies  the  total  time,  in  milliseconds,  for which
-       ncurses will await a character sequence, e.g., a  function
-       key.   The default value, 1000 milliseconds, is enough for
-       most uses.  However, it is made a variable to  accommodate
+       Specifies the  total  time,  in  milliseconds,  for  which
+       ncurses  will await a character sequence, e.g., a function
+       key.  The default value, 1000 milliseconds, is enough  for
+       most  uses.  However, it is made a variable to accommodate
        unusual applications.
 
        The most common instance where you may wish to change this
-       value is to work with slow hosts, e.g., running on a  net-
-       work.   If the host cannot read characters rapidly enough,
-       it will have the same effect as if the  terminal  did  not
-       send  characters  rapidly  enough.  The library will still
+       value  is to work with slow hosts, e.g., running on a net-
+       work.  If the host cannot read characters rapidly  enough,
+       it  will  have  the same effect as if the terminal did not
+       send characters rapidly enough.  The  library  will  still
        see a timeout.
 
-       Note that xterm mouse events are built up  from  character
-       sequences  received  from  the xterm.  If your application
-       makes heavy use of  multiple-clicking,  you  may  wish  to
+       Note  that  xterm mouse events are built up from character
+       sequences received from the xterm.   If  your  application
+       makes  heavy  use  of  multiple-clicking,  you may wish to
        lengthen this default value because the timeout applies to
-       the composed multi-click event as well as  the  individual
+       the  composed  multi-click event as well as the individual
        clicks.
 
-       In  addition to the environment variable, this implementa-
-       tion provides a global variable with the same name.   Por-
-       table  applications  should  not rely upon the presence of
+       In addition to the environment variable, this  implementa-
+       tion  provides a global variable with the same name.  Por-
+       table applications should not rely upon  the  presence  of
        ESCDELAY in either form, but setting the environment vari-
        able rather than the global variable does not create prob-
        lems when compiling an application.
 
 
 </PRE><H3><a name="h3-LINES">LINES</a></H3><PRE>
-       Like  COLUMNS, specify the height of the screen in charac-
+       Like COLUMNS, specify the height of the screen in  charac-
        ters.  See COLUMNS for a detailed description.
 
 
 </PRE><H3><a name="h3-MOUSE_BUTTONS_123">MOUSE_BUTTONS_123</a></H3><PRE>
-       This applies only to the OS/2 EMX port.  It specifies  the
-       order  of  buttons  on the mouse.  OS/2 numbers a 3-button
+       This  applies only to the OS/2 EMX port.  It specifies the
+       order of buttons on the mouse.  OS/2  numbers  a  3-button
        mouse inconsistently from other platforms:
 
        1 = left
        2 = right
        3 = middle.
 
-       This variable lets you customize the mouse.  The  variable
-       must  be  three numeric digits 1-3 in any order, e.g., 123
+       This  variable lets you customize the mouse.  The variable
+       must be three numeric digits 1-3 in any order,  e.g.,  123
        or 321.  If it is not specified, <STRONG>ncurses</STRONG> uses 132.
 
 
 </PRE><H3><a name="h3-NCURSES_ASSUMED_COLORS">NCURSES_ASSUMED_COLORS</a></H3><PRE>
-       Override the compiled-in assumption  that  the  terminal's
-       default   colors   are  white-on-black  (see  <STRONG>default_col-</STRONG>
+       Override  the  compiled-in  assumption that the terminal's
+       default  colors  are  white-on-black   (see   <STRONG>default_col-</STRONG>
        <STRONG><A HREF="default_colors.3x.html">ors(3x)</A></STRONG>).  You may set the foreground and background color
-       values  with this environment variable by proving a 2-ele-
-       ment list: foreground,background.  For  example,  to  tell
-       ncurses  to not assume anything about the colors, set this
-       to "-1,-1".  To make it green-on-black, set it  to  "2,0".
-       Any  positive  value  from zero to the terminfo <STRONG>max_colors</STRONG>
+       values with this environment variable by proving a  2-ele-
+       ment  list:  foreground,background.   For example, to tell
+       ncurses to not assume anything about the colors, set  this
+       to  "-1,-1".   To make it green-on-black, set it to "2,0".
+       Any positive value from zero to  the  terminfo  <STRONG>max_colors</STRONG>
        value is allowed.
 
 
 </PRE><H3><a name="h3-NCURSES_CONSOLE2">NCURSES_CONSOLE2</a></H3><PRE>
        This applies only to the MinGW port of ncurses.
 
-       The <STRONG>Console2</STRONG> program's handling of the  Microsoft  Console
+       The  <STRONG>Console2</STRONG>  program's handling of the Microsoft Console
        API call <STRONG>CreateConsoleScreenBuffer</STRONG> is defective.  Applica-
-       tions which use this will hang.  However, it  is  possible
-       to  simulate  the  action  of this call by mapping coordi-
+       tions  which  use this will hang.  However, it is possible
+       to simulate the action of this  call  by  mapping  coordi-
        nates, explicitly saving and restoring the original screen
-       contents.   Setting the environment variable <STRONG>NCGDB</STRONG> has the
+       contents.  Setting the environment variable <STRONG>NCGDB</STRONG> has  the
        same effect.
 
 
 </PRE><H3><a name="h3-NCURSES_GPM_TERMS">NCURSES_GPM_TERMS</a></H3><PRE>
-       This applies only to ncurses configured  to  use  the  GPM
+       This  applies  only  to  ncurses configured to use the GPM
        interface.
 
-       If  present,  the environment variable is a list of one or
-       more terminal names against  which  the  TERM  environment
-       variable  is  matched.   Setting it to an empty value dis-
-       ables the GPM interface; using the  built-in  support  for
+       If present, the environment variable is a list of  one  or
+       more  terminal  names  against  which the <STRONG>TERM</STRONG> environment
+       variable is matched.  Setting it to an  empty  value  dis-
+       ables  the  GPM  interface; using the built-in support for
        xterm, etc.
 
        If  the  environment  variable  is  absent,  ncurses  will
-       attempt to open GPM if TERM contains "linux".
+       attempt to open GPM if <STRONG>TERM</STRONG> contains "linux".
 
 
 </PRE><H3><a name="h3-NCURSES_NO_HARD_TABS">NCURSES_NO_HARD_TABS</a></H3><PRE>
-       <STRONG>Ncurses</STRONG> may use tabs as part of the cursor movement  opti-
-       mization.   In  some  cases,  your terminal driver may not
-       handle these properly.  Set this environment  variable  to
-       disable  the  feature.  You can also adjust your <STRONG>stty</STRONG> set-
-       tings to avoid the problem.  NCURSES_NO_MAGIC_COOKIE  Some
-       terminals  use  a magic-cookie feature which requires spe-
-       cial  handling  to  make  highlighting  and  other   video
-       attributes  display  properly.  You can suppress the high-
-       lighting entirely for  these  terminals  by  setting  this
+       <STRONG>Ncurses</STRONG>  may use tabs as part of the cursor movement opti-
+       mization.  In some cases, your  terminal  driver  may  not
+       handle  these  properly.  Set this environment variable to
+       disable the feature.  You can also adjust your  <STRONG>stty</STRONG>  set-
+       tings  to avoid the problem.  NCURSES_NO_MAGIC_COOKIE Some
+       terminals use a magic-cookie feature which  requires  spe-
+       cial   handling  to  make  highlighting  and  other  video
+       attributes display properly.  You can suppress  the  high-
+       lighting  entirely  for  these  terminals  by setting this
        environment variable.
 
 
 </PRE><H3><a name="h3-NCURSES_NO_PADDING">NCURSES_NO_PADDING</a></H3><PRE>
        Most of the terminal descriptions in the terminfo database
-       are written for real "hardware"  terminals.   Many  people
-       use  terminal  emulators which run in a windowing environ-
-       ment and use curses-based applications.   Terminal  emula-
+       are  written  for  real "hardware" terminals.  Many people
+       use terminal emulators which run in a  windowing  environ-
+       ment  and  use curses-based applications.  Terminal emula-
        tors can duplicate all of the important aspects of a hard-
-       ware terminal, but they do not have the same  limitations.
-       The  chief  limitation  of  a  hardware  terminal from the
+       ware  terminal, but they do not have the same limitations.
+       The chief limitation  of  a  hardware  terminal  from  the
        standpoint  of  your  application  is  the  management  of
-       dataflow,  i.e.,  timing.   Unless  a hardware terminal is
-       interfaced into a terminal concentrator (which  does  flow
-       control),  it  (or your application) must manage dataflow,
-       preventing overruns.  The cheapest solution  (no  hardware
-       cost)  is  for  your  program  to do this by pausing after
+       dataflow, i.e., timing.  Unless  a  hardware  terminal  is
+       interfaced  into  a terminal concentrator (which does flow
+       control), it (or your application) must  manage  dataflow,
+       preventing  overruns.   The cheapest solution (no hardware
+       cost) is for your program to  do  this  by  pausing  after
        operations that the terminal does slowly, such as clearing
        the display.
 
-       As  a  result,  many  terminal descriptions (including the
-       vt100) have delay times embedded.  You  may  wish  to  use
-       these  descriptions,  but  not want to pay the performance
+       As a result, many  terminal  descriptions  (including  the
+       vt100)  have  delay  times  embedded.  You may wish to use
+       these descriptions, but not want to  pay  the  performance
        penalty.
 
        Set the NCURSES_NO_PADDING environment variable to disable
 
           <STRONG>o</STRONG>   continued though 5.9 patch 20130126
 
-       <STRONG>ncurses</STRONG> enabled buffered output during  terminal  initial-
-       ization.   This  was  done (as in SVr4 curses) for perfor-
-       mance reasons.  For testing purposes, both of <STRONG>ncurses</STRONG>  and
-       certain  applications,  this  feature  was  made optional.
-       Setting the  NCURSES_NO_SETBUF  variable  disabled  output
-       buffering,  leaving  the  output  in the original (usually
+       <STRONG>ncurses</STRONG>  enabled  buffered output during terminal initial-
+       ization.  This was done (as in SVr4  curses)  for  perfor-
+       mance  reasons.  For testing purposes, both of <STRONG>ncurses</STRONG> and
+       certain applications,  this  feature  was  made  optional.
+       Setting  the  NCURSES_NO_SETBUF  variable  disabled output
+       buffering, leaving the output  in  the  original  (usually
        line buffered) mode.
 
-       In the current implementation, ncurses  performs  its  own
-       buffering  and  does not require this workaround.  It does
+       In  the  current  implementation, ncurses performs its own
+       buffering and does not require this workaround.   It  does
        not modify the buffering of the standard output.
 
-       The reason for the change was to  make  the  behavior  for
+       The  reason  for  the  change was to make the behavior for
        interrupts and other signals more robust.  One drawback is
-       that certain nonconventional programs would  mix  ordinary
-       stdio  calls  with ncurses calls and (usually) work.  This
-       is no longer possible  since  ncurses  is  not  using  the
-       buffered  standard  output but its own output (to the same
-       file descriptor).  As a special case, the low-level  calls
-       such  as  <STRONG>putp</STRONG>  still  use the standard output.  But high-
+       that  certain  nonconventional programs would mix ordinary
+       stdio calls with ncurses calls and (usually)  work.   This
+       is  no  longer  possible  since  ncurses  is not using the
+       buffered standard output but its own output (to  the  same
+       file  descriptor).  As a special case, the low-level calls
+       such as <STRONG>putp</STRONG> still use the  standard  output.   But  high-
        level curses calls do not.
 
 
 </PRE><H3><a name="h3-NCURSES_NO_UTF8_ACS">NCURSES_NO_UTF8_ACS</a></H3><PRE>
        During initialization, the <STRONG>ncurses</STRONG> library checks for spe-
        cial cases where VT100 line-drawing (and the corresponding
-       alternate character set  capabilities)  described  in  the
+       alternate  character  set  capabilities)  described in the
        terminfo are known to be missing.  Specifically, when run-
        ning in a UTF-8 locale, the Linux console emulator and the
-       GNU  screen program ignore these.  Ncurses checks the TERM
-       environment variable for these.  For other special  cases,
-       you  should  set  this  environment  variable.  Doing this
-       tells ncurses to use Unicode values  which  correspond  to
+       GNU screen program ignore these.  Ncurses checks the  <STRONG>TERM</STRONG>
+       environment  variable for these.  For other special cases,
+       you should set  this  environment  variable.   Doing  this
+       tells  ncurses  to  use Unicode values which correspond to
        the VT100 line-drawing glyphs.  That works for the special
        cases cited, and is likely to work for terminal emulators.
 
        When setting this variable, you should set it to a nonzero
-       value.   Setting  it  to zero (or to a nonnumber) disables
+       value.  Setting it to zero (or to  a  nonnumber)  disables
        the special check for "linux" and "screen".
 
-       As an alternative to  the  environment  variable,  ncurses
-       checks  for an extended terminfo capability <STRONG>U8</STRONG>.  This is a
-       numeric capability which can  be  compiled  using  <STRONG>tic</STRONG> <STRONG>-x</STRONG>.
+       As  an  alternative  to  the environment variable, ncurses
+       checks for an extended terminfo capability <STRONG>U8</STRONG>.  This is  a
+       numeric  capability  which  can  be compiled using <STRONG>tic</STRONG> <STRONG>-x</STRONG>.
        For example
 
           # linux console, if patched to provide working
                   U8#1, use=xterm,
 
        The name "U8" is chosen to be two characters, to permit it
-       to be used  by  applications  that  use  ncurses'  termcap
+       to  be  used  by  applications  that  use ncurses' termcap
        interface.
 
 
 </PRE><H3><a name="h3-NCURSES_TRACE">NCURSES_TRACE</a></H3><PRE>
-       During   initialization,  the  <STRONG>ncurses</STRONG>  debugging  library
-       checks the NCURSES_TRACE environment variable.  If  it  is
+       During  initialization,  the  <STRONG>ncurses</STRONG>  debugging   library
+       checks  the  NCURSES_TRACE environment variable.  If it is
        defined, to a numeric value, <STRONG>ncurses</STRONG> calls the <STRONG>trace</STRONG> func-
        tion, using that value as the argument.
 
-       The argument values, which are defined in  <STRONG>curses.h</STRONG>,  pro-
-       vide  several  types  of  information.   When running with
+       The  argument  values, which are defined in <STRONG>curses.h</STRONG>, pro-
+       vide several types  of  information.   When  running  with
        traces enabled, your application will write the file <STRONG>trace</STRONG>
        to the current directory.
 
 
 
 </PRE><H3><a name="h3-TERM">TERM</a></H3><PRE>
-       Denotes  your  terminal  type.  Each terminal type is dis-
+       Denotes your terminal type.  Each terminal  type  is  dis-
        tinct, though many are similar.
 
-       <STRONG>TERM</STRONG> is commonly set by terminal emulators to help  appli-
-       cations  find  a  workable  terminal description.  Some of
-       those  choose  a  popular  approximation,  e.g.,   "ansi",
-       "vt100",  "xterm"  rather  than  an exact fit.  Not infre-
-       quently, your application will  have  problems  with  that
+       <STRONG>TERM</STRONG>  is commonly set by terminal emulators to help appli-
+       cations find a workable  terminal  description.   Some  of
+       those   choose  a  popular  approximation,  e.g.,  "ansi",
+       "vt100", "xterm" rather than an  exact  fit.   Not  infre-
+       quently,  your  application  will  have problems with that
        approach, e.g., incorrect function-key definitions.
 
-       If  you  set <STRONG>TERM</STRONG> in your environment, it has no effect on
-       the operation of the terminal emulator.  It  only  affects
-       the  way applications work within the terminal.  Likewise,
+       If you set <STRONG>TERM</STRONG> in your environment, it has no  effect  on
+       the  operation  of the terminal emulator.  It only affects
+       the way applications work within the terminal.   Likewise,
        as a general rule (<STRONG>xterm</STRONG> being a rare exception), terminal
-       emulators  which  allow you to specify <STRONG>TERM</STRONG> as a parameter
-       or configuration value do not  change  their  behavior  to
+       emulators which allow you to specify <STRONG>TERM</STRONG> as  a  parameter
+       or  configuration  value  do  not change their behavior to
        match that setting.
 
 
 </PRE><H3><a name="h3-TERMCAP">TERMCAP</a></H3><PRE>
-       If  the  <STRONG>ncurses</STRONG>  library has been configured with <EM>termcap</EM>
-       support, <STRONG>ncurses</STRONG> will check for a  terminal's  description
-       in  termcap  form  if  it is not available in the terminfo
+       If the <STRONG>ncurses</STRONG> library has been  configured  with  <EM>termcap</EM>
+       support,  <STRONG>ncurses</STRONG>  will check for a terminal's description
+       in termcap form if it is not  available  in  the  terminfo
        database.
 
-       The TERMCAP environment variable contains either a  termi-
-       nal  description  (with  newlines stripped out), or a file
-       name telling where the information  denoted  by  the  TERM
-       environment  variable  exists.  In either case, setting it
-       directs <STRONG>ncurses</STRONG> to ignore the usual place for this  infor-
+       The  <STRONG>TERMCAP</STRONG> environment variable contains either a termi-
+       nal description (with newlines stripped out),  or  a  file
+       name  telling  where  the  information denoted by the <STRONG>TERM</STRONG>
+       environment variable exists.  In either case,  setting  it
+       directs  <STRONG>ncurses</STRONG> to ignore the usual place for this infor-
        mation, e.g., /etc/termcap.
 
 
 </PRE><H3><a name="h3-TERMINFO">TERMINFO</a></H3><PRE>
-       Overrides the directory in which <STRONG>ncurses</STRONG> searches for your
-       terminal description.  This is the simplest, but  not  the
-       only  way to change the list of directories.  The complete
-       list of directories in order follows:
+       <STRONG>ncurses</STRONG> can be configured to read from  multiple  terminal
+       databases.   The  <STRONG>TERMINFO</STRONG> variable overrides the location
+       for the default terminal database.  Terminal  descriptions
+       (in terminal format) are stored in terminal databases:
 
-          <STRONG>o</STRONG>   the last directory to which <STRONG>ncurses</STRONG> wrote, if  any,
-              is searched first
+       <STRONG>o</STRONG>   Normally  these  are stored in a directory tree, using
+           subdirectories named by the first letter of the termi-
+           nal names therein.
 
-          <STRONG>o</STRONG>   the directory specified by the TERMINFO environment
+           This is the scheme used in System V, which legacy Unix
+           systems use, and the  <STRONG>TERMINFO</STRONG>  variable  is  used  by
+           <EM>curses</EM>  applications  on those systems to override the
+           default location of the terminal database.
+
+       <STRONG>o</STRONG>   If <STRONG>ncurses</STRONG> is built to use hashed databases, then each
+           entry  in  this list may be the path of a hashed data-
+           base file, e.g.,
+
+             /usr/share/terminfo.db
+
+           rather than
+
+             /usr/share/terminfo/
+
+           The hashed database uses less disk-space and is a lit-
+           tle  faster  than  the  directory tree.  However, some
+           applications assume the  existence  of  the  directory
+           tree,  reading  it directly rather than using the ter-
+           minfo library calls.
+
+       <STRONG>o</STRONG>   If <STRONG>ncurses</STRONG> is built with a support for reading termcap
+           files  directly, then an entry in this list may be the
+           path of a termcap file.
+
+       <STRONG>o</STRONG>   If the <STRONG>TERMINFO</STRONG> variable begins with "hex:" or "b64:",
+           <STRONG>ncurses</STRONG>  uses the remainder of that variable as a com-
+           piled terminal description.   You  might  produce  the
+           base64 format using <STRONG><A HREF="infocmp.1m.html">infocmp(1m)</A></STRONG>:
+
+             TERMINFO="$(infocmp -0 -Q2 -q)"
+             export TERMINFO
+
+           The  compiled description is used if it corresponds to
+           the terminal identified by the <STRONG>TERM</STRONG> variable.
+
+       Setting <STRONG>TERMINFO</STRONG> is the simplest, but not the only way  to
+       set  location  of the default terminal database.  The com-
+       plete list of database locations in order follows:
+
+          <STRONG>o</STRONG>   the last terminal database to which <STRONG>ncurses</STRONG>  wrote,
+              if any, is searched first
+
+          <STRONG>o</STRONG>   the  location specified by the TERMINFO environment
               variable
 
           <STRONG>o</STRONG>   $HOME/.terminfo
 
-          <STRONG>o</STRONG>   directories listed in the TERMINFO_DIRS environment
+          <STRONG>o</STRONG>   locations listed in the  TERMINFO_DIRS  environment
               variable
 
-          <STRONG>o</STRONG>   one  or more directories whose names are configured
+          <STRONG>o</STRONG>   one  or  more  locations whose names are configured
               and compiled into the ncurses library, i.e.,
 
              <STRONG>o</STRONG>   /usr/local/ncurses/share/ter-
 
 
 </PRE><H3><a name="h3-TERMINFO_DIRS">TERMINFO_DIRS</a></H3><PRE>
-       Specifies  a  list  of  directories to search for terminal
-       descriptions.  The list is separated by colons (i.e., ":")
-       on Unix, semicolons on OS/2 EMX.
-
-       All  of  the  terminal  descriptions are in terminfo form.
-       Normally these are stored in a directory tree, using  sub-
-       directories  named  by  the  first  letter of the terminal
-       names therein.
-
-       If <STRONG>ncurses</STRONG> is built with  a  hashed  database,  then  each
-       entry in this list can also be the path of the correspond-
-       ing database file.
+       Specifies  a  list  of  locations  to  search for terminal
+       descriptions.  Each location in the  list  is  a  terminal
+       database as described in the section on the <STRONG>TERMINFO</STRONG> vari-
+       able.  The list is separated  by  colons  (i.e.,  ":")  on
+       Unix, semicolons on OS/2 EMX.
 
-       If <STRONG>ncurses</STRONG> is built with a  support  for  reading  termcap
-       files directly, then an entry in this list may be the path
-       of a termcap file.
+       There is no corresponding feature in System V terminfo; it
+       is an extension developed for <STRONG>ncurses</STRONG>.
 
 
 </PRE><H3><a name="h3-TERMPATH">TERMPATH</a></H3><PRE>
-       If TERMCAP does not hold a file name then  <STRONG>ncurses</STRONG>  checks
-       the  TERMPATH  environment  variable.   This  is a list of
+       If <STRONG>TERMCAP</STRONG> does not hold a file name then  <STRONG>ncurses</STRONG>  checks
+       the  <STRONG>TERMPATH</STRONG>  environment  variable.   This  is a list of
        filenames separated by spaces or  colons  (i.e.,  ":")  on
        Unix, semicolons on OS/2 EMX.
 
-       If  the  TERMPATH environment variable is not set, <STRONG>ncurses</STRONG>
-       looks in the files  /etc/termcap,  /usr/share/misc/termcap
-       and $HOME/.termcap, in that order.
+       If  the  <STRONG>TERMPATH</STRONG> environment variable is not set, <STRONG>ncurses</STRONG>
+       looks in the files
+
+         /etc/termcap, /usr/share/misc/termcap and $HOME/.termcap,
+
+       in that order.
 
-       The  library  may be configured to disregard the following
-       variables when the current user is the  superuser  (root),
+       The library may be configured to disregard  the  following
+       variables  when  the current user is the superuser (root),
        or if the application uses setuid or setgid permissions:
 
-       $TERMINFO, $TERMINFO_DIRS, $TERMPATH, as well as $HOME.
+         $TERMINFO, $TERMINFO_DIRS, $TERMPATH, as well as $HOME.
 
 
 </PRE><H2><a name="h2-ALTERNATE-CONFIGURATIONS">ALTERNATE CONFIGURATIONS</a></H2><PRE>
-       Several  different  configurations are possible, depending
-       on  the  configure  script  options  used  when   building
-       <STRONG>ncurses</STRONG>.   There  are a few main options whose effects are
+       Several different configurations are  possible,  depending
+       on   the  configure  script  options  used  when  building
+       <STRONG>ncurses</STRONG>.  There are a few main options whose  effects  are
        visible to the applications developer using <STRONG>ncurses</STRONG>:
 
        --disable-overwrite
-            The standard include for <STRONG>ncurses</STRONG> is as noted in  <STRONG>SYN-</STRONG>
+            The  standard include for <STRONG>ncurses</STRONG> is as noted in <STRONG>SYN-</STRONG>
             <STRONG>OPSIS</STRONG>:
 
           <STRONG>#include</STRONG> <STRONG>&lt;curses.h&gt;</STRONG>
 
-            This  option is used to avoid filename conflicts when
-            <STRONG>ncurses</STRONG> is not the main implementation of  curses  of
-            the  computer.   If  <STRONG>ncurses</STRONG>  is  installed disabling
-            overwrite, it puts its  headers  in  a  subdirectory,
+            This option is used to avoid filename conflicts  when
+            <STRONG>ncurses</STRONG>  is  not the main implementation of curses of
+            the computer.   If  <STRONG>ncurses</STRONG>  is  installed  disabling
+            overwrite,  it  puts  its  headers in a subdirectory,
             e.g.,
 
           <STRONG>#include</STRONG> <STRONG>&lt;ncurses/curses.h&gt;</STRONG>
 
-            It  also  omits a symbolic link which would allow you
+            It also omits a symbolic link which would  allow  you
             to use <STRONG>-lcurses</STRONG> to build executables.
 
        --enable-widec
-            The configure script renames the library and (if  the
-            <STRONG>--disable-overwrite</STRONG>  option  is used) puts the header
+            The  configure script renames the library and (if the
+            <STRONG>--disable-overwrite</STRONG> option is used) puts  the  header
             files  in  a  different  subdirectory.   All  of  the
-            library  names  have  a  "w"  appended to them, i.e.,
+            library names have a  "w"  appended  to  them,  i.e.,
             instead of
 
           <STRONG>-lncurses</STRONG>
           <STRONG>-lncursesw</STRONG>
 
             You must also define <STRONG>_XOPEN_SOURCE_EXTENDED</STRONG> when com-
-            piling  for  the  wide-character  library  to use the
-            extended (wide-character)  functions.   The  <STRONG>curses.h</STRONG>
-            file   which  is  installed  for  the  wide-character
-            library is designed to be compatible with the  normal
+            piling for the  wide-character  library  to  use  the
+            extended  (wide-character)  functions.   The <STRONG>curses.h</STRONG>
+            file  which  is  installed  for  the   wide-character
+            library  is designed to be compatible with the normal
             library's header.  Only the size of the <STRONG>WINDOW</STRONG> struc-
-            ture differs, and very few applications require  more
-            than  a  pointer  to  <STRONG>WINDOW</STRONG>s.   If  the  headers are
-            installed  allowing  overwrite,  the   wide-character
-            library's  headers should be installed last, to allow
-            applications to be built using  either  library  from
+            ture  differs, and very few applications require more
+            than a  pointer  to  <STRONG>WINDOW</STRONG>s.   If  the  headers  are
+            installed   allowing  overwrite,  the  wide-character
+            library's headers should be installed last, to  allow
+            applications  to  be  built using either library from
             the same set of headers.
 
        --with-pthread
             library names have a "t" appended to them (before any
             "w" added by <STRONG>--enable-widec</STRONG>).
 
-            The  global  variables  such as <STRONG>LINES</STRONG> are replaced by
-            macros to allow read-only access.  At the same  time,
-            setter-functions  are  provided  to set these values.
-            Some applications (very few) may require  changes  to
+            The global variables such as <STRONG>LINES</STRONG>  are  replaced  by
+            macros  to allow read-only access.  At the same time,
+            setter-functions are provided to  set  these  values.
+            Some  applications  (very few) may require changes to
             work with this convention.
 
        --with-shared
        --with-debug
 
        --with-profile
-            The  shared  and normal (static) library names differ
-            by their  suffixes,  e.g.,  <STRONG>libncurses.so</STRONG>  and  <STRONG>libn-</STRONG>
-            <STRONG>curses.a</STRONG>.   The  debug  and profiling libraries add a
+            The shared and normal (static) library  names  differ
+            by  their  suffixes,  e.g.,  <STRONG>libncurses.so</STRONG>  and <STRONG>libn-</STRONG>
+            <STRONG>curses.a</STRONG>.  The debug and profiling  libraries  add  a
             "_g" and a "_p" to the root names respectively, e.g.,
             <STRONG>libncurses_g.a</STRONG> and <STRONG>libncurses_p.a</STRONG>.
 
        --with-trace
-            The  <STRONG>trace</STRONG>  function  normally  resides  in the debug
+            The <STRONG>trace</STRONG> function  normally  resides  in  the  debug
             library, but it is sometimes useful to configure this
-            in  the  shared  library.   Configure  scripts should
+            in the  shared  library.   Configure  scripts  should
             check for the function's existence rather than assum-
             ing it is always in the debug library.
 
 
 </PRE><H2><a name="h2-FILES">FILES</a></H2><PRE>
        /usr/share/tabset
-            directory  containing  initialization  files  for the
+            directory containing  initialization  files  for  the
             terminal capability database /usr/share/terminfo ter-
             minal capability database
 
 
 </PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
-       <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>  and  related  pages whose names begin "curs_"
+       <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG> and related pages whose  names  begin  "curs_"
        for detailed routine descriptions.
        <STRONG><A HREF="curs_variables.3x.html">curs_variables(3x)</A></STRONG>
 
        The  <STRONG>ncurses</STRONG>  library  can  be  compiled  with  an  option
        (<STRONG>-DUSE_GETCAP</STRONG>) that falls back to the old-style /etc/term-
        cap file if the terminal setup code cannot find a terminfo
-       entry  corresponding  to <STRONG>TERM</STRONG>.  Use of this feature is not
-       recommended, as it essentially includes an entire  termcap
-       compiler  in the <STRONG>ncurses</STRONG> startup code, at significant cost
+       entry corresponding to <STRONG>TERM</STRONG>.  Use of this feature  is  not
+       recommended,  as it essentially includes an entire termcap
+       compiler in the <STRONG>ncurses</STRONG> startup code, at significant  cost
        in core and startup cycles.
 
-       The <STRONG>ncurses</STRONG>  library  includes  facilities  for  capturing
-       mouse  events on certain terminals (including xterm).  See
+       The  <STRONG>ncurses</STRONG>  library  includes  facilities  for capturing
+       mouse events on certain terminals (including xterm).   See
        the <STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3x)</A></STRONG> manual page for details.
 
-       The <STRONG>ncurses</STRONG> library includes facilities for responding  to
-       window  resizing  events,  e.g., when running in an xterm.
-       See the <STRONG><A HREF="resizeterm.3x.html">resizeterm(3x)</A></STRONG> and <STRONG><A HREF="wresize.3x.html">wresize(3x)</A></STRONG>  manual  pages  for
-       details.   In addition, the library may be configured with
+       The  <STRONG>ncurses</STRONG> library includes facilities for responding to
+       window resizing events, e.g., when running  in  an  xterm.
+       See  the  <STRONG><A HREF="resizeterm.3x.html">resizeterm(3x)</A></STRONG>  and <STRONG><A HREF="wresize.3x.html">wresize(3x)</A></STRONG> manual pages for
+       details.  In addition, the library may be configured  with
        a SIGWINCH handler.
 
-       The <STRONG>ncurses</STRONG> library extends the fixed set of function  key
-       capabilities  of  terminals  by  allowing  the application
-       designer to define additional key  sequences  at  runtime.
+       The  <STRONG>ncurses</STRONG> library extends the fixed set of function key
+       capabilities of  terminals  by  allowing  the  application
+       designer  to  define  additional key sequences at runtime.
        See the <STRONG><A HREF="define_key.3x.html">define_key(3x)</A></STRONG> <STRONG><A HREF="key_defined.3x.html">key_defined(3x)</A></STRONG>, and <STRONG><A HREF="keyok.3x.html">keyok(3x)</A></STRONG> man-
        ual pages for details.
 
        The <STRONG>ncurses</STRONG> library can exploit the capabilities of termi-
-       nals  which  implement the ISO-6429 SGR 39 and SGR 49 con-
+       nals which implement the ISO-6429 SGR 39 and SGR  49  con-
        trols, which allow an application to reset the terminal to
-       its  original  foreground and background colors.  From the
-       users' perspective, the application is able to  draw  col-
-       ored  text  on  a  background  whose color is set indepen-
-       dently, providing better  control  over  color  contrasts.
+       its original foreground and background colors.   From  the
+       users'  perspective,  the application is able to draw col-
+       ored text on a background  whose  color  is  set  indepen-
+       dently,  providing  better  control  over color contrasts.
        See the <STRONG><A HREF="default_colors.3x.html">default_colors(3x)</A></STRONG> manual page for details.
 
-       The  <STRONG>ncurses</STRONG>  library  includes  a  function for directing
-       application output to a printer attached to  the  terminal
+       The <STRONG>ncurses</STRONG> library  includes  a  function  for  directing
+       application  output  to a printer attached to the terminal
        device.  See the <STRONG><A HREF="curs_print.3x.html">curs_print(3x)</A></STRONG> manual page for details.
 
 
 </PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
-       The  <STRONG>ncurses</STRONG>  library is intended to be BASE-level confor-
+       The <STRONG>ncurses</STRONG> library is intended to be  BASE-level  confor-
        mant with XSI Curses.  The EXTENDED XSI Curses functional-
        ity (including color support) is supported.
 
-       A  small  number of local differences (that is, individual
-       differences between the XSI Curses and <STRONG>ncurses</STRONG> calls)  are
-       described  in  <STRONG>PORTABILITY</STRONG>  sections  of  the  library man
+       A small number of local differences (that  is,  individual
+       differences  between the XSI Curses and <STRONG>ncurses</STRONG> calls) are
+       described in  <STRONG>PORTABILITY</STRONG>  sections  of  the  library  man
        pages.
 
-       Unlike other implementations, this one  checks  parameters
-       such  as  pointers to WINDOW structures to ensure they are
-       not null.  The main reason for providing this behavior  is
+       Unlike  other  implementations, this one checks parameters
+       such as pointers to WINDOW structures to ensure  they  are
+       not  null.  The main reason for providing this behavior is
        to guard against programmer error.  The standard interface
        does not provide a way for the library to tell an applica-
-       tion  which  of  several  possible  errors  were detected.
-       Relying on this (or some other) extension  will  adversely
+       tion which  of  several  possible  errors  were  detected.
+       Relying  on  this (or some other) extension will adversely
        affect the portability of curses applications.
 
        This implementation also contains several extensions:
 
-       <STRONG>o</STRONG>   The  routine  <STRONG>has_key</STRONG>  is  not part of XPG4, nor is it
-           present in SVr4.  See the <STRONG><A HREF="curs_getch.3x.html">curs_getch(3x)</A></STRONG>  manual  page
+       <STRONG>o</STRONG>   The routine <STRONG>has_key</STRONG> is not part of  XPG4,  nor  is  it
+           present  in  SVr4.  See the <STRONG><A HREF="curs_getch.3x.html">curs_getch(3x)</A></STRONG> manual page
            for details.
 
-       <STRONG>o</STRONG>   The  routine  <STRONG>slk_attr</STRONG>  is not part of XPG4, nor is it
+       <STRONG>o</STRONG>   The routine <STRONG>slk_attr</STRONG> is not part of XPG4,  nor  is  it
            present in SVr4.  See the <STRONG><A HREF="curs_slk.3x.html">curs_slk(3x)</A></STRONG> manual page for
            details.
 
        <STRONG>o</STRONG>   The routines <STRONG>getmouse</STRONG>, <STRONG>mousemask</STRONG>, <STRONG>ungetmouse</STRONG>, <STRONG>mousein-</STRONG>
            <STRONG>terval</STRONG>, and <STRONG>wenclose</STRONG> relating to mouse interfacing are
-           not  part  of XPG4, nor are they present in SVr4.  See
+           not part of XPG4, nor are they present in  SVr4.   See
            the <STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3x)</A></STRONG> manual page for details.
 
-       <STRONG>o</STRONG>   The routine <STRONG>mcprint</STRONG> was not present  in  any  previous
-           curses  implementation.  See the <STRONG><A HREF="curs_print.3x.html">curs_print(3x)</A></STRONG> manual
+       <STRONG>o</STRONG>   The  routine  <STRONG>mcprint</STRONG>  was not present in any previous
+           curses implementation.  See the <STRONG><A HREF="curs_print.3x.html">curs_print(3x)</A></STRONG>  manual
            page for details.
 
-       <STRONG>o</STRONG>   The routine <STRONG>wresize</STRONG> is not part of  XPG4,  nor  is  it
-           present  in SVr4.  See the <STRONG><A HREF="wresize.3x.html">wresize(3x)</A></STRONG> manual page for
+       <STRONG>o</STRONG>   The  routine  <STRONG>wresize</STRONG>  is  not part of XPG4, nor is it
+           present in SVr4.  See the <STRONG><A HREF="wresize.3x.html">wresize(3x)</A></STRONG> manual page  for
            details.
 
-       <STRONG>o</STRONG>   The WINDOW structure's internal details can be  hidden
-           from  application  programs.   See <STRONG><A HREF="curs_opaque.3x.html">curs_opaque(3x)</A></STRONG> for
+       <STRONG>o</STRONG>   The  WINDOW structure's internal details can be hidden
+           from application programs.   See  <STRONG><A HREF="curs_opaque.3x.html">curs_opaque(3x)</A></STRONG>  for
            the discussion of <STRONG>is_scrollok</STRONG>, etc.
 
        <STRONG>o</STRONG>   This implementation can be configured to provide rudi-
-           mentary  support for multi-threaded applications.  See
+           mentary support for multi-threaded applications.   See
            <STRONG><A HREF="curs_threads.3x.html">curs_threads(3x)</A></STRONG> for details.
 
-       <STRONG>o</STRONG>   This implementation can also be configured to  provide
+       <STRONG>o</STRONG>   This  implementation can also be configured to provide
            a set of functions which improve the ability to manage
            multiple screens.  See <STRONG><A HREF="curs_sp_funcs.3x.html">curs_sp_funcs(3x)</A></STRONG> for details.
 
-       In historic curses versions, delays embedded in the  capa-
+       In  historic curses versions, delays embedded in the capa-
        bilities <STRONG>cr</STRONG>, <STRONG>ind</STRONG>, <STRONG>cub1</STRONG>, <STRONG>ff</STRONG> and <STRONG>tab</STRONG> activated corresponding
-       delay bits in the UNIX tty driver.   In  this  implementa-
-       tion,  all  padding  is  done  by sending NUL bytes.  This
-       method is slightly more expensive, but narrows the  inter-
-       face  to  the  UNIX kernel significantly and increases the
+       delay  bits  in  the UNIX tty driver.  In this implementa-
+       tion, all padding is done  by  sending  NUL  bytes.   This
+       method  is slightly more expensive, but narrows the inter-
+       face to the UNIX kernel significantly  and  increases  the
        package's portability correspondingly.
 
 
 </PRE><H2><a name="h2-NOTES">NOTES</a></H2><PRE>
-       The header  file  <STRONG>&lt;curses.h&gt;</STRONG>  automatically  includes  the
+       The  header  file  <STRONG>&lt;curses.h&gt;</STRONG>  automatically  includes the
        header files <STRONG>&lt;stdio.h&gt;</STRONG> and <STRONG>&lt;unctrl.h&gt;</STRONG>.
 
-       If  standard  output from a <STRONG>ncurses</STRONG> program is re-directed
-       to something which is not a tty, screen  updates  will  be
+       If standard output from a <STRONG>ncurses</STRONG> program  is  re-directed
+       to  something  which  is not a tty, screen updates will be
        directed to standard error.  This was an undocumented fea-
        ture of AT&amp;T System V Release 3 curses.
 
 
 </PRE><H2><a name="h2-AUTHORS">AUTHORS</a></H2><PRE>
-       Zeyd M. Ben-Halim, Eric  S.  Raymond,  Thomas  E.  Dickey.
+       Zeyd  M.  Ben-Halim,  Eric  S.  Raymond, Thomas E. Dickey.
        Based on pcurses by Pavel Curtis.
 
 
index aeac2228bd21eaf1e3ab50b089b84ae4fcc00a6a..f6eea73a6a81bf97e4d45091c1f2c0244cb42e53 100644 (file)
 </PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
        <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>
 
-       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170128).
+       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170204).
 
 
 
index 909cf805184b114ef1590bb6d2e49ec48d381b1c..ada9e0858b46800e5a4720b748d91e02de15d7f0 100644 (file)
 </PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
        <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>, <STRONG><A HREF="curs_variables.3x.html">curs_variables(3x)</A></STRONG>,
 
-       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170128).
+       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170204).
 
 
 </PRE><H2><a name="h2-AUTHOR">AUTHOR</a></H2><PRE>
index 39986de506dcd5a4ac2966b4e7622bd6f6a2bcd9..0eec4f5c90e19280a68c3e3c7cdfd4bb527dbc4f 100644 (file)
 </PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
        <STRONG><A HREF="tset.1.html">tset(1)</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="terminfo.5.html">terminfo(5)</A></STRONG>.
 
-       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170128).
+       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170204).
 
 
 
index e7b3024bd2bd3d4a304b71c58a581d1409c93820..8530bc4d9133d5e4ef9543559a214255c9a72310 100644 (file)
@@ -75,7 +75,7 @@
        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 6.0 (patch 20170128).
+       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170204).
 
        Entries in <EM>terminfo</EM> consist of a sequence of `,' separated
        fields (embedded commas may be escaped with a backslash or
index d604add081881f2a93a46460634e6ac9b92a0be5..aabeafd077e5810af75701d5f82b7058b8dd7149 100644 (file)
        <STRONG><A HREF="infocmp.1m.html">infocmp(1m)</A></STRONG>,   <STRONG><A HREF="captoinfo.1m.html">captoinfo(1m)</A></STRONG>,   <STRONG><A HREF="infotocap.1m.html">infotocap(1m)</A></STRONG>,    <STRONG><A HREF="toe.1m.html">toe(1m)</A></STRONG>,
        <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>, <STRONG><A HREF="term.5.html">term(5)</A></STRONG>.  <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>.
 
-       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170128).
+       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170204).
 
 
 </PRE><H2><a name="h2-AUTHOR">AUTHOR</a></H2><PRE>
index 2f16b05ff97d5db353a92fd8b86a47e614c6112e..b6905f703deb7c021a7fc4beb091472ec35eb833 100644 (file)
        <STRONG><A HREF="tic.1m.html">tic(1m)</A></STRONG>,    <STRONG><A HREF="infocmp.1m.html">infocmp(1m)</A></STRONG>,   <STRONG><A HREF="captoinfo.1m.html">captoinfo(1m)</A></STRONG>,   <STRONG><A HREF="infotocap.1m.html">infotocap(1m)</A></STRONG>,
        <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>, <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>.
 
-       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170128).
+       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170204).
 
 
 
index 9a7790eb90096d0882df02ca402d6593595dad83..a6888a1f0c657dacc861bf5c63c570611235c886 100644 (file)
        <STRONG><A HREF="clear.1.html">clear(1)</A></STRONG>,    <STRONG>stty(1)</STRONG>,   <STRONG><A HREF="tabs.1.html">tabs(1)</A></STRONG>,   <STRONG><A HREF="tset.1.html">tset(1)</A></STRONG>,   <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>,
        <STRONG><A HREF="curs_termcap.3x.html">curs_termcap(3x)</A></STRONG>.
 
-       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170128).
+       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170204).
 
 
 
index 67b1e086bab874593034c33ffeced492976e65cb..62d8626d7982002ba8898a5c48aeb03c705fde9f 100644 (file)
        <STRONG>csh(1)</STRONG>,   <STRONG>sh(1)</STRONG>,   <STRONG>stty(1)</STRONG>,   <STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3x)</A></STRONG>,   <STRONG>tty(4)</STRONG>,
        <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>, <STRONG>ttys(5)</STRONG>, <STRONG>environ(7)</STRONG>
 
-       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170128).
+       This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170204).
 
 
 
index 528a1b7d5af35849be142e1a12dfcec52b765e53..fb713afdd280df31b36af150b0c1604bafcfe0ed 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2012,2017 Free Software Foundation, Inc.              *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
@@ -33,7 +33,7 @@
  ****************************************************************************/
 
 /*
- * $Id: tic.h,v 1.69 2012/03/17 18:22:10 tom Exp $
+ * $Id: tic.h,v 1.70 2017/02/04 01:48:53 tom Exp $
  *     tic.h - Global variables and structures for the terminfo
  *                     compiler.
  */
@@ -86,6 +86,8 @@ extern "C" {
 
 #define IS_TIC_MAGIC(p)        (LOW_MSB(p) == MAGIC)
 
+#define quick_prefix(s) (!strncmp((s), "b64:", 4) || !strncmp((s), "hex:", 4))
+
 /*
  * The "maximum" here is misleading; XSI guarantees minimum values, which a
  * given implementation may exceed.
index d01b0a15ad10292715e9cfad5a1839da697434c8..1e4bf1f5a8563f26ff0c6f5b81b050f82981dc6f 100644 (file)
@@ -27,7 +27,7 @@
 .\" authorization.                                                           *
 .\"***************************************************************************
 .\"
-.\" $Id: infocmp.1m,v 1.60 2017/01/14 19:55:27 tom Exp $
+.\" $Id: infocmp.1m,v 1.61 2017/02/05 00:27:46 tom Exp $
 .TH @INFOCMP@ 1M ""
 .ds n 5
 .de bP
@@ -503,6 +503,7 @@ The
 \fB\-E\fR,
 \fB\-F\fR,
 \fB\-G\fR,
+\fB\-Q\fR,
 \fB\-R\fR,
 \fB\-T\fR,
 \fB\-V\fR,
index 92d3eaa91f2df85c68e32dff841bc2922836776d..8f33ebd7d87df05cfe257e4bce0f14e836e42e49 100644 (file)
@@ -27,7 +27,7 @@
 .\" authorization.                                                           *
 .\"***************************************************************************
 .\"
-.\" $Id: ncurses.3x,v 1.125 2017/01/07 19:25:15 tom Exp $
+.\" $Id: ncurses.3x,v 1.128 2017/02/05 00:33:02 tom Exp $
 .hy 0
 .TH ncurses 3X ""
 .ie \n(.g .ds `` \(lq
 .de bP
 .IP \(bu 4
 ..
+.de NS
+.ie \n(.sp
+.el    .sp .5
+.ie \n(.in +4
+.el    .in +2
+.nf
+.ft C                  \" Courier
+..
+.de NE
+.fi
+.ft R
+.in -4
+..
 .ds n 5
 .ds d @TERMINFO@
 .SH NAME
@@ -86,9 +99,9 @@ and access to low-level terminal-manipulation routines.
 .PP
 The library uses the locale which the calling program has initialized.
 That is normally done with \fBsetlocale\fP:
-.sp
+.NS
       \fBsetlocale(LC_ALL, "");\fP
-.sp
+.NE
 If the locale is not initialized,
 the library assumes that characters are printable as in ISO\-8859\-1,
 to work with certain legacy programs.
@@ -104,15 +117,15 @@ The routine \fBendwin\fR(3X) must be called before exiting.
 To get character-at-a-time input without echoing (most
 interactive, screen oriented programs want this), the following
 sequence should be used:
-.sp
+.NS
       \fBinitscr(); cbreak(); noecho();\fR
-.sp
+.NE
 Most programs would additionally use the sequence:
-.sp
+.NS
       \fBnonl();\fR
       \fBintrflush(stdscr, FALSE);\fR
       \fBkeypad(stdscr, TRUE);\fR
-.sp
+.NE
 Before a \fBcurses\fR program is run, the tab stops of the terminal
 should be set and its initialization strings, if defined, must be output.
 This can be done by executing the \fB@TPUT@ init\fR command
@@ -183,19 +196,19 @@ If the environment variable \fBTERMINFO\fR is defined, any program using
 standard place.
 For example, if \fBTERM\fR is set to \fBatt4424\fR, then the
 compiled terminal definition is found in
-.sp
+.NS
       \fB\*d/a/att4424\fR.
-.sp
+.NE
 (The \fBa\fR is copied from the first letter of \fBatt4424\fR to avoid
 creation of huge directories.)  However, if \fBTERMINFO\fR is set to
 \fB$HOME/myterms\fR, \fBcurses\fR first checks
-.sp
+.NS
       \fB$HOME/myterms/a/att4424\fR,
-.sp
+.NE
 and if that fails, it then checks
-.sp
+.NS
       \fB\*d/a/att4424\fR.
-.sp
+.NE
 This is useful for developing experimental definitions or when write
 permission in \fB\*d\fR is not available.
 .PP
@@ -884,12 +897,12 @@ This applies only to ncurses configured to use the GPM interface.
 .PP
 If present,
 the environment variable is a list of one or more terminal names
-against which the TERM environment variable is matched.
+against which the \fBTERM\fP environment variable is matched.
 Setting it to an empty value disables the GPM interface;
 using the built-in support for xterm, etc.
 .PP
 If the environment variable is absent,
-ncurses will attempt to open GPM if TERM contains "linux".
+ncurses will attempt to open GPM if \fBTERM\fP contains "linux".
 .SS NCURSES_NO_HARD_TABS
 \fBNcurses\fP may use tabs as part of the cursor movement optimization.
 In some cases,
@@ -967,7 +980,7 @@ alternate character set capabilities) described in the terminfo are known
 to be missing.
 Specifically, when running in a UTF\-8 locale,
 the Linux console emulator and the GNU screen program ignore these.
-Ncurses checks the TERM environment variable for these.
+Ncurses checks the \fBTERM\fP environment variable for these.
 For other special cases, you should set this environment variable.
 Doing this tells ncurses to use Unicode values which correspond to
 the VT100 line-drawing glyphs.
@@ -1036,28 +1049,73 @@ If the \fBncurses\fR library has been configured with \fItermcap\fR
 support, \fBncurses\fR will check for a terminal's description in
 termcap form if it is not available in the terminfo database.
 .PP
-The TERMCAP environment variable contains either a terminal description (with
+The \fBTERMCAP\fP environment variable contains either a terminal description (with
 newlines stripped out),
 or a file name telling where the information denoted by
-the TERM environment variable exists.
+the \fBTERM\fP environment variable exists.
 In either case, setting it directs \fBncurses\fR to ignore
 the usual place for this information, e.g., /etc/termcap.
 .SS TERMINFO
-Overrides the directory in which \fBncurses\fR searches for your terminal
+\fBncurses\fP can be configured to read from multiple terminal databases.
+The \fBTERMINFO\fP variable overrides the location for the default terminal database.
+Terminal descriptions (in terminal format) are stored in terminal databases:
+.bP
+Normally these are stored in a directory tree,
+using subdirectories named by the first letter of the terminal names therein.
+.IP
+This is the scheme used in System V, which legacy Unix systems use,
+and the \fBTERMINFO\fP variable is used by \fIcurses\fP applications on those
+systems to override the default location of the terminal database.
+.bP
+If \fBncurses\fP is built to use hashed databases,
+then each entry in this list may be the path of a hashed database file, e.g.,
+.NS
+/usr/share/terminfo.db
+.NE
+.IP
+rather than
+.NS
+/usr/share/terminfo/
+.NE
+.IP
+The hashed database uses less disk-space and is a little faster than the
+directory tree.
+However,
+some applications assume the existence of the directory tree,
+reading it directly
+rather than using the terminfo library calls.
+.bP
+If \fBncurses\fP is built with a support for reading termcap files
+directly, then an entry in this list may be the path of a termcap file.
+.bP
+If the \fBTERMINFO\fP variable begins with
+\*(``hex:\*('' or \*(``b64:\*('',
+\fBncurses\fP uses the remainder of that variable as a compiled terminal
 description.
-This is the simplest, but not the only way to change the list of directories.
-The complete list of directories in order follows:
+You might produce the base64 format using \fBinfocmp\fP(1M):
+.NS
+TERMINFO="$(infocmp -0 -Q2 -q)"
+export TERMINFO
+.NE
+.IP
+The compiled description is used if it corresponds to the terminal identified
+by the \fBTERM\fP variable.
+.PP
+Setting \fBTERMINFO\fP is the simplest,
+but not the only way to set location of the default terminal database.
+The complete list of database locations in order follows:
 .RS 3
 .bP
-the last directory to which \fBncurses\fR wrote, if any, is searched first
+the last terminal database to which \fBncurses\fR wrote,
+if any, is searched first
 .bP
-the directory specified by the TERMINFO environment variable
+the location specified by the TERMINFO environment variable
 .bP
 $HOME/.terminfo
 .bP
-directories listed in the TERMINFO_DIRS environment variable
+locations listed in the TERMINFO_DIRS environment variable
 .bP
-one or more directories whose names are configured and compiled into the
+one or more locations whose names are configured and compiled into the
 ncurses library, i.e.,
 .RS 3
 .bP
@@ -1066,35 +1124,35 @@ ncurses library, i.e.,
 @TERMINFO@ (corresponding to the TERMINFO variable)
 .RE
 .RE
+.PP
 .SS TERMINFO_DIRS
-Specifies a list of directories to search for terminal descriptions.
+Specifies a list of locations to search for terminal descriptions.
+Each location in the list is a terminal database as described in
+the section on the \fBTERMINFO\fP variable.
 The list is separated by colons (i.e., ":") on Unix, semicolons on OS/2 EMX.
 .PP
-All of the terminal descriptions are in terminfo form.
-Normally these are stored in a directory tree,
-using subdirectories named by the first letter of the terminal names therein.
-.PP
-If \fBncurses\fP is built with a hashed database,
-then each entry in this list can also be the path of the corresponding
-database file.
-.PP
-If \fBncurses\fP is built with a support for reading termcap files
-directly, then an entry in this list may be the path of a termcap file.
+There is no corresponding feature in System V terminfo;
+it is an extension developed for \fBncurses\fP.
 .SS TERMPATH
-If TERMCAP does not hold a file name then \fBncurses\fR checks
-the TERMPATH environment variable.
+If \fBTERMCAP\fP does not hold a file name then \fBncurses\fR checks
+the \fBTERMPATH\fP environment variable.
 This is a list of filenames separated by spaces or colons (i.e., ":") on Unix,
 semicolons on OS/2 EMX.
 .PP
-If the TERMPATH environment variable is not set,
+If the \fBTERMPATH\fP environment variable is not set,
 \fBncurses\fR looks in the files
-/etc/termcap, /usr/share/misc/termcap and $HOME/.termcap, in that order.
+.NS
+/etc/termcap, /usr/share/misc/termcap and $HOME/.termcap,
+.NE
+.PP
+in that order.
 .PP
 The library may be configured to disregard the following variables when the
 current user is the superuser (root), or if the application uses setuid or
 setgid permissions:
-.PP
+.NS
 $TERMINFO, $TERMINFO_DIRS, $TERMPATH, as well as $HOME.
+.NE
 .SH ALTERNATE CONFIGURATIONS
 Several different configurations are possible,
 depending on the configure script options used when building \fBncurses\fP.
index 654d79311e0fd31fc4331f058633f0bcb5823d59..d7e16707def4be5c36f3809d978aecfe1f1227f6 100644 (file)
@@ -34,7 +34,7 @@
  ****************************************************************************/
 
 /*
- * $Id: curses.priv.h,v 1.559 2017/01/21 23:02:04 tom Exp $
+ * $Id: curses.priv.h,v 1.560 2017/02/04 23:21:09 tom Exp $
  *
  *     curses.priv.h
  *
@@ -1657,6 +1657,8 @@ typedef void VoidFunc(void);
 #define returnVoidPtr(code)    TRACE_RETURN1(code,void_ptr)
 #define returnWin(code)                TRACE_RETURN1(code,win)
 
+#define returnDB(code)         do { TR(TRACE_DATABASE,(T_RETURN("code %d"), (code))); return (code); } while (0)
+
 extern NCURSES_EXPORT(NCURSES_BOOL)     _nc_retrace_bool (int);
 extern NCURSES_EXPORT(NCURSES_CONST void *) _nc_retrace_cvoid_ptr (NCURSES_CONST void *);
 extern NCURSES_EXPORT(SCREEN *)         _nc_retrace_sp (SCREEN *);
@@ -1726,6 +1728,8 @@ extern NCURSES_EXPORT(const char *) _nc_viscbuf (const NCURSES_CH_T *, int);
 #define returnVoidPtr(code)    return code
 #define returnWin(code)                return code
 
+#define returnDB(code)         return code
+
 #endif /* TRACE/!TRACE */
 
 /*
index 19f22c31634e787eea8f50a5766a8d3494c31423..17f160631df79e4c07f5fab8f853bd7023ee2bcf 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 2006-2014,2016 Free Software Foundation, Inc.              *
+ * Copyright (c) 2006-2016,2017 Free Software Foundation, Inc.              *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
@@ -43,7 +43,7 @@
 #include <hashed_db.h>
 #endif
 
-MODULE_ID("$Id: db_iterator.c,v 1.40 2016/05/28 23:22:52 tom Exp $")
+MODULE_ID("$Id: db_iterator.c,v 1.44 2017/02/04 23:27:01 tom Exp $")
 
 #define HaveTicDirectory _nc_globals.have_tic_directory
 #define KeepTicDirectory _nc_globals.keep_tic_directory
@@ -72,15 +72,18 @@ check_existence(const char *name, struct stat *sb)
 {
     bool result = FALSE;
 
-    if (stat(name, sb) == 0
-       && (S_ISDIR(sb->st_mode) || S_ISREG(sb->st_mode))) {
+    if (quick_prefix(name)) {
+       result = TRUE;
+    } else if (stat(name, sb) == 0
+              && (S_ISDIR(sb->st_mode)
+                  || (S_ISREG(sb->st_mode) && sb->st_size))) {
        result = TRUE;
     }
 #if USE_HASHED_DB
     else if (strlen(name) < PATH_MAX - sizeof(DBM_SUFFIX)) {
        char temp[PATH_MAX];
        _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) "%s%s", name, DBM_SUFFIX);
-       if (stat(temp, sb) == 0 && S_ISREG(sb->st_mode)) {
+       if (stat(temp, sb) == 0 && S_ISREG(sb->st_mode) && sb->st_size) {
            result = TRUE;
        }
     }
@@ -88,6 +91,27 @@ check_existence(const char *name, struct stat *sb)
     return result;
 }
 
+/*
+ * Trim newlines (and backslashes preceding those) and tab characters to
+ * help simplify scripting of the quick-dump feature.  Leave spaces and
+ * other backslashes alone.
+ */
+static void
+trim_formatting(char *source)
+{
+    char *target = source;
+    char ch;
+
+    while ((ch = *source++) != '\0') {
+       if (ch == '\\' && *source == '\n')
+           continue;
+       if (ch == '\n' || ch == '\t')
+           continue;
+       *target++ = ch;
+    }
+    *target = '\0';
+}
+
 /*
  * Store the latest value of an environment variable in my_vars[] so we can
  * detect if one changes, invalidating the cached search-list.
@@ -251,7 +275,7 @@ _nc_first_db(DBDIRS * state, int *offset)
     *state = dbdTIC;
     *offset = 0;
 
-    T(("_nc_first_db"));
+    T((T_CALLED("_nc_first_db")));
 
     /* build a blob containing all of the strings we will use for a lookup
      * table.
@@ -333,7 +357,9 @@ _nc_first_db(DBDIRS * state, int *offset)
                int k = 0;
                my_list[k++] = my_blob;
                for (j = 0; my_blob[j] != '\0'; ++j) {
-                   if (my_blob[j] == NCURSES_PATHSEP) {
+                   if (my_blob[j] == NCURSES_PATHSEP
+                       && ((&my_blob[j] - my_list[k - 1]) != 3
+                           || !quick_prefix(my_list[k - 1]))) {
                        my_blob[j] = '\0';
                        my_list[k++] = &my_blob[j + 1];
                    }
@@ -347,8 +373,10 @@ _nc_first_db(DBDIRS * state, int *offset)
                    if (*my_list[j] == '\0')
                        my_list[j] = strdup(TERMINFO);
 #endif
+                   trim_formatting(my_list[j]);
                    for (k = 0; k < j; ++k) {
                        if (!strcmp(my_list[j], my_list[k])) {
+                           T(("duplicate %s", my_list[j]));
                            k = j - 1;
                            while ((my_list[j] = my_list[j + 1]) != 0) {
                                ++j;
@@ -377,6 +405,7 @@ _nc_first_db(DBDIRS * state, int *offset)
                    }
 #endif
                    if (!found) {
+                       T(("not found %s", my_list[j]));
                        k = j;
                        while ((my_list[k] = my_list[k + 1]) != 0) {
                            ++k;
@@ -392,6 +421,7 @@ _nc_first_db(DBDIRS * state, int *offset)
            free(my_stat);
        }
     }
+    returnVoid;
 }
 
 #if NO_LEAKS
index 5afbca3573cccfdcdef3c03f771f61426862812b..a221e2df59e8ef3280cdfaf6440b5214e9aedad2 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2015,2016 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2016,2017 Free Software Foundation, Inc.              *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
@@ -41,7 +41,7 @@
 
 #include <tic.h>
 
-MODULE_ID("$Id: read_entry.c,v 1.130 2016/05/28 23:22:52 tom Exp $")
+MODULE_ID("$Id: read_entry.c,v 1.140 2017/02/05 01:49:55 tom Exp $")
 
 #define TYPE_CALLOC(type,elts) typeCalloc(type, (unsigned)(elts))
 
@@ -178,6 +178,10 @@ _nc_read_termtype(TERMTYPE *ptr, char *buffer, int limit)
     char *string_table;
     unsigned want, have;
 
+    TR(TRACE_DATABASE,
+       (T_CALLED("_nc_read_termtype(ptr=%p, buffer=%p, limit=%d)"),
+       ptr, buffer, limit));
+
     TR(TRACE_DATABASE, ("READ termtype header @%d", offset));
 
     memset(ptr, 0, sizeof(*ptr));
@@ -185,14 +189,15 @@ _nc_read_termtype(TERMTYPE *ptr, char *buffer, int limit)
     /* grab the header */
     if (!read_shorts(buf, 6)
        || !IS_TIC_MAGIC(buf)) {
-       return (TGETENT_NO);
+       returnDB(TGETENT_NO);
     }
 
-    name_size = MyNumber(buf + 2);
+    /* *INDENT-EQLS* */
+    name_size  = MyNumber(buf + 2);
     bool_count = MyNumber(buf + 4);
-    num_count = MyNumber(buf + 6);
-    str_count = MyNumber(buf + 8);
-    str_size = MyNumber(buf + 10);
+    num_count  = MyNumber(buf + 6);
+    str_count  = MyNumber(buf + 8);
+    str_size   = MyNumber(buf + 10);
 
     TR(TRACE_DATABASE,
        ("TERMTYPE name_size=%d, bool=%d/%d, num=%d/%d str=%d/%d(%d)",
@@ -203,7 +208,7 @@ _nc_read_termtype(TERMTYPE *ptr, char *buffer, int limit)
        || num_count < 0
        || str_count < 0
        || str_size < 0) {
-       return (TGETENT_NO);
+       returnDB(TGETENT_NO);
     }
 
     want = (unsigned) (str_size + name_size + 1);
@@ -211,12 +216,12 @@ _nc_read_termtype(TERMTYPE *ptr, char *buffer, int limit)
        /* try to allocate space for the string table */
        if (str_count * 2 >= MAX_ENTRY_SIZE
            || (string_table = typeMalloc(char, want)) == 0) {
-           return (TGETENT_NO);
+           returnDB(TGETENT_NO);
        }
     } else {
        str_count = 0;
        if ((string_table = typeMalloc(char, want)) == 0) {
-           return (TGETENT_NO);
+           returnDB(TGETENT_NO);
        }
     }
 
@@ -237,7 +242,7 @@ _nc_read_termtype(TERMTYPE *ptr, char *buffer, int limit)
     if ((ptr->Booleans = TYPE_CALLOC(NCURSES_SBOOL,
                                     max(BOOLCOUNT, bool_count))) == 0
        || Read(ptr->Booleans, (unsigned) bool_count) < bool_count) {
-       return (TGETENT_NO);
+       returnDB(TGETENT_NO);
     }
 
     /*
@@ -251,22 +256,22 @@ _nc_read_termtype(TERMTYPE *ptr, char *buffer, int limit)
     /* grab the numbers */
     if ((ptr->Numbers = TYPE_CALLOC(short, max(NUMCOUNT, num_count))) == 0
        || !read_shorts(buf, num_count)) {
-       return (TGETENT_NO);
+       returnDB(TGETENT_NO);
     }
     convert_shorts(buf, ptr->Numbers, num_count);
 
     if ((ptr->Strings = TYPE_CALLOC(char *, max(STRCOUNT, str_count))) == 0) {
-       return (TGETENT_NO);
+       returnDB(TGETENT_NO);
     }
 
     if (str_count) {
        /* grab the string offsets */
        if (!read_shorts(buf, str_count)) {
-           return (TGETENT_NO);
+           returnDB(TGETENT_NO);
        }
        /* finally, grab the string table itself */
        if (Read(string_table, (unsigned) str_size) != str_size) {
-           return (TGETENT_NO);
+           returnDB(TGETENT_NO);
        }
        convert_strings(buf, ptr->Strings, str_count, str_size, string_table);
     }
@@ -298,7 +303,7 @@ _nc_read_termtype(TERMTYPE *ptr, char *buffer, int limit)
            || ext_str_count < 0
            || ext_str_size < 0
            || ext_str_limit < 0) {
-           return (TGETENT_NO);
+           returnDB(TGETENT_NO);
        }
 
        ptr->num_Booleans = UShort(BOOLCOUNT + ext_bool_count);
@@ -318,7 +323,7 @@ _nc_read_termtype(TERMTYPE *ptr, char *buffer, int limit)
        if ((ptr->ext_Booleans = UShort(ext_bool_count)) != 0) {
            if (Read(ptr->Booleans + BOOLCOUNT, (unsigned)
                     ext_bool_count) != ext_bool_count) {
-               return (TGETENT_NO);
+               returnDB(TGETENT_NO);
            }
        }
        even_boundary(ext_bool_count);
@@ -327,7 +332,7 @@ _nc_read_termtype(TERMTYPE *ptr, char *buffer, int limit)
                            ext_num_count, offset));
        if ((ptr->ext_Numbers = UShort(ext_num_count)) != 0) {
            if (!read_shorts(buf, ext_num_count)) {
-               return (TGETENT_NO);
+               returnDB(TGETENT_NO);
            }
            TR(TRACE_DATABASE, ("Before converting extended-numbers"));
            convert_shorts(buf, ptr->Numbers + NUMCOUNT, ext_num_count);
@@ -335,11 +340,11 @@ _nc_read_termtype(TERMTYPE *ptr, char *buffer, int limit)
 
        TR(TRACE_DATABASE, ("READ extended-offsets @%d", offset));
        if ((unsigned) (ext_str_count + (int) need) >= (MAX_ENTRY_SIZE / 2)) {
-           return (TGETENT_NO);
+           returnDB(TGETENT_NO);
        }
        if ((ext_str_count || need)
            && !read_shorts(buf, ext_str_count + (int) need)) {
-           return (TGETENT_NO);
+           returnDB(TGETENT_NO);
        }
 
        TR(TRACE_DATABASE, ("READ %d bytes of extended-strings @%d",
@@ -348,10 +353,10 @@ _nc_read_termtype(TERMTYPE *ptr, char *buffer, int limit)
        if (ext_str_limit) {
            ptr->ext_str_table = typeMalloc(char, (size_t) ext_str_limit);
            if (ptr->ext_str_table == 0) {
-               return (TGETENT_NO);
+               returnDB(TGETENT_NO);
            }
            if (Read(ptr->ext_str_table, (unsigned) ext_str_limit) != ext_str_limit) {
-               return (TGETENT_NO);
+               returnDB(TGETENT_NO);
            }
            TR(TRACE_DATABASE, ("first extended-string is %s", _nc_visbuf(ptr->ext_str_table)));
        }
@@ -377,10 +382,10 @@ _nc_read_termtype(TERMTYPE *ptr, char *buffer, int limit)
 
        if (need) {
            if (ext_str_count >= (MAX_ENTRY_SIZE / 2)) {
-               return (TGETENT_NO);
+               returnDB(TGETENT_NO);
            }
            if ((ptr->ext_Names = TYPE_CALLOC(char *, need)) == 0) {
-               return (TGETENT_NO);
+               returnDB(TGETENT_NO);
            }
            TR(TRACE_DATABASE,
               ("ext_NAMES starting @%d in extended_strings, first = %s",
@@ -415,7 +420,7 @@ _nc_read_termtype(TERMTYPE *ptr, char *buffer, int limit)
     for (i = str_count; i < STRCOUNT; i++)
        ptr->Strings[i] = ABSENT_STRING;
 
-    return (TGETENT_YES);
+    returnDB(TGETENT_YES);
 }
 
 /*
@@ -509,6 +514,106 @@ make_dir_filename(char *filename,
     return result;
 }
 
+static int
+lookup_b64(int *target, const char **source)
+{
+    int result = 3;
+    int j;
+    /*
+     * ncurses' quickdump writes only RFC 4648 "url/filename-safe" encoding,
+     * but accepts RFC-3548
+     */
+    for (j = 0; j < 4; ++j) {
+       int ch = UChar(**source);
+       *source += 1;
+       if (ch >= 'A' && ch <= 'Z') {
+           target[j] = (ch - 'A');
+       } else if (ch >= 'a' && ch <= 'z') {
+           target[j] = 26 + (ch - 'a');
+       } else if (ch >= '0' && ch <= '9') {
+           target[j] = 52 + (ch - '0');
+       } else if (ch == '-' || ch == '+') {
+           target[j] = 62;
+       } else if (ch == '_' || ch == '/') {
+           target[j] = 63;
+       } else if (ch == '=') {
+           target[j] = 64;
+           result--;
+       } else {
+           result = -1;
+           break;
+       }
+    }
+    return result;
+}
+
+static int
+decode_hex(const char **source)
+{
+    int result = 0;
+    int nibble;
+    int ch;
+
+    for (nibble = 0; nibble < 2; ++nibble) {
+       result <<= 4;
+       ch = UChar(**source);
+       *source += 1;
+       if (ch >= '0' && ch <= '9') {
+           ch -= '0';
+       } else if (ch >= 'A' && ch <= 'F') {
+           ch -= 'A';
+           ch += 10;
+       } else if (ch >= 'a' && ch <= 'f') {
+           ch -= 'a';
+           ch += 10;
+       } else {
+           result = -1;
+           break;
+       }
+       result |= ch;
+    }
+    return result;
+}
+
+static int
+decode_quickdump(char *target, const char *source)
+{
+    char *base = target;
+    int result = 0;
+
+    if (!strncmp(source, "b64:", 4)) {
+       source += 4;
+       while (*source != '\0') {
+           int bits[4];
+           int ch = lookup_b64(bits, &source);
+           if (ch < 0 || (ch + target - base) >= MAX_ENTRY_SIZE) {
+               result = 0;
+               break;
+           }
+           result += ch;
+           *target++ = (char) ((bits[0] << 2) | (bits[1] >> 4));
+           if (bits[2] < 64) {
+               *target++ = (char) ((bits[1] << 4) | (bits[2] >> 2));
+               if (bits[3] < 64) {
+                   *target++ = (char) ((bits[2] << 6) | bits[3]);
+               }
+           }
+       }
+    } else if (!strncmp(source, "hex:", 4)) {
+       source += 4;
+       while (*source != '\0') {
+           int ch = decode_hex(&source);
+           if (ch < 0 || (target - base) >= MAX_ENTRY_SIZE) {
+               result = 0;
+               break;
+           }
+           *target++ = (char) ch;
+           ++result;
+       }
+    }
+    return result;
+}
+
 /*
  * Build a terminfo pathname and try to read the data.  Returns TGETENT_YES on
  * success, TGETENT_NO on failure.
@@ -521,12 +626,24 @@ _nc_read_tic_entry(char *filename,
                   TERMTYPE *const tp)
 {
     int code = TGETENT_NO;
-
 #if USE_HASHED_DB
     DB *capdbp;
+#endif
+    char buffer[MAX_ENTRY_SIZE + 1];
+    int used;
 
-    if (make_db_filename(filename, limit, path)
-       && (capdbp = _nc_db_open(filename, FALSE)) != 0) {
+    TR(TRACE_DATABASE,
+       (T_CALLED("_nc_read_tic_entry(file=%p, path=%s, name=%s)"),
+       filename, path, name));
+
+    if ((used = decode_quickdump(buffer, path)) != 0
+       && (code = _nc_read_termtype(tp, buffer, used)) == TGETENT_YES
+       && _nc_name_match(tp->term_names, name, "|")) {
+       TR(TRACE_DATABASE, ("loaded quick-dump for %s", name));
+    } else
+#if USE_HASHED_DB
+       if (make_db_filename(filename, limit, path)
+           && (capdbp = _nc_db_open(filename, FALSE)) != 0) {
 
        DBT key, data;
        int reccnt = 0;
@@ -552,8 +669,8 @@ _nc_read_tic_entry(char *filename,
         * (source/binary) by checking the lengths.
         */
        while (_nc_db_get(capdbp, &key, &data) == 0) {
-           int used = (int) data.size - 1;
            char *have = (char *) data.data;
+           used = (int) data.size - 1;
 
            if (*have++ == 0) {
                if (data.size > key.size
@@ -593,7 +710,7 @@ _nc_read_tic_entry(char *filename,
                    "%.*s", PATH_MAX - 1, _nc_get_source());
     }
 #endif
-    return code;
+    returnDB(code);
 }
 #endif /* NCURSES_USE_DATABASE */
 
@@ -629,7 +746,6 @@ _nc_read_entry(const char *const name, char *const filename, TERMTYPE *const tp)
        _nc_first_db(&state, &offset);
        code = TGETENT_ERR;
        while ((path = _nc_next_db(&state, &offset)) != 0) {
-           TR(TRACE_DATABASE, ("_nc_read_tic_entry path=%s, name=%s", path, name));
            code = _nc_read_tic_entry(filename, PATH_MAX, path, name, tp);
            if (code == TGETENT_YES) {
                _nc_last_db();
index 0000aa1669cc7cf49e8311983b9090c024960640..8a49a2c0d7f4b005f740f0a03b456a72ddd7631d 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2015,2017 Free Software Foundation, Inc.              *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
 #define TRACE_OUT(p)           /*nothing */
 #endif
 
-MODULE_ID("$Id: write_entry.c,v 1.96 2016/09/17 19:06:26 Sven.Joachim Exp $")
+MODULE_ID("$Id: write_entry.c,v 1.98 2017/02/05 01:47:34 tom Exp $")
 
 static int total_written;
+static int total_parts;
+static int total_size;
 
 static int make_db_root(const char *);
 
@@ -342,6 +344,8 @@ _nc_write_entry(TERMTYPE *const tp)
                       sizeof(buffer) - 1);
            data.size = name_size + 1;
 
+           total_size += data.size;
+           total_parts++;
            _nc_db_put(capdb, &key, &data);
 
            while (*other_names != '\0') {
@@ -356,6 +360,8 @@ _nc_write_entry(TERMTYPE *const tp)
                key.data = ptr;
                key.size = strlen(ptr);
 
+               total_size += data.size;
+               total_parts++;
                _nc_db_put(capdb, &key, &data);
            }
        }
@@ -802,6 +808,8 @@ _nc_write_object(TERMTYPE *tp, char *buffer, unsigned *offset, unsigned limit)
 #endif /* NCURSES_XNAMES */
 
     total_written++;
+    total_parts++;
+    total_size = total_size + (int) (*offset + 1);
     return (OK);
 }
 
@@ -811,5 +819,7 @@ _nc_write_object(TERMTYPE *tp, char *buffer, unsigned *offset, unsigned limit)
 NCURSES_EXPORT(int)
 _nc_tic_written(void)
 {
+    TR(TRACE_DATABASE, ("_nc_tic_written %d entries, %d parts, %d size",
+                       total_written, total_parts, total_size));
     return total_written;
 }
index 0e024600767b609a723e1ac0c6a982b555b3c4b4..ab442c8d2fbb4a3af578e037db038518a1226a8f 100644 (file)
@@ -1,8 +1,8 @@
-ncurses6 (6.0+20170128) unstable; urgency=low
+ncurses6 (6.0+20170204) unstable; urgency=low
 
   * latest weekly patch
 
- -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 28 Jan 2017 09:18:58 -0500
+ -- Thomas E. Dickey <dickey@invisible-island.net>  Fri, 03 Feb 2017 17:37:25 -0500
 
 ncurses6 (5.9-20131005) unstable; urgency=low
 
index 0e024600767b609a723e1ac0c6a982b555b3c4b4..ab442c8d2fbb4a3af578e037db038518a1226a8f 100644 (file)
@@ -1,8 +1,8 @@
-ncurses6 (6.0+20170128) unstable; urgency=low
+ncurses6 (6.0+20170204) unstable; urgency=low
 
   * latest weekly patch
 
- -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 28 Jan 2017 09:18:58 -0500
+ -- Thomas E. Dickey <dickey@invisible-island.net>  Fri, 03 Feb 2017 17:37:25 -0500
 
 ncurses6 (5.9-20131005) unstable; urgency=low
 
index aad9ebc61ebe17c7dea00f0e316744f6b974314d..0da5e357611010bb5823f04e9f3751a40d06b432 100644 (file)
@@ -1,8 +1,8 @@
-ncurses6 (6.0+20170128) unstable; urgency=low
+ncurses6 (6.0+20170204) unstable; urgency=low
 
   * latest weekly patch
 
- -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 28 Jan 2017 09:18:58 -0500
+ -- Thomas E. Dickey <dickey@invisible-island.net>  Fri, 03 Feb 2017 17:37:25 -0500
 
 ncurses6 (5.9-20120608) unstable; urgency=low
 
index dc77ba1888af066e77ff9ffc91a45aa719098d57..83b4da00a9ebf8bad46fa3a02268fc947159a9a8 100644 (file)
@@ -1,4 +1,4 @@
-; $Id: mingw-ncurses.nsi,v 1.195 2017/01/28 14:18:58 tom Exp $\r
+; $Id: mingw-ncurses.nsi,v 1.196 2017/02/03 22:37:25 tom Exp $\r
 \r
 ; TODO add examples\r
 ; TODO bump ABI to 6\r
@@ -10,7 +10,7 @@
 !define VERSION_MAJOR "6"\r
 !define VERSION_MINOR "0"\r
 !define VERSION_YYYY  "2017"\r
-!define VERSION_MMDD  "0128"\r
+!define VERSION_MMDD  "0204"\r
 !define VERSION_PATCH ${VERSION_YYYY}${VERSION_MMDD}\r
 \r
 !define MY_ABI   "5"\r
index 8a6d555558de66bd5f9c97ef4945b5cc6dcb28ce..1fa1500d3c9fff8470a7632d7d2dea34b255bbc7 100644 (file)
@@ -3,7 +3,7 @@
 Summary: shared libraries for terminal handling
 Name: mingw32-ncurses6
 Version: 6.0
-Release: 20170128
+Release: 20170204
 License: X11
 Group: Development/Libraries
 Source: ncurses-%{version}-%{release}.tgz
index 05fb2a8df3a4c03cb2b97b3cbb7e9207a5ad03dc..4c92018ead0e5e52255d1ebf690e84653aa67306 100644 (file)
@@ -1,7 +1,7 @@
 Summary: shared libraries for terminal handling
 Name: ncurses6
 Version: 6.0
-Release: 20170128
+Release: 20170204
 License: X11
 Group: Development/Libraries
 Source: ncurses-%{version}-%{release}.tgz
index ea50fbc5edf8bd925baf4d028bbda4b9258def08..3be09f8671cbb44cd0eb862357944798d657f5de 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2015,2016 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2016,2017 Free Software Foundation, Inc.              *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
@@ -39,7 +39,7 @@
 #include "termsort.c"          /* this C file is generated */
 #include <parametrized.h>      /* so is this */
 
-MODULE_ID("$Id: dump_entry.c,v 1.147 2016/11/13 00:28:46 tom Exp $")
+MODULE_ID("$Id: dump_entry.c,v 1.148 2017/02/04 16:55:42 tom Exp $")
 
 #define DISCARD(string) string = ABSENT_STRING
 #define PRINTF (void) printf
@@ -1328,16 +1328,16 @@ encode_b64(char *target, char *source, unsigned state, int *saved)
 
     switch (state % 3) {
     case 0:
-       *target++ = data[ch & 077];
-       *saved = (ch >> 6) & 3;
+       *target++ = data[(ch >> 2) & 077];
+       *saved = (ch << 4);
        break;
     case 1:
-       *target++ = data[((ch << 2) | *saved) & 077];
-       *saved = (ch >> 4) & 017;
+       *target++ = data[((ch >> 4) | *saved) & 077];
+       *saved = (ch << 2);
        break;
     case 2:
-       *target++ = data[((ch << 4) | *saved) & 077];
-       *target++ = data[(ch >> 2) & 077];
+       *target++ = data[((ch >> 6) | *saved) & 077];
+       *target++ = data[ch & 077];
        *saved = 0;
        break;
     }
@@ -1379,6 +1379,8 @@ dump_entry(TERMTYPE *tterm,
                }
            }
            if (quickdump & 2) {
+               static char padding[] =
+               {0, 0};
                int value = 0;
                if (outbuf.used)
                    wrap_concat("\n");
@@ -1391,10 +1393,14 @@ dump_entry(TERMTYPE *tterm,
                case 0:
                    break;
                case 1:
-                   wrap_concat("===");
+                   encode_b64(numbuf, padding, 1, &value);
+                   wrap_concat(numbuf);
+                   wrap_concat("==");
                    break;
                case 2:
-                   wrap_concat("==");
+                   encode_b64(numbuf, padding, 1, &value);
+                   wrap_concat(numbuf);
+                   wrap_concat("=");
                    break;
                }
            }