From 048a1c1a65c6d98d92fca97f8d175d10d21091d0 Mon Sep 17 00:00:00 2001 From: "Thomas E. Dickey" Date: Sun, 5 Feb 2017 02:12:49 +0000 Subject: [PATCH] ncurses 6.0 - patch 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. --- AUTHORS | 5 +- NEWS | 18 +- VERSION | 2 +- dist.mk | 4 +- doc/html/man/adacurses6-config.1.html | 2 +- doc/html/man/captoinfo.1m.html | 2 +- doc/html/man/clear.1.html | 2 +- doc/html/man/form.3x.html | 2 +- doc/html/man/infocmp.1m.html | 8 +- doc/html/man/infotocap.1m.html | 2 +- doc/html/man/menu.3x.html | 2 +- doc/html/man/ncurses.3x.html | 680 ++++++++++++++------------ doc/html/man/ncurses6-config.1.html | 2 +- doc/html/man/panel.3x.html | 2 +- doc/html/man/tabs.1.html | 2 +- doc/html/man/terminfo.5.html | 2 +- doc/html/man/tic.1m.html | 2 +- doc/html/man/toe.1m.html | 2 +- doc/html/man/tput.1.html | 2 +- doc/html/man/tset.1.html | 2 +- include/tic.h | 6 +- man/infocmp.1m | 3 +- man/ncurses.3x | 140 ++++-- ncurses/curses.priv.h | 6 +- ncurses/tinfo/db_iterator.c | 44 +- ncurses/tinfo/read_entry.c | 178 +++++-- ncurses/tinfo/write_entry.c | 14 +- package/debian-mingw/changelog | 4 +- package/debian-mingw64/changelog | 4 +- package/debian/changelog | 4 +- package/mingw-ncurses.nsi | 4 +- package/mingw-ncurses.spec | 2 +- package/ncurses.spec | 2 +- progs/dump_entry.c | 26 +- 34 files changed, 727 insertions(+), 455 deletions(-) diff --git a/AUTHORS b/AUTHORS index 57904c40..708e1ef7 100644 --- 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 116bf91e..e5df183c 100644 --- 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 2d7ace60..35439f34 100644 --- 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 9408c1b0..c556fa2f 100644 --- 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) diff --git a/doc/html/man/adacurses6-config.1.html b/doc/html/man/adacurses6-config.1.html index 54723ce5..e90e0f90 100644 --- a/doc/html/man/adacurses6-config.1.html +++ b/doc/html/man/adacurses6-config.1.html @@ -131,7 +131,7 @@

SEE ALSO

        curses(3x)
 
-       This describes ncurses version 6.0 (patch 20170128).
+       This describes ncurses version 6.0 (patch 20170204).
 
 
 
diff --git a/doc/html/man/captoinfo.1m.html b/doc/html/man/captoinfo.1m.html
index 637c35bd..d703b867 100644
--- a/doc/html/man/captoinfo.1m.html
+++ b/doc/html/man/captoinfo.1m.html
@@ -198,7 +198,7 @@
 

SEE ALSO

        infocmp(1m), curses(3x), terminfo(5)
 
-       This describes ncurses version 6.0 (patch 20170128).
+       This describes ncurses version 6.0 (patch 20170204).
 
 
 

AUTHOR

diff --git a/doc/html/man/clear.1.html b/doc/html/man/clear.1.html
index b4491628..c04197f3 100644
--- a/doc/html/man/clear.1.html
+++ b/doc/html/man/clear.1.html
@@ -147,7 +147,7 @@
 

SEE ALSO

        tput(1), terminfo(5)
 
-       This describes ncurses version 6.0 (patch 20170128).
+       This describes ncurses version 6.0 (patch 20170204).
 
 
 
diff --git a/doc/html/man/form.3x.html b/doc/html/man/form.3x.html
index 5ede1a73..6251f05d 100644
--- a/doc/html/man/form.3x.html
+++ b/doc/html/man/form.3x.html
@@ -239,7 +239,7 @@
        curses(3x) and related pages whose names begin "form_" for
        detailed descriptions of the entry points.
 
-       This describes ncurses version 6.0 (patch 20170128).
+       This describes ncurses version 6.0 (patch 20170204).
 
 
 
diff --git a/doc/html/man/infocmp.1m.html b/doc/html/man/infocmp.1m.html
index 06a5d5d4..bf777ce1 100644
--- a/doc/html/man/infocmp.1m.html
+++ b/doc/html/man/infocmp.1m.html
@@ -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 @
 -->
 
 
@@ -462,8 +462,8 @@
 
 
 

EXTENSIONS

-       The -0, -1, -E, -F, -G, -R, -T, -V, -a, -e,  -f,  -g,  -i,
-       -l,  -p,  -q  and  -t  options  are  not supported in SVr4
+       The -0, -1, -E, -F, -G, -Q, -R, -T, -V, -a,  -e,  -f,  -g,
+       -i,  -l,  -p,  -q and -t options are not supported in SVr4
        curses.
 
        The -r option's notion of `termcap' capabilities is System
@@ -482,7 +482,7 @@
 
        http://invisible-island.net/ncurses/tctest.html
 
-       This describes ncurses version 6.0 (patch 20170128).
+       This describes ncurses version 6.0 (patch 20170204).
 
 
 

AUTHOR

diff --git a/doc/html/man/infotocap.1m.html b/doc/html/man/infotocap.1m.html
index dd58820d..b4b16bfb 100644
--- a/doc/html/man/infotocap.1m.html
+++ b/doc/html/man/infotocap.1m.html
@@ -88,7 +88,7 @@
 

SEE ALSO

        curses(3x), tic(1m), infocmp(1m), terminfo(5)
 
-       This describes ncurses version 6.0 (patch 20170128).
+       This describes ncurses version 6.0 (patch 20170204).
 
 
 

AUTHOR

diff --git a/doc/html/man/menu.3x.html b/doc/html/man/menu.3x.html
index 3681f664..767b344a 100644
--- a/doc/html/man/menu.3x.html
+++ b/doc/html/man/menu.3x.html
@@ -217,7 +217,7 @@
        curses(3x) and related pages whose names begin "menu_" for
        detailed descriptions of the entry points.
 
-       This describes ncurses version 6.0 (patch 20170128).
+       This describes ncurses version 6.0 (patch 20170204).
 
 
 
diff --git a/doc/html/man/ncurses.3x.html b/doc/html/man/ncurses.3x.html
index c7de7502..753ccfeb 100644
--- a/doc/html/man/ncurses.3x.html
+++ b/doc/html/man/ncurses.3x.html
@@ -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 @
 -->
 
 
@@ -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
-       ncurses version 6.0 (patch 20170128).
+       ncurses version 6.0 (patch 20170204).
 
        The ncurses library emulates the curses library of  System
        V  Release  4  UNIX,  and  XPG4 (X/Open Portability Guide)
@@ -98,13 +98,12 @@
        The  library uses the locale which the calling program has
        initialized.  That is normally done with setlocale:
 
-             setlocale(LC_ALL, "");
-
-       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.
+               setlocale(LC_ALL, "");
+     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 initscr or newterm must be called to initial-
        ize the library before any of the other routines that deal
@@ -115,20 +114,18 @@
        interactive, screen oriented programs want this), the fol-
        lowing sequence should be used:
 
-             initscr(); cbreak(); noecho();
-
-       Most programs would additionally use the sequence:
+               initscr(); cbreak(); noecho();
+     Most programs would additionally use the sequence:
 
              nonl();
              intrflush(stdscr, FALSE);
              keypad(stdscr, TRUE);
-
-       Before  a curses 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 tput init command after the shell environment variable
-       TERM  has  been  exported.  tset(1) is usually responsible
-       for doing this.  [See terminfo(5) for further details.]
+   Before  a curses 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 tput init com-
+   mand after  the  shell  environment  variable  TERM  has  been
+   exported.   tset(1)  is  usually  responsible  for doing this.
+   [See terminfo(5) for further details.]
 
 
 

Datatypes

@@ -191,96 +188,92 @@
        TERM is set to att4424, then the compiled terminal defini-
        tion is found in
 
-             /usr/share/terminfo/a/att4424.
-
-       (The a is copied from the first letter of att4424 to avoid
-       creation of huge directories.)  However,  if  TERMINFO  is
-       set to $HOME/myterms, curses first checks
+               /usr/share/terminfo/a/att4424.
+     (The  a  is copied from the first letter of att4424 to avoid
+     creation of huge directories.)  However, if TERMINFO is  set
+     to $HOME/myterms, curses first checks
 
              $HOME/myterms/a/att4424,
+   and if that fails, it then checks
 
-       and if that fails, it then checks
-
-             /usr/share/terminfo/a/att4424.
+           /usr/share/terminfo/a/att4424.
+ This  is  useful for developing experimental definitions or when
+ write permission in /usr/share/terminfo is not available.
 
-       This  is useful for developing experimental definitions or
-       when write permission in /usr/share/terminfo is not avail-
-       able.
-
-       The  integer  variables  LINES  and  COLS  are  defined in
-       <curses.h> and will be filled in by initscr with the  size
+       The integer  variables  LINES  and  COLS  are  defined  in
+       <curses.h>  and will be filled in by initscr with the size
        of the screen.  The constants TRUE and FALSE have the val-
        ues 1 and 0, respectively.
 
-       The curses routines also  define  the  WINDOW  *  variable
+       The  curses  routines  also  define  the WINDOW * variable
        curscr 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
        curscr can be used in only a few routines.
 
 
 

Routine and Argument Names

-       Many  curses routines have two or more versions.  The rou-
+       Many curses routines have two or more versions.  The  rou-
        tines prefixed with w require a window argument.  The rou-
        tines prefixed with p require a pad argument.  Those with-
        out a prefix generally use stdscr.
 
        The routines prefixed with mv require a y and x coordinate
-       to  move to before performing the appropriate action.  The
-       mv routines imply a call to move before the  call  to  the
-       other  routine.  The coordinate y always refers to the row
-       (of the window), and x always refers to the  column.   The
+       to move to before performing the appropriate action.   The
+       mv  routines  imply  a call to move before the call to the
+       other routine.  The coordinate y always refers to the  row
+       (of  the  window), and x always refers to the column.  The
        upper left-hand corner is always (0,0), not (1,1).
 
        The routines prefixed with mvw take both a window argument
-       and x and y coordinates.  The window  argument  is  always
+       and  x  and  y coordinates.  The window argument is always
        specified before the coordinates.
 
-       In  each  case, win is the window affected, and pad is the
+       In each case, win is the window affected, and pad  is  the
        pad affected; win and pad are always pointers to type WIN-
        DOW.
 
        Option setting routines require a Boolean flag bf with the
-       value TRUE or FALSE; bf is always of type bool.   Most  of
-       the  data types used in the library routines, such as WIN-
-       DOW, SCREEN, bool, and chtype are defined  in  <curses.h>.
-       Types  used for the terminfo routines such as TERMINAL are
+       value  TRUE  or FALSE; bf is always of type bool.  Most of
+       the data types used in the library routines, such as  WIN-
+       DOW,  SCREEN,  bool, and chtype are defined in <curses.h>.
+       Types used for the terminfo routines such as TERMINAL  are
        defined in <term.h>.
 
-       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:
 
           ncurses
-               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 chtype data.
 
-               Attributes alone (no corresponding character)  may
+               Attributes  alone (no corresponding character) may
                be stored in chtype or the equivalent attr_t 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 WINDOW is stored
+               Each cell (row and column) in a WINDOW  is  stored
                as a chtype.
 
           ncursesw
                the so-called "wide" library, which handles multi-
                byte characters (see the section on ALTERNATE CON-
-               FIGURATIONS).  The "wide" library includes all  of
-               the  calls  from  the  "normal"  library.  It adds
-               about one third more calls using data types  which
+               FIGURATIONS).   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:
 
                cchar_t
                     corresponds  to  chtype.   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 WINDOW is
+                    Each cell (row and column)  in  a  WINDOW  is
                     stored as a cchar_t.
 
                wchar_t
@@ -288,21 +281,21 @@
                     may be an integer.
 
                wint_t
-                    stores  a  wchar_t  or  WEOF  - not the same,
+                    stores a wchar_t or  WEOF  -  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,  waddch
+               relates many of the normal/wide variants:  a  "_w"
+               is  inserted  into  the name.  For example, waddch
                becomes wadd_wch.
 
 
 

Routine Name Index

        The following table lists each curses 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.
 
               curses Routine Name     Manual Page Name
@@ -315,11 +308,11 @@
               _traceattr              curs_trace(3x)*
               _traceattr2             curs_trace(3x)*
               _tracechar              curs_trace(3x)*
-
               _tracechtype            curs_trace(3x)*
               _tracechtype2           curs_trace(3x)*
               _tracedump              curs_trace(3x)*
               _tracef                 curs_trace(3x)*
+
               _tracemouse             curs_trace(3x)*
               add_wch                 curs_add_wch(3x)
               add_wchnstr             curs_add_wchstr(3x)
@@ -382,10 +375,10 @@
               erasewchar              curs_termattrs(3x)
               filter                  curs_util(3x)
               flash                   curs_beep(3x)
-
               flushinp                curs_util(3x)
               get_wch                 curs_get_wch(3x)
               get_wstr                curs_get_wstr(3x)
+
               getattrs                curs_attr(3x)
               getbegx                 curs_legacy(3x)*
               getbegy                 curs_legacy(3x)*
@@ -449,9 +442,9 @@
               is_leaveok              curs_opaque(3x)*
               is_linetouched          curs_touch(3x)
               is_nodelay              curs_opaque(3x)*
-
               is_notimeout            curs_opaque(3x)*
               is_pad                  curs_opaque(3x)*
+
               is_scrollok             curs_opaque(3x)*
               is_subwin               curs_opaque(3x)*
               is_syncok               curs_opaque(3x)*
@@ -516,8 +509,8 @@
               mvscanw                 curs_scanw(3x)
               mvvline                 curs_border(3x)
               mvvline_set             curs_border_set(3x)
-
               mvwadd_wch              curs_add_wch(3x)
+
               mvwadd_wchnstr          curs_add_wchstr(3x)
               mvwadd_wchstr           curs_add_wchstr(3x)
               mvwaddch                curs_addch(3x)
@@ -649,8 +642,8 @@
               tputs                   curs_termcap(3x)
               tputs                   curs_terminfo(3x)
               trace                   curs_trace(3x)*
-              typeahead               curs_inopts(3x)
 
+              typeahead               curs_inopts(3x)
               unctrl                  curs_util(3x)
               unget_wch               curs_get_wch(3x)
               ungetch                 curs_getch(3x)
@@ -715,9 +708,9 @@
               wgetnstr                curs_getstr(3x)
               wgetparent              curs_opaque(3x)*
               wgetscrreg              curs_opaque(3x)*
+
               wgetstr                 curs_getstr(3x)
               whline                  curs_border(3x)
-
               whline_set              curs_border_set(3x)
               win_wch                 curs_in_wch(3x)
               win_wchnstr             curs_in_wchstr(3x)
@@ -759,17 +752,17 @@
 
 
 

RETURN VALUE

-       Routines that return an integer return  ERR  upon  failure
-       and  an  integer value other than ERR upon successful com-
-       pletion, unless otherwise noted in  the  routine  descrip-
+       Routines  that  return  an integer return ERR upon failure
+       and an integer value other than ERR 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  w  version,  except
+       All  macros  return  the  value  of  the w version, except
        setscrreg, wsetscrreg, getyx, getbegyx, and getmaxyx.  The
-       return values of setscrreg, wsetscrreg,  getyx,  getbegyx,
+       return  values  of setscrreg, wsetscrreg, getyx, getbegyx,
        and getmaxyx are undefined (i.e., these should not be used
        as the right-hand side of assignment statements).
 
@@ -782,80 +775,80 @@
        important ones have been already discussed in detail.
 
    CC
-       When set,  change  occurrences  of  the  command_character
+       When  set,  change  occurrences  of  the command_character
        (i.e.,  the  cmdch  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, ncurses ignores it  if
+       to  represent the C compiler's name, ncurses ignores it if
        it does not happen to be a single character.
 
 
 

BAUDRATE

-       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, ncurses 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.
 
 
 

COLUMNS

-       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 COLUMNS value nor the terminal's
-       screen size is available, ncurses uses the size which  may
-       be  specified  in  the  terminfo  database (i.e., the cols
+       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 COLUMNS value nor  the  terminal's
+       screen  size is available, ncurses uses the size which may
+       be specified in the  terminfo  database  (i.e.,  the  cols
        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
-       COLUMNS  and/or  LINES  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
+       COLUMNS and/or LINES overrides the library's  use  of  the
        screen size obtained from the operating system.
 
-       Either COLUMNS or LINES symbols may be specified  indepen-
-       dently.   This  is mainly useful to circumvent legacy mis-
-       features of terminal descriptions, e.g., xterm which  com-
+       Either  COLUMNS or LINES 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, lines
        and cols should not be specified in a terminal description
        for terminals which are run as emulations.
 
-       Use  the  use_env  function to disable all use of external
-       environment (but not including system calls) to  determine
-       the  screen  size.   Use the use_tioctl function to update
-       COLUMNS or LINES to match the screen  size  obtained  from
+       Use the use_env function to disable all  use  of  external
+       environment  (but not including system calls) to determine
+       the screen size.  Use the use_tioctl  function  to  update
+       COLUMNS  or  LINES  to match the screen size obtained from
        system calls or the terminal database.
 
 
 

ESCDELAY

-       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.
@@ -870,95 +863,95 @@
 
 
 

LINES

-       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.
 
 
 

MOUSE_BUTTONS_123

-       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, ncurses uses 132.
 
 
 

NCURSES_ASSUMED_COLORS

-       Override the compiled-in assumption  that  the  terminal's
-       default   colors   are  white-on-black  (see  default_col-
+       Override  the  compiled-in  assumption that the terminal's
+       default  colors  are  white-on-black   (see   default_col-
        ors(3x)).  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 max_colors
+       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  max_colors
        value is allowed.
 
 
 

NCURSES_CONSOLE2

        This applies only to the MinGW port of ncurses.
 
-       The Console2 program's handling of the  Microsoft  Console
+       The  Console2  program's handling of the Microsoft Console
        API call CreateConsoleScreenBuffer 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 NCGDB has the
+       contents.  Setting the environment variable NCGDB has  the
        same effect.
 
 
 

NCURSES_GPM_TERMS

-       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 TERM 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 TERM contains "linux".
 
 
 

NCURSES_NO_HARD_TABS

-       Ncurses 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 stty 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
+       Ncurses  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  stty  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.
 
 
 

NCURSES_NO_PADDING

        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
@@ -973,49 +966,49 @@
 
           o   continued though 5.9 patch 20130126
 
-       ncurses enabled buffered output during  terminal  initial-
-       ization.   This  was  done (as in SVr4 curses) for perfor-
-       mance reasons.  For testing purposes, both of ncurses  and
-       certain  applications,  this  feature  was  made optional.
-       Setting the  NCURSES_NO_SETBUF  variable  disabled  output
-       buffering,  leaving  the  output  in the original (usually
+       ncurses  enabled  buffered output during terminal initial-
+       ization.  This was done (as in SVr4  curses)  for  perfor-
+       mance  reasons.  For testing purposes, both of ncurses 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  putp  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 putp still use the  standard  output.   But  high-
        level curses calls do not.
 
 
 

NCURSES_NO_UTF8_ACS

        During initialization, the ncurses 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  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
        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 U8.  This is a
-       numeric capability which can  be  compiled  using  tic -x.
+       As  an  alternative  to  the environment variable, ncurses
+       checks for an extended terminfo capability U8.  This is  a
+       numeric  capability  which  can  be compiled using tic -x.
        For example
 
           # linux console, if patched to provide working
@@ -1028,18 +1021,18 @@
                   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.
 
 
 

NCURSES_TRACE

-       During   initialization,  the  ncurses  debugging  library
-       checks the NCURSES_TRACE environment variable.  If  it  is
+       During  initialization,  the  ncurses  debugging   library
+       checks  the  NCURSES_TRACE environment variable.  If it is
        defined, to a numeric value, ncurses calls the trace func-
        tion, using that value as the argument.
 
-       The argument values, which are defined in  curses.h,  pro-
-       vide  several  types  of  information.   When running with
+       The  argument  values, which are defined in curses.h, pro-
+       vide several types  of  information.   When  running  with
        traces enabled, your application will write the file trace
        to the current directory.
 
@@ -1047,57 +1040,101 @@
 
 
 

TERM

-       Denotes  your  terminal  type.  Each terminal type is dis-
+       Denotes your terminal type.  Each terminal  type  is  dis-
        tinct, though many are similar.
 
-       TERM 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
+       TERM  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 TERM 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 TERM 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 (xterm being a rare exception), terminal
-       emulators  which  allow you to specify TERM as a parameter
-       or configuration value do not  change  their  behavior  to
+       emulators which allow you to specify TERM as  a  parameter
+       or  configuration  value  do  not change their behavior to
        match that setting.
 
 
 

TERMCAP

-       If  the  ncurses  library has been configured with termcap
-       support, ncurses will check for a  terminal's  description
-       in  termcap  form  if  it is not available in the terminfo
+       If the ncurses library has been  configured  with  termcap
+       support,  ncurses  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 ncurses to ignore the usual place for this  infor-
+       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  ncurses to ignore the usual place for this infor-
        mation, e.g., /etc/termcap.
 
 
 

TERMINFO

-       Overrides the directory in which ncurses 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:
+       ncurses can be configured to read from  multiple  terminal
+       databases.   The  TERMINFO variable overrides the location
+       for the default terminal database.  Terminal  descriptions
+       (in terminal format) are stored in terminal databases:
 
-          o   the last directory to which ncurses wrote, if  any,
-              is searched first
+       o   Normally  these  are stored in a directory tree, using
+           subdirectories named by the first letter of the termi-
+           nal names therein.
 
-          o   the directory specified by the TERMINFO environment
+           This is the scheme used in System V, which legacy Unix
+           systems use, and the  TERMINFO  variable  is  used  by
+           curses  applications  on those systems to override the
+           default location of the terminal database.
+
+       o   If ncurses 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.
+
+       o   If ncurses is built with a support for reading termcap
+           files  directly, then an entry in this list may be the
+           path of a termcap file.
+
+       o   If the TERMINFO variable begins with "hex:" or "b64:",
+           ncurses  uses the remainder of that variable as a com-
+           piled terminal description.   You  might  produce  the
+           base64 format using infocmp(1m):
+
+             TERMINFO="$(infocmp -0 -Q2 -q)"
+             export TERMINFO
+
+           The  compiled description is used if it corresponds to
+           the terminal identified by the TERM variable.
+
+       Setting TERMINFO 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:
+
+          o   the last terminal database to which ncurses  wrote,
+              if any, is searched first
+
+          o   the  location specified by the TERMINFO environment
               variable
 
           o   $HOME/.terminfo
 
-          o   directories listed in the TERMINFO_DIRS environment
+          o   locations listed in the  TERMINFO_DIRS  environment
               variable
 
-          o   one  or more directories whose names are configured
+          o   one  or  more  locations whose names are configured
               and compiled into the ncurses library, i.e.,
 
              o   /usr/local/ncurses/share/ter-
@@ -1109,69 +1146,64 @@
 
 
 

TERMINFO_DIRS

-       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 ncurses 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 TERMINFO vari-
+       able.  The list is separated  by  colons  (i.e.,  ":")  on
+       Unix, semicolons on OS/2 EMX.
 
-       If ncurses 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 ncurses.
 
 
 

TERMPATH

-       If TERMCAP does not hold a file name then  ncurses  checks
-       the  TERMPATH  environment  variable.   This  is a list of
+       If TERMCAP does not hold a file name then  ncurses  checks
+       the  TERMPATH  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, ncurses
-       looks in the files  /etc/termcap,  /usr/share/misc/termcap
-       and $HOME/.termcap, in that order.
+       If  the  TERMPATH environment variable is not set, ncurses
+       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.
 
 
 

ALTERNATE CONFIGURATIONS

-       Several  different  configurations are possible, depending
-       on  the  configure  script  options  used  when   building
-       ncurses.   There  are a few main options whose effects are
+       Several different configurations are  possible,  depending
+       on   the  configure  script  options  used  when  building
+       ncurses.  There are a few main options whose  effects  are
        visible to the applications developer using ncurses:
 
        --disable-overwrite
-            The standard include for ncurses is as noted in  SYN-
+            The  standard include for ncurses is as noted in SYN-
             OPSIS:
 
           #include <curses.h>
 
-            This  option is used to avoid filename conflicts when
-            ncurses is not the main implementation of  curses  of
-            the  computer.   If  ncurses  is  installed disabling
-            overwrite, it puts its  headers  in  a  subdirectory,
+            This option is used to avoid filename conflicts  when
+            ncurses  is  not the main implementation of curses of
+            the computer.   If  ncurses  is  installed  disabling
+            overwrite,  it  puts  its  headers in a subdirectory,
             e.g.,
 
           #include <ncurses/curses.h>
 
-            It  also  omits a symbolic link which would allow you
+            It also omits a symbolic link which would  allow  you
             to use -lcurses to build executables.
 
        --enable-widec
-            The configure script renames the library and (if  the
-            --disable-overwrite  option  is used) puts the header
+            The  configure script renames the library and (if the
+            --disable-overwrite 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
 
           -lncurses
@@ -1181,16 +1213,16 @@
           -lncursesw
 
             You must also define _XOPEN_SOURCE_EXTENDED when com-
-            piling  for  the  wide-character  library  to use the
-            extended (wide-character)  functions.   The  curses.h
-            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 curses.h
+            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 WINDOW struc-
-            ture differs, and very few applications require  more
-            than  a  pointer  to  WINDOWs.   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  WINDOWs.   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
@@ -1198,10 +1230,10 @@
             library names have a "t" appended to them (before any
             "w" added by --enable-widec).
 
-            The  global  variables  such as LINES 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 LINES  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
@@ -1211,29 +1243,29 @@
        --with-debug
 
        --with-profile
-            The  shared  and normal (static) library names differ
-            by their  suffixes,  e.g.,  libncurses.so  and  libn-
-            curses.a.   The  debug  and profiling libraries add a
+            The shared and normal (static) library  names  differ
+            by  their  suffixes,  e.g.,  libncurses.so  and libn-
+            curses.a.  The debug and profiling  libraries  add  a
             "_g" and a "_p" to the root names respectively, e.g.,
             libncurses_g.a and libncurses_p.a.
 
        --with-trace
-            The  trace  function  normally  resides  in the debug
+            The trace 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.
 
 
 

FILES

        /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
 
 
 

SEE ALSO

-       terminfo(5)  and  related  pages whose names begin "curs_"
+       terminfo(5) and related pages whose  names  begin  "curs_"
        for detailed routine descriptions.
        curs_variables(3x)
 
@@ -1242,116 +1274,116 @@
        The  ncurses  library  can  be  compiled  with  an  option
        (-DUSE_GETCAP) that falls back to the old-style /etc/term-
        cap file if the terminal setup code cannot find a terminfo
-       entry  corresponding  to TERM.  Use of this feature is not
-       recommended, as it essentially includes an entire  termcap
-       compiler  in the ncurses startup code, at significant cost
+       entry corresponding to TERM.  Use of this feature  is  not
+       recommended,  as it essentially includes an entire termcap
+       compiler in the ncurses startup code, at significant  cost
        in core and startup cycles.
 
-       The ncurses  library  includes  facilities  for  capturing
-       mouse  events on certain terminals (including xterm).  See
+       The  ncurses  library  includes  facilities  for capturing
+       mouse events on certain terminals (including xterm).   See
        the curs_mouse(3x) manual page for details.
 
-       The ncurses library includes facilities for responding  to
-       window  resizing  events,  e.g., when running in an xterm.
-       See the resizeterm(3x) and wresize(3x)  manual  pages  for
-       details.   In addition, the library may be configured with
+       The  ncurses library includes facilities for responding to
+       window resizing events, e.g., when running  in  an  xterm.
+       See  the  resizeterm(3x)  and wresize(3x) manual pages for
+       details.  In addition, the library may be configured  with
        a SIGWINCH handler.
 
-       The ncurses library extends the fixed set of function  key
-       capabilities  of  terminals  by  allowing  the application
-       designer to define additional key  sequences  at  runtime.
+       The  ncurses 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 define_key(3x) key_defined(3x), and keyok(3x) man-
        ual pages for details.
 
        The ncurses 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 default_colors(3x) manual page for details.
 
-       The  ncurses  library  includes  a  function for directing
-       application output to a printer attached to  the  terminal
+       The ncurses library  includes  a  function  for  directing
+       application  output  to a printer attached to the terminal
        device.  See the curs_print(3x) manual page for details.
 
 
 

PORTABILITY

-       The  ncurses  library is intended to be BASE-level confor-
+       The ncurses 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 ncurses calls)  are
-       described  in  PORTABILITY  sections  of  the  library man
+       A small number of local differences (that  is,  individual
+       differences  between the XSI Curses and ncurses calls) are
+       described in  PORTABILITY  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:
 
-       o   The  routine  has_key  is  not part of XPG4, nor is it
-           present in SVr4.  See the curs_getch(3x)  manual  page
+       o   The routine has_key is not part of  XPG4,  nor  is  it
+           present  in  SVr4.  See the curs_getch(3x) manual page
            for details.
 
-       o   The  routine  slk_attr  is not part of XPG4, nor is it
+       o   The routine slk_attr is not part of XPG4,  nor  is  it
            present in SVr4.  See the curs_slk(3x) manual page for
            details.
 
        o   The routines getmouse, mousemask, ungetmouse, mousein-
            terval, and wenclose 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 curs_mouse(3x) manual page for details.
 
-       o   The routine mcprint was not present  in  any  previous
-           curses  implementation.  See the curs_print(3x) manual
+       o   The  routine  mcprint  was not present in any previous
+           curses implementation.  See the curs_print(3x)  manual
            page for details.
 
-       o   The routine wresize is not part of  XPG4,  nor  is  it
-           present  in SVr4.  See the wresize(3x) manual page for
+       o   The  routine  wresize  is  not part of XPG4, nor is it
+           present in SVr4.  See the wresize(3x) manual page  for
            details.
 
-       o   The WINDOW structure's internal details can be  hidden
-           from  application  programs.   See curs_opaque(3x) for
+       o   The  WINDOW structure's internal details can be hidden
+           from application programs.   See  curs_opaque(3x)  for
            the discussion of is_scrollok, etc.
 
        o   This implementation can be configured to provide rudi-
-           mentary  support for multi-threaded applications.  See
+           mentary support for multi-threaded applications.   See
            curs_threads(3x) for details.
 
-       o   This implementation can also be configured to  provide
+       o   This  implementation can also be configured to provide
            a set of functions which improve the ability to manage
            multiple screens.  See curs_sp_funcs(3x) for details.
 
-       In historic curses versions, delays embedded in the  capa-
+       In  historic curses versions, delays embedded in the capa-
        bilities cr, ind, cub1, ff and tab 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.
 
 
 

NOTES

-       The header  file  <curses.h>  automatically  includes  the
+       The  header  file  <curses.h>  automatically  includes the
        header files <stdio.h> and <unctrl.h>.
 
-       If  standard  output from a ncurses program is re-directed
-       to something which is not a tty, screen  updates  will  be
+       If standard output from a ncurses 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&T System V Release 3 curses.
 
 
 

AUTHORS

-       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.
 
 
diff --git a/doc/html/man/ncurses6-config.1.html b/doc/html/man/ncurses6-config.1.html
index aeac2228..f6eea73a 100644
--- a/doc/html/man/ncurses6-config.1.html
+++ b/doc/html/man/ncurses6-config.1.html
@@ -114,7 +114,7 @@
 

SEE ALSO

        curses(3x)
 
-       This describes ncurses version 6.0 (patch 20170128).
+       This describes ncurses version 6.0 (patch 20170204).
 
 
 
diff --git a/doc/html/man/panel.3x.html b/doc/html/man/panel.3x.html
index 909cf805..ada9e085 100644
--- a/doc/html/man/panel.3x.html
+++ b/doc/html/man/panel.3x.html
@@ -208,7 +208,7 @@
 

SEE ALSO

        curses(3x), curs_variables(3x),
 
-       This describes ncurses version 6.0 (patch 20170128).
+       This describes ncurses version 6.0 (patch 20170204).
 
 
 

AUTHOR

diff --git a/doc/html/man/tabs.1.html b/doc/html/man/tabs.1.html
index 39986de5..0eec4f5c 100644
--- a/doc/html/man/tabs.1.html
+++ b/doc/html/man/tabs.1.html
@@ -170,7 +170,7 @@
 

SEE ALSO

        tset(1), infocmp(1m), curses(3x), terminfo(5).
 
-       This describes ncurses version 6.0 (patch 20170128).
+       This describes ncurses version 6.0 (patch 20170204).
 
 
 
diff --git a/doc/html/man/terminfo.5.html b/doc/html/man/terminfo.5.html
index e7b3024b..8530bc4d 100644
--- a/doc/html/man/terminfo.5.html
+++ b/doc/html/man/terminfo.5.html
@@ -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 ncurses version 6.0 (patch 20170128).
+       This describes ncurses version 6.0 (patch 20170204).
 
        Entries in terminfo consist of a sequence of `,' separated
        fields (embedded commas may be escaped with a backslash or
diff --git a/doc/html/man/tic.1m.html b/doc/html/man/tic.1m.html
index d604add0..aabeafd0 100644
--- a/doc/html/man/tic.1m.html
+++ b/doc/html/man/tic.1m.html
@@ -403,7 +403,7 @@
        infocmp(1m),   captoinfo(1m),   infotocap(1m),    toe(1m),
        curses(3x), term(5).  terminfo(5).
 
-       This describes ncurses version 6.0 (patch 20170128).
+       This describes ncurses version 6.0 (patch 20170204).
 
 
 

AUTHOR

diff --git a/doc/html/man/toe.1m.html b/doc/html/man/toe.1m.html
index 2f16b05f..b6905f70 100644
--- a/doc/html/man/toe.1m.html
+++ b/doc/html/man/toe.1m.html
@@ -120,7 +120,7 @@
        tic(1m),    infocmp(1m),   captoinfo(1m),   infotocap(1m),
        curses(3x), terminfo(5).
 
-       This describes ncurses version 6.0 (patch 20170128).
+       This describes ncurses version 6.0 (patch 20170204).
 
 
 
diff --git a/doc/html/man/tput.1.html b/doc/html/man/tput.1.html
index 9a7790eb..a6888a1f 100644
--- a/doc/html/man/tput.1.html
+++ b/doc/html/man/tput.1.html
@@ -530,7 +530,7 @@
        clear(1),    stty(1),   tabs(1),   tset(1),   terminfo(5),
        curs_termcap(3x).
 
-       This describes ncurses version 6.0 (patch 20170128).
+       This describes ncurses version 6.0 (patch 20170204).
 
 
 
diff --git a/doc/html/man/tset.1.html b/doc/html/man/tset.1.html
index 67b1e086..62d8626d 100644
--- a/doc/html/man/tset.1.html
+++ b/doc/html/man/tset.1.html
@@ -435,7 +435,7 @@
        csh(1),   sh(1),   stty(1),   curs_terminfo(3x),   tty(4),
        terminfo(5), ttys(5), environ(7)
 
-       This describes ncurses version 6.0 (patch 20170128).
+       This describes ncurses version 6.0 (patch 20170204).
 
 
 
diff --git a/include/tic.h b/include/tic.h
index 528a1b7d..fb713afd 100644
--- a/include/tic.h
+++ b/include/tic.h
@@ -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.
diff --git a/man/infocmp.1m b/man/infocmp.1m
index d01b0a15..1e4bf1f5 100644
--- a/man/infocmp.1m
+++ b/man/infocmp.1m
@@ -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,
diff --git a/man/ncurses.3x b/man/ncurses.3x
index 92d3eaa9..8f33ebd7 100644
--- a/man/ncurses.3x
+++ b/man/ncurses.3x
@@ -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
@@ -37,6 +37,19 @@
 .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.
diff --git a/ncurses/curses.priv.h b/ncurses/curses.priv.h
index 654d7931..d7e16707 100644
--- a/ncurses/curses.priv.h
+++ b/ncurses/curses.priv.h
@@ -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 */
 
 /*
diff --git a/ncurses/tinfo/db_iterator.c b/ncurses/tinfo/db_iterator.c
index 19f22c31..17f16063 100644
--- a/ncurses/tinfo/db_iterator.c
+++ b/ncurses/tinfo/db_iterator.c
@@ -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 
 #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
diff --git a/ncurses/tinfo/read_entry.c b/ncurses/tinfo/read_entry.c
index 5afbca35..a221e2df 100644
--- a/ncurses/tinfo/read_entry.c
+++ b/ncurses/tinfo/read_entry.c
@@ -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 
 
-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();
diff --git a/ncurses/tinfo/write_entry.c b/ncurses/tinfo/write_entry.c
index 0000aa16..8a49a2c0 100644
--- a/ncurses/tinfo/write_entry.c
+++ b/ncurses/tinfo/write_entry.c
@@ -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            *
@@ -47,9 +47,11 @@
 #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;
 }
diff --git a/package/debian-mingw/changelog b/package/debian-mingw/changelog
index 0e024600..ab442c8d 100644
--- a/package/debian-mingw/changelog
+++ b/package/debian-mingw/changelog
@@ -1,8 +1,8 @@
-ncurses6 (6.0+20170128) unstable; urgency=low
+ncurses6 (6.0+20170204) unstable; urgency=low
 
   * latest weekly patch
 
- -- Thomas E. Dickey   Sat, 28 Jan 2017 09:18:58 -0500
+ -- Thomas E. Dickey   Fri, 03 Feb 2017 17:37:25 -0500
 
 ncurses6 (5.9-20131005) unstable; urgency=low
 
diff --git a/package/debian-mingw64/changelog b/package/debian-mingw64/changelog
index 0e024600..ab442c8d 100644
--- a/package/debian-mingw64/changelog
+++ b/package/debian-mingw64/changelog
@@ -1,8 +1,8 @@
-ncurses6 (6.0+20170128) unstable; urgency=low
+ncurses6 (6.0+20170204) unstable; urgency=low
 
   * latest weekly patch
 
- -- Thomas E. Dickey   Sat, 28 Jan 2017 09:18:58 -0500
+ -- Thomas E. Dickey   Fri, 03 Feb 2017 17:37:25 -0500
 
 ncurses6 (5.9-20131005) unstable; urgency=low
 
diff --git a/package/debian/changelog b/package/debian/changelog
index aad9ebc6..0da5e357 100644
--- a/package/debian/changelog
+++ b/package/debian/changelog
@@ -1,8 +1,8 @@
-ncurses6 (6.0+20170128) unstable; urgency=low
+ncurses6 (6.0+20170204) unstable; urgency=low
 
   * latest weekly patch
 
- -- Thomas E. Dickey   Sat, 28 Jan 2017 09:18:58 -0500
+ -- Thomas E. Dickey   Fri, 03 Feb 2017 17:37:25 -0500
 
 ncurses6 (5.9-20120608) unstable; urgency=low
 
diff --git a/package/mingw-ncurses.nsi b/package/mingw-ncurses.nsi
index dc77ba18..83b4da00 100644
--- a/package/mingw-ncurses.nsi
+++ b/package/mingw-ncurses.nsi
@@ -1,4 +1,4 @@
-; $Id: mingw-ncurses.nsi,v 1.195 2017/01/28 14:18:58 tom Exp $
+; $Id: mingw-ncurses.nsi,v 1.196 2017/02/03 22:37:25 tom Exp $
 
 ; TODO add examples
 ; TODO bump ABI to 6
@@ -10,7 +10,7 @@
 !define VERSION_MAJOR "6"
 !define VERSION_MINOR "0"
 !define VERSION_YYYY  "2017"
-!define VERSION_MMDD  "0128"
+!define VERSION_MMDD  "0204"
 !define VERSION_PATCH ${VERSION_YYYY}${VERSION_MMDD}
 
 !define MY_ABI   "5"
diff --git a/package/mingw-ncurses.spec b/package/mingw-ncurses.spec
index 8a6d5555..1fa1500d 100644
--- a/package/mingw-ncurses.spec
+++ b/package/mingw-ncurses.spec
@@ -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
diff --git a/package/ncurses.spec b/package/ncurses.spec
index 05fb2a8d..4c92018e 100644
--- a/package/ncurses.spec
+++ b/package/ncurses.spec
@@ -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
diff --git a/progs/dump_entry.c b/progs/dump_entry.c
index ea50fbc5..3be09f86 100644
--- a/progs/dump_entry.c
+++ b/progs/dump_entry.c
@@ -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 	/* 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;
 		}
 	    }
-- 
2.45.0