-------------------------------------------------------------------------------
-- Copyright 2018-2023,2024 Thomas E. Dickey                                 --
-- Copyright 1998-2017,2018 Free Software Foundation, Inc.                   --
--                                                                           --
-- Permission is hereby granted, free of charge, to any person obtaining a   --
-- copy of this software and associated documentation files (the             --
-- "Software"), to deal in the Software without restriction, including       --
-- without limitation the rights to use, copy, modify, merge, publish,       --
-- distribute, distribute with modifications, sublicense, and/or sell copies --
-- of the Software, and to permit persons to whom the Software is furnished  --
-- to do so, subject to the following conditions:                            --
--                                                                           --
-- The above copyright notice and this permission notice shall be included   --
-- in all copies or substantial portions of the Software.                    --
--                                                                           --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS   --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF                --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN --
-- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,       --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR     --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE --
-- USE OR OTHER DEALINGS IN THE SOFTWARE.                                    --
--                                                                           --
-- Except as contained in this notice, the name(s) of the above copyright    --
-- holders shall not be used in advertising or otherwise to promote the      --
-- sale, use or other dealings in this Software without prior written        --
-- authorization.                                                            --
-------------------------------------------------------------------------------
-- $Id: NEWS,v 1.4114 2024/04/27 18:00:35 tom Exp $
-------------------------------------------------------------------------------

This is a log of changes that ncurses has gone through since Zeyd started
working with Pavel Curtis' original work, pcurses, in 1992.

Changes through 1.9.9e are recorded by Zeyd M Ben-Halim.
Changes since 1.9.9e are recorded by Thomas E Dickey.

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

20240427 6.5 release for upload to ftp.gnu.org
	+ update announcement
	+ fixes/corrections for manpages (patches by Branden Robinson).
	+ fix redefinition of CASTxPTR, for legacy Unix.

20240420
	+ improve formatting/style of manpages (patches by Branden Robinson).
	+ compiler warning/portability fixes.

20240414
	+ build/bug-fix for check-size feature (reports by Sam James, Gabriele
	  Balducci).

20240413
	+ improve formatting/style of manpages (patches by Branden Robinson).
	+ provide for padding in check-size feature, using new_prescr() to
	  pass interim SCREEN pointer.
	+ complete change for opaque options (Gentoo #928973, cf: 20231021).
	+ update package /debian/rules and related lintian overrides
	+ revise progs.priv.h to provide for NC_ISATTY reuse

20240330
	+ remove masking of ISIG in cbreak() (report by Benno Schulenberg).
	+ modify test/test_mouse.c to use curses api for raw/noraw.
	> improved configure macros from other program development:
	  + build-fix for clang on Solaris
	  + suppress filename/timestamp in gzip'd manpages (suggested for
	    byacc by Andrin Geiger)

20240323
	+ modify tput/tset reset feature to avoid 1-second sleep if running in
	  a pseudo-terminal.
	+ modify check-size feature to avoid using it in a pseudoterminal
	  (cf: 20231016)
	+ improve formatting/style of manpages (patches by Branden Robinson).
	+ trim a space after some "-R" options, fixing builds for applications
	  built using clang and ncurses on Solaris.

20240309
	+ modify xgterm to work around line-drawing bug -TD
	+ use CSI 3J in vte-2017 (report by Sven Joachim)

20240302
	+ add configure check for MB_LEN_MAX, to provide warning as needed.
	+ improve formatting/style of manpages (patches by Branden Robinson).
	+ fix regression in tput which disallowed hex/octal parameters (report
	  by Werner Fink, cf:  20230408)
	+ update config.guess, config.sub

20240224
	+ improve man/curs_mouse.3x style (Branden Robinson, Sven Joachim).
	+ provide for CCHARW_MAX greater than 1
	+ eliminate use of PATH_MAX in lib_trace.c
	+ work around misconfiguration of MacPorts gcc13, which exposes invalid
	  definition of MB_LEN_MAX in gcc's fallback copy of limits.h (MacPorts
	  #69374).

20240217
	+ add vt100+noapp, vt100+noapp+pc, xterm+app+pc, xterm+decedit from
	  xterm #389 -TD
	+ fix inconsistent description of wmouse_trafo() (Debian #1059778).
	+ modify wenclose() to handle pads (Debian #1059783).
	+ improve manpage discussion of mouseinterval() (Debian #1058560).

20240210
	+ compiler-warning fixes, while investigating an optimizer bug in
	  "gcc (MacPorts gcc13 13.2.0_4+stdlib_flag) 13.2.0"
	  which results in only the first byte of a multibyte character being
	  printed to the screen.

20240203
	+ minor changes to tracing and locale-checks.

20240127
	+ amend change to z39-a (report by Sven Joachim).
	+ use xterm+nopcfkeys, vt52-basic, dec+pp, dec+sl, vt52+arrows,
	  hp+pfk+cr, klone+acs, klone+color, klone+sgr, ncr160wy50+pp
	  to trim -TD
	+ NetBSD-related fixes for x68k and wsvt25 (patch by Thomas Klausner)

20240120
	+ improve formatting/style of manpages (patches by Branden Robinson).
	+ amend discussion of aliases in tput.1
	+ use ansi+sgrbold, ansi+sgrdim, ansi+sgrso, ansi+sgrul, ansi+tabs
	  ecma+color, ecma+sgr, vt100+4bsd, vt100+pfkeys, vt220+pcedit
	  xterm+256color, xterm+acs, xterm+nopcfkeys, xterm+pcf2 to trim -TD
	+ modify configure scripts/makefiles to omit KEY_RESIZE if the
	  corresponding SIGWINCH feature is disabled.

20240113
	+ improve formatting/style of manpages (patches by Branden Robinson).
	+ modify dist.mk to avoid passing developer's comments in manpages into
	  the generated html documentation.
	+ use ansi+local, ansi+local1, ansi+pp, ansi+rca, ansi+rca2, ansi+sgr
	  to trim -TD
	+ restore padding for wy520* and vt320-k311 (report by Sven Joachim).

20240106
	+ use ansi+arrows, ansi+apparrows, ansi+csr, ansi+erase, ansi+idc,
	  ansi+idc1, ansi+idl, ansi+idl1, ansi+inittabs to trim -TD
	+ minor manpage formatting changes for consistency.
	+ modify doc-html test package's install-directory, per lintian.
	+ add attr_get.3x to man_db.renames.in (patch by Sven Joachim).

20231230
	+ improve formatting/style of manpages (patches by Branden Robinson).
	+ add ms-vt100-16color, winconsole -TD
	+ add rio, rio-direct -TD
	+ add mostlike -TD
	+ add wezterm, contour -TD

20231223
	+ improve formatting/style of manpages (patches by Branden Robinson).

20231217
	+ improve formatting/style of manpages (patches by Branden Robinson).
	+ correct an assignment in infocmp "-u" for detecting if a boolean
	  is unset in a base entry and set in a use'd chunk, i.e., if it was
	  cancelled.
	+ modify infocmp "-u" option to not report cancels for strings which
	  were already cancelled in a use'd chunk.
	+ join two lines in infotocap.3x to eliminate a spurious "description"
	  link in installed manpages (report by Sven Joachim).
	+ fix typo in NEWS (report by Sven Joachim).

20231209
	+ modify infocmp "-u" option to not report cancels in use'd chunks
	  which are not mentioned in the top-level terminal description.
	+ remove xterm+sm+1006 from tmux (Debian #1057688).
	+ used "infocmp -u" to help trim redundant capabilities -TD
	+ updated man/edit_man.sh to allow for "\%" markers embedded after
	  bold font escapes in manpage cross-references (Debian #1057651).
	+ reduce compiler-warnings in configure checks

20231202
	+ correct initial alignment of extended capabilities in infocmp, so
	  that the "-u" option can be used for more than two terminal types.
	+ improve formatting/style of manpages, changing environment variables
	  to italics (patches by Branden Robinson).

20231125
	+ add information about "ttycap", termcap's forerunner, to tset.1
	  (patch by Branden Robinson).
	+ improve formatting/style of manpages, including section reordering
	  (patches by Branden Robinson).
	+ modify usage messages in configure script, bracketing optional values
	  (report by Branden Robinson).

20231121
	+ amend fix for Debian #1055882, correcting nul terminator check in
	  waddnstr (Debian #1056340).

20231118
	+ improve description of length-parameter and error-returns in several
	  manpages:  curs_addchstr.3x, curs_addstr.3x, curs_addwstr.3x,
	  curs_in_wch.3x, curs_in_wchstr.3x, curs_inchstr.3x, curs_ins_wstr.3x,
	  curs_insstr.3x, curs_instr.3x, curs_inwstr.3x
	+ amend parameter check for entire string versus specific length in
	  winsnstr() and wins_nwstr() to match Solaris.
	+ make similar correction to wins_nwstr().
	+ correct loop termination condition in waddnstr() and waddnwstr()
	  (Debian #1055882, cf: 20201205).

20231111
	+ used "infocmp -u" to help trim redundant capabilities -TD
	+ add limit checks in infocmp needed when processing extended
	  capabilities with the "-u" option.
	+ fix inconsistent sort-order in see-also sections of manpages.
	+ fix a few compiler warnings for Solaris 10.
	+ modify endwin() to return an error if it is called again without an
	  intervening screen update (report by Rajeev Pillai, NetBSD #57592).

20231104
	+ modify reset command to avoid altering clocal if the terminal uses a
	  modem (prompted by discussion with Werner Fink, Michal Suchanek,
	  OpenSUSE #1201384, Debian #60377).
	+ build-fixes for --with-caps variations.
	+ correct a couple of section-references in INSTALL.

20231028
	+ move xterm focus mode 1004 from xterm+sm+1006 into xterm+focus as
	  fe/fd capabilities, like vim (vim-pr #13440).
	+ modify --with-pkg-config-libdir option to make "libdir" the default,
	  as documented, rather than "auto" (report by Branden Robinson).
	+ improve messages from configure script (patches by Branden Robinson).

20231021
	+ use oldxterm+sm+1006 in vte-2014 (report by Benno Schulenberg) -TD
	+ add ansi+apparrows -TD
	+ change defaults for configure opaque and widec options (prompted by
	  discussion with Branden Robinson).
	+ minor cleanup of compiler- and manpage-warnings.

20231016
	+ make the recent change to setupterm optional "--enable-check-size"
	  (Debian #1054022).

20231014
	+ improve formatting/style of manpages (patches by Branden Robinson).
	+ updated configure script macro CF_XOPEN_SOURCE, for uClibc-ng
	+ update config.guess, config.sub

20231007
	+ improve loop-limit for get_position().
	+ improve manual description of immedok (Debian #1053603).
	+ fix a few formatting issues with manpages (Debian #1053123).
	+ improve formatting/style of manpages (patches by Branden Robinson).

20231001
	+ modify setupterm to provide for using ANSI cursor-position report (in
	  user6/user7 terminfo capabilities) to obtain screensize if neither
	  environment variables or ioctl is used.  The ncurses test-program
	  with options "-E -T" demonstrates this feature.
	+ improve error messages in tic (patch by Branden Robinson).
	+ improve formatting/style of manpages (patches by Branden Robinson).
	+ modify test/clip_printw.c to optionally test non-wrapped updates.
	+ fix reallocation loop for vsnprintf() in _nc_sprintf_string() by
	  copying the va_list variable (patch by Ian Abbott).

20230923
	+ improve formatting of manpages (patches by Branden Robinson).
	+ amend change to delscreen() to limit the windows which it creates to
	  just those associated with the screen (report by Frederic Boiteux,
	  cf: 20220813).

20230918
	+ new tarball/errata (report by Sven Joachim).

20230917
	+ improve formatting of manpages (integrated patches by Branden
	  Robinson).
	+ correct limit for name-length in write_entry.c (report/testcase by
	  Luna Saphie Mittelbach).
	+ limit delays to 30 seconds, i.e., padding delays in terminfo, as well
	  as napms() and delay_output() functions.
	+ improve a few pointer-checks.
	+ improve parsing in _nc_msec_cost, allowing a single decimal point.

20230909
	+ improve formatting of manpages (patches by Branden Robinson), for
	  captoinfo.1m and terminfo.5
	> patches by Nicholas Marriott:
	  + use string-hacks in alloc_entry.c, alloc_type.c and hardscroll.c,
	    overlooked due to compiler changes in recent OpenBSD releases.
	  + add "-6" option to ncu2openbsd script.

20230902
	+ improve description of search rules for terminal descriptions in
	  terminfo manpage (report by Sven Joachim).

20230826
	+ fixes for compiler-warnings.
	+ update config.guess, config.sub

20230819
	+ various manpage-formatting fixes.
	+ correct formatting of table header in curs_inopts.3x (Branden
	  Robinson).
	+ correct manpage description of panel_hidden (report by Benjamin
	  Mordaunt).

20230812
	+ add/use putty+cursor to reflect amending of modified cursor-keys in
	  2021 -TD
	+ add ecma+strikeout to putty -TD
	+ add functions to query tty-flags in SCREEN (request by Bill Gray).

20230805
	+ fix a few manpages needing tbl marker, seen by lintian warning.
	+ fixes for compiler-warnings.
	+ minor grammatical fix for manpages (Branden Robinson).

20230729
	+ improve manpages for wgetnstr() and wget_wnstr().
	+ modify MinGW configuration to provide for running in MSYS/MSYS2
	  shells, assuming ConPTY support (patch by Pavel Fedin).
	+ add assignment in CF_MAN_PAGES to fill in value for TERMINFO_DIRS in
	  ncurses, terminfo and tic manpages (patch by Sven Joachim).

20230722
	+ add "auto" default for --with-xterm-kbs configure option.

20230715
	+ correct wadd_wch_literal() when adding a non-spacing character to a
	  double-width character.
	+ improve manual page for curs_util.
	+ improve manual page for wadd_wch().

20230708
	+ add linux+kbs for terminals which imitate xterm's behavior with
	  Linux -TD
	+ modify MinGW driver to return KEY_BACKSPACE when an unmodified
	  VK_BACK virtual key is entered (prompted by patch by Pavel Fedin,
	  Savannah #64292).
	+ disallow using $TERMINFO or $HOME/.terminfo when tic "-o" option is
	  used (report by Sven Joachim, Debian #1040048).

20230701
	+ fix mandoc warnings about unnecessary markup.
	+ improve parameter check in tparm_setup()

20230625
	+ adjust man/make_sed.sh to work with dates as the third field of TH.
	+ fixes for out-of-memory condition (report by "eaglegai").

20230624
	+ fixes for out-of-memory condition (report by "eaglegai").

20230617
	+ markup manpages with revision information (prompted by discussion
	  with Bjarni Ingi Gislason).

20230615
	+ modify _nc_read_file_entry() to show relevant filename in warnings.
	+ improve checks in convert_string() for corrupt terminfo entry (report
	  and test-case by Gregory James Duck).

20230610
	+ improve manpages discussing file descriptors in low-level functions.
	+ modify flushinp to use file descriptors in SCREEN, rather than from
	  TERMINAL, and check if they are for a terminal, like SVr4.
	+ modify mcprint to use file descriptor in SCREEN, for consistency.
	+ add xterm+focus to foot+base (patch by Daniel Ekloef).
	+ correct definition of Charable() for non-wide ncurses library (report
	  and test-case by Zbigniew Baniewski).

20230603
	+ add configure option --with-strip-program, to override program
	  chosen by the install program for stripping executables (prompted
	  by discussion with Aapo Rantalainen).
	+ fix typo in INSTALL (report/patch by Aapo Rantalainen).
	+ improve error-checks for isEILSEQ()
	+ increase MB_CUR_MAX to 16, matching glibc's MB_LEN_MAX.
	+ corrected mouse mask in test/testcurs.c
	+ improve thread lock in lib_trace.c

20230527
	+ fixes for compiler warnings/cppcheck.

20230520
	+ fixes for compiler warnings in MinGW environments.

20230514
	+ modify test-package "ncurses6-doc" to use manpage-aliases, which in
	  turn required a change to the configure script to factor in the
	  extra-suffix option when deriving alias names.
	+ add mode 1004 to xterm+sm+1006 from xterm #380 -TD

20230506
	> build-fixes related to configure-options and/or platform:
	  + fix for --enable-fvisibility
	  + fix for unusual values of --with-rel-version
	  + fix for unusual values of --with-abi-version
	  + fix for --disable-tcap-names
	  + fix for termcap in nc_access.h (report by Werner Fink).

20230429
	+ revise recent change to _nc_write_entry to isolate it to a Cygwin bug
	  (cf: 20230311)
	+ amend fix for wgetnstr, wgetn_wstr to use cbreak mode unless raw
	  mode was set (cf: 20210522).
	+ fix a few warnings from cppcheck, etc.
	+ correct copy/paste error in nc_access.h (report by Werner Fink).

20230424
	+ check return value of _nc_save_str(), in special case for tic where
	  extended capabilities are processed but the terminal description was
	  not initialized (report by Ziqiao Kong).
	+ regenerate llib-* files.

20230423
	+ add tiscan_s() to help applications check formatting capabilities
	  that would be passed to tiparm_s, etc.
	+ add tiparm_s() to provide applications a way to tell ncurses what
	  the expected parameters are for a capability (tmux #3531).
	+ improve check in lib_tparm.c, ensuring that a char* fits into a
	  TPARM_ARG.
	+ add --disable-setuid-environ configure option (request by Sven
	  Joachim).
	+ drop compatibility with obsolete versions of tack, e.g., pre-1.08
	  (Debian #1034549, cf: 20170722).

20230418
	+ improve checks for limits on privileged execution:
	  + modify _nc_syserr_abort() to use _nc_env_access(), rather than
	    only checking root uid.
	  + use getauxval() when available, to improve setuid/setgid checks.
	  + modify test packages to disable root access/environ options.
	+ modify tgoto() to accept no-parameter capabilities, for joe editor
	  (OpenSUSE #1210485, Gentoo #904263).

20230415
	+ configure script fixes:
	  + fix copy/paste error in configure option --disable-root-access
	    (report/patch by Sven Joachim).
	  + modify CF_XOPEN_SOURCE macro's amend default case to avoid
	    undefining _XOPEN_SOURCE if _POSIX_C_SOURCE is defined.
	+ modify test_tparm to account for extended capabilities.
	+ add checks in tparm() and tiparm() for misuse of numeric parameters,
	  overlooked in 20230408.
	+ fix errata in clear.1 and curs_terminfo.3x

20230408
	+ document limitations of tparm, and error-returns in curs_terminfo.3x
	+ document limitations of tgoto, and error-returns in curs_termcap.3x
	+ add xterm+focus to alacritty+common (patch by Christian Duerr).
	+ add "-v" option to tput, to show warnings.
	> improve checks for malformed terminfo data (report/analysis by
	  Jonathan Bar Or, Michael Pearse, Emanuele Cozzi).
	  + make the parameter type/count checks in _nc_tiparm() more stringent
	  + update tgoto() to account for _nc_tiparm() changes
	  + add checks in tparm() and tiparm() for misuse of string parameters
	  + add special cases in tput to handle extensions Cs/Ms parameters
	  + ignore compiled-terminfo where the array sizes exceed the standard

20230401
	+ modify experimental Windows driver to work with xterm mouse protocol.
	+ remove DECCOLM+DECSCLM from foot (patch by Daniel Ekloef).

20230311
	+ improve manpage description for addch versus unctrl format used for
	  non-printable characters.
	+ modify version-check for gcc/g++, now works for msys2.
	+ modify check in _nc_write_entry() for multiply defined aliases to
	  report problems within the current runtime of tic rather than for
	  conflicts with pre-existing terminal descriptions.
	+ allow for MinGW32-/64-bit configurations to use _DEFAULT_SOURCE
	+ clarify interaction of -R option versus -C, -I and -r in infocmp
	  manpage.
	+ build-fix in lib_win32con.c (cf: 20230211).

20230225
	+ build-fixes for rpm test-packages.
	+ add/use configure check for clock_gettime(), to supersede
	  gettimeofday().

20230218
	+ configure-script improvements:
	  + recent msys2 headers work with _DEFAULT_SOURCE; amend check
	  + use $ac_includes_default in most cases where stdlib.h should work
	  + use #error consistently vs "make an error"
	  + add configure macro for gettimeofday vs inline check

20230211
	+ set dwShareMode in calls to CreateConsoleScreenBuffer() (patch by
	  Hannes Domani).
	+ use CreateFile with "CONIN$", "CONOUT$" rather than GetStdHandle to
	  obtain a handle on the actual console, avoiding redirection in the
	  MinGW/Win32 configurations (adapted from patch by LIU Hao).

20230128
	+ document XF, kxIN and kxOUT -TD
	+ add note on sun/wscons/cmdtool/shelltool -TD
	+ modify configure script check for pkg-config library directory to
	  take into account an older version 0.15.0 which used PKG_CONFIG_PATH
	  but not PKG_CONFIG_LIBDIR

20230121
	+ correct limit-check when dumping tc/use clause via tic -I (report by
	  Gabriel Ravier).
	+ correct a check for manpage-alias in edit_man.sh, to work with out of
	  tree builds (report by Sven Joachim).

20230114
	+ change RV to XR/xr, to avoid conflict with pre-existing usage in vim,
	  to use RV/rv to denote DA2 and its response (discussion with Bram
	  Moolenaar) -TD
	+ add XF flag to xterm+focus so that termcap applications can be aware
	  of terminals which may support focus in/out -TD
	+ use xterm+focus in xterm-p370 and tmux -TD
	+ improve configure-script macros vs compiler warnings.

20230107
	+ add --with-abi-altered configure option (prompted by discussion with
	  Brian Inglis).
	+ add BSD erase2 to characters handled by tset/reset.
	+ improve configure-script macros vs compiler warnings.
	+ regenerate configure scripts with autoconf 2.52.20221202
	+ add RV report+version (suggested by Bram Moolenaar).
	+ add comment to bracketed+paste explaining that vim patch 9.0.1117 is
	  needed for use with the updated xterm descriptions (suggested by Bram
	  Moolenaar).

20221231 6.4 release for upload to ftp.gnu.org
	+ update release notes
	+ regenerate llib-* files.
	+ correct PS vs PE names in bracketed+paste (report by Bram Moolenaar)
	  -TD

20221224
	+ add mutex lock/unlock in a few places reported by thread-sanitizer
	+ add/use bracketed+paste to help identify terminals supporting this
	  xterm feature (prompted by discussion with Bram Moolenaar) -TD

20221217
	+ install Ada95 sample programs in libexecdir, adding a wrapper
	  script to invoke those.

20221210
	+ add minimal -h/-V getopt logic to the remaining test-programs.
	+ free new_pair() data in delscreen (report by "magiblot").
	+ add clarification of the scope of dynamic variables in terminfo(5).
	+ remove a stray '/' from description of %g in terminfo(5).

20221203
	+ add -h usage and -V version options to the test-programs which use
	  getopt.
	+ use "command -v" rather than "type" in Ada95/gen/Makefile.in to fix
	  a portability issue (patch by Nicolas Boulenguez).
	+ update ncurses-howto, more documentation fixes along with corrections
	  to example programs.

20221126
	+ fix an error in pathname of explain.txt (cf: 20200201).
	+ fix an error in "@" command in test/ncurses.c F-menu (cf: 20190121).
	+ improve formatting of ncurses-intro.html and hackguide.html
	+ improve man/curs_clear.3x links to other pages

20221119
	+ use static libraries for AdaCurses test-package for Mageia, since no
	  gprbuild package is available.
	+ updated test packages for Debian.

20221112
	+ build-fixes for AdaCurses RPM test-package.

20221105
	+ regenerate configure scripts with autoconf 2.52.20221009
	+ modify "--with-manpage-format" to support bzip2 and xz compression
	  (prompted by discussion with Sam James).
	+ modify make-tar.sh scripts to make timestamps more predictable.

20221029
	+ improve curs_slk.3x discussion of extensions and portability (report
	  by Bill Gray).

20221023
	+ change man_db.renames to template, to handle ncurses*-config script
	  with the extra-suffix configure option.

20221015
	+ fix another memory-leak in tic.
	+ update install-sh script from autoconf, to fix install problem for
	  Ada95 with Arch; as noted in
	  https://lists.gnu.org/archive/html/automake/2018-09/msg00005.html
	  there are unaddressed issues.
	+ update CF_XOPEN_SOURCE, adding GNU libc suffixes for abi64, abin32,
	  x32 (report by Sven Joachim):
	+ correct ifdef's for _nc_set_read_thread() (patch by Mikhail Korolev,
	  cf: 20220813).

20221008
	+ correct a switch-statement case in configure script to allow for test
	  builds with ABI=7.
	+ modify misc/gen-pkgconfig.in to allow for the case where the library
	  directory does not yet exist, since this is processed before doing an
	  install (report by Michal Liszcz).

20221001
	+ modify configure/scripts to work around interference by GNU grep 3.8
	  (report by Sam James).
	+ update CF_XOPEN_SOURCE, adding variants "gnueabi" and "gnueabihf" to
	  get _DEFAULT_SOURCE special case (report by Adam Sampson)

20220924
	+ modify configure macro CF_BUILD_CC to check if the build-compiler
	  works, rather than that it is different from the cross-compiler, e.g.,
	  to accommodate a compiler which can be used for either purpose with
	  different flags (report by Mikhail Korolev).
	+ fix another memory-leak in tic.
	+ correct change for cppcheck in menu library (report/analysis by
	  "tuxway", cf: 20220903).
	+ update config.guess, config.sub

20220917
	+ reduce memory-leak in tic by separating allocations for struct entry
	  from TERMTYPE2 (cf: 20220430).
	+ improve interaction between tic -v option and NCURSES_TRACE, by
	  processing the latter only when -v option does not set _nc_tracing.
	+ modify curses_trace() to show the trace-mask as symbols, e.g.,
	  TRACE_ORDINARY, DEBUG_LEVEL(3).

20220910
	+ amend verbose-option change to make this affect level 3, e.g., using
	  "tic -cv3 terminfo".
	+ work around musl's nonstandard use of feature test macros by adding
	  a definition for NCURSES_WIDECHAR to the generated ".pc" and *-config
	  files (report by Sam James).

20220903
	+ modify verbose-option of infocmp, tic, toe to enable debug-tracing
	  if that is configured.

20220827
	+ modify configure scripts to use overlooked cases for LD and
	  PKG_CONFIG variables (report by Alan Webb, Gentoo #866398).
	+ modify nsterm to use xterm+alt1049 (report by Paul Handly) -TD
	+ modify putty to use xterm+alt1049 -TD

20220820
	+ fix some cppcheck warnings, mostly style, in ncurses and c++
	  libraries and progs directory.
	+ add curses_trace to ifdef's for START_TRACE in test/test.priv.h
	+ update config.guess

20220813
	+ modify delscreen to more effectively delete all windows on the given
	  screen.
	+ amend portability note for delwin in manual page.
	+ adapt test/test_delwin.c from example by Bill Gray.
	+ account for prescreen data if freeing leaks in pthread-configuration
	+ split-out _nc_set_read_thread(), to reduce compiler warnings about
	  pthread_self(), which may/may not be a weak symbol.
	+ improve pthread-configuration for test/worm.c

20220806
	+ amend end_of_stream() to allow for input files without a final
	  newline.
	+ check for non-textfiles to tic.

20220729
	+ fixes to build with dietlibc:
	  + add configure check for fpathconf (report by Georg Lehner).
	  + add configure check for math sine/cosine, needed in test/tclock,
	    and eliminate pow() from test/hanoi (report by Georg Lehner).
	  + use wcsnlen as an alternative to wmemchr if it is not found
	    (adapted from patch by Georg Lehner).
	+ trim out some unwanted linker options from ncurses*config and .pc
	  files seen in Fedora 36+.

20220724
	+ add portability notes for delscreen and delwin in manual.
	+ improve pthread-configuration for test/worm.c, test/rain.c
	+ improve pointer/limit checks associated with deleting a screen
	  (Debian #1015756).

20220716
	+ build-fix for test_mouse.c, for non-standard cfmakeraw.
	+ improve shell-scripts with shellcheck
	+ fix typo in run_tic.in (report/patch by Jan Starke).

20220709
	+ lock the prescreen data consistently in newterm, etc., for the
	  pthreads configuration (report by Tom de Vries).

20220703
	+ add consistency check in tic for u6/u7/u8/u9 and NQ capabilities.
	+ use NQ to flag entries where the terminal does not support query and
	  response -TD
	+ use ansi+enq and decid+cpr in cases where the terminal probably
	  supported the u6-u9 extension -TD
	+ add/use apollo+vt132, xterm+alt47 -TD

20220625
	+ improve man/curs_bkgd.3x, explaining that bkgdset can affect results
	  for bkgd (report by Anton Vidovic).
	+ correct dsl in dec+sl (report by Rajeev Pillai) -TD
	+ add/use ansi+cpr, decid+cpr -TD

20220618
	+ add a null-pointer check for term_names field in copy_termtype(),
	  needed for MinGW port (report by Peiyuan Song, cf: 20220521).
	+ revise kon/kon2/jfbterm to undo "linux2.6" change to
	  smacs/rmacs/enacs (Debian #1012800) -TD
	+ amended note for att610+cvis0, as per documentation for att610,
	  att620, att730 -TD

20220612
	+ modify waddch_literal() to allow for double-width base character when
	  merging a combining character (report by Gavin Troy).
	+ improve _tracecchar_t2() formatting of base+combining character.

20220604
	+ add note on portable memory-leak checking in man/curs_memleaks.3x
	+ remove u6-u9 from teken-2018 -TD
	+ set "xterm-new" to "xterm-p370", add "xterm-p371" -TD

20220529
	+ expanded notes for teken/syscons -TD
	+ fix overlooked copying of extended string-heap in copy_termtype
	  (cf: 20220430).
	+ update config.guess

20220521
	+ improve memory-leak checking in several test-programs.
	+ set trailing null on string passed from winsnstr() to wins_nwstr().
	+ modify del_curterm() to fix memory-leak introduced by change to
	  copy_termtype().

20220514
	+ further improvements to test/test_mouse.c; compare with ncurses test
	  program menu A/a.

20220507
	+ add test/test_mouse.c (patch by Leonid S Usov).
	+ add a few debug-traces for tic, fix a couple of memory-leaks.

20220501
	+ build-fix for debug-traces (report/patch by Chris Clayton).

20220430
	+ modify samples for xterm mouse 1002/1003 modes to use 1006 mode, and
	  also provide for focus in/out responses -TD
	+ modify default case in handle_wheel() to always report button-release
	  events, e.g., for xterm mouse mode 1003 (patch by Leonid S Usov).
	+ improve valid_entryname() to disallow characters used in terminfo
	  syntax: '#', '=', '|', '\'.
	+ alter copy_termtype() to allocate new str_table and ext_str_table
	  data rather than relying upon its callers.
	+ use calloc in _nc_init_entry() when allocating stringbuf, to ensure
	  it is initialized.
	+ add library-level TYPE_CALLOC for consistency with TYPE_MALLOC.
	+ add some debug-traces for tic/infocmp.

20220423
	+ in-progress work on invalid_merge(), disable it (cf: 20220402).
	+ fix memory leak in _nc_tic_dir() when called from _nc_set_writedir().
	+ fix memory leak in tic when "-c" option is used.

20220416
	+ add a limit-check to guard against corrupt terminfo data
	  (report/testcase by NCNIPC of China).
	+ add check/warning in configure script if option --with-xterm-kbs is
	  missing or inconsistent (Arch #74379).
	+ add setlocale call to several test-programs.
	+ allow extended-color number in opts parameter of wattr_on.

20220409
	+ add test/test_unget_wch.c

20220402
	+ amend extended_captype(), returning CANCEL if a string is explicitly
	  cancelled.
	+ make description-fields distinct -TD

20220326
	+ update teken -TD
	+ add teken-16color, teken-vt and teken-sc -TD
	+ add a few missing details for vte-2018 (report by Robert Lange) -TD

20220319
	+ add xgterm -TD
	+ correct setal in mintty/tmux entries, add to vte-2018 (report by
	  Robert Lange)
	+ add blink to vte-2018 (report by Robert Lange)
	+ improve tic warning about XT versus redundant tsl, etc.

20220312
	+ add xterm+acs building-block -TD
	+ add xterm-p370, for use in older terminals -TD
	+ add dec+sl to xterm-new, per xterm patch #371 -TD
	+ add mosh and mosh-256color -TD

20220305
	+ replace obsolescent "-gnatg" option with "-gnatwa" and "-gnatyg", to
	  work around build problems with gnat 12.
	+ update external links in Ada95.html
	+ trim unused return-value from canonical_name().

20220226
	+ fix issues found with coverity:
	  + rewrite canonical_name() function of infocmp to ensure buffer size
	  + corrected use of original tty-modes in tput init/reset subcommands
	  + modify tabs program to limit tab-stop values to max-columns
	  + add limit-checks for palette rgb values in test/ncurses.c
	+ add a few null-pointer checks to help with static-analysis.
	+ enforce limit on number of soft-keys used in c++ binding.
	+ adjust a buffer-limit in write_entry.c to quiet a bogus warning from
	  gcc 12.0.1

20220219
	+ expanded description in man/resizeterm.3x
	+ additional workaround for ImageMagick in test/picsmap.c

20220212
	+ improve font-formatting in other manpages, for consistency.
	+ correct/improve font-formatting in curs_wgetch.3x (patch by Benno
	  Schulenberg).

20220205
	+ workaround in test/picsmap.c for use of floating point for rgb values
	  by ImageMagick 6.9.11, which appears to use the wrong upper limit.
	+ improve use of "trap" in shell scripts, using "fixup-trap".

20220129
	+ minor updates for test-packages
	+ improve handling of --with-pkg-config-libdir option, allowing for the
	  case where either $PKG_CONFIG_LIBDIR or the option value has a
	  colon-separated list of directories (report by Rudi Heitbaum,
	  cf: 20211113).
	+ update kitty -TD

20220122
	+ add ABI 7 defaults to configure script.
	+ add warning in configure script if file specified for "--with-caps"
	  does not exist.
	+ use fix for CF_FIX_WARNINGS from cdk-perl, ignoring error-exit on
	  format-warnings.
	+ improve readability of long parameterized expressions with the
	  infocmp "-f" option by allowing split before a "%p" marker.

20220115
	+ improve checks for valid mouse events when an intermediate mouse
	  state is not part of the mousemask specified by the caller (report by
	  Anton Vidovic, cf: 20111022).
	+ use newer version 1.36 of gnathtml for generating Ada html files.

20220101
	+ add section on releasing memory to curs_termcap.3x and
	  curs_terminfo.3x manpages.

20211225
	+ improve markup, e.g., for external manpage links in the manpages
	  (prompted by report by Helge Kreutzmann).

20211219
	+ install ncurses-examples programs in libexecdir, adding a wrapper
	  script to invoke those.
	+ add help-screen and screen-dump to test/combine.c

20211211
	+ add test/combine.c, to demo/test combining characters.

20211204
	+ improve configure check for getttynam (report by Werner Fink).

20211127
	+ fix errata in description fields (report by Eric Lindblad) -TD
	+ add x10term+sl, aixterm+sl, ncr260vp+sl, ncr260vp+vt, wyse+sl -TD

20211120
	+ add dim, ecma+strikeout to st-0.6 -TD
	+ deallocate the tparm cache when del_curterm is called for the last
	  allocated TERMINAL structure (report/testcase by Bram Moolenaar,
	  cf: 20200531).
	+ modify test-package to more closely conform to Debian multi-arch.
	+ if the --with-pkg-config-libdir option is not given, use
	  ${libdir}/pkgconfig as a default (prompted by discussion with Ross
	  Burton).

20211115
	+ fix memory-leak in delwin for pads (report by Werner Fink, OpenSUSE
	  #1192668, cf:  20211106),

20211113
	+ minor clarification to clear.1 (Debian #999437).
	+ add xterm+sl-alt, use that in foot+base (report by Jonas Grosse
	  Sundrup) -TD
	+ improve search-path check for pkg-config, for Debian testing which
	  installs pkg-config with architecture-prefixes.

20211106
	+ improve check in misc/Makefile.in for empty $PKG_CONFIG_LIBDIR
	+ modify wnoutrefresh to call pnoutrefresh if its parameter is a pad,
	  rather than treating it as an error, and modify new_panel to permit
	  its window-parameter to be a pad (report by Giorgos Xou).
	+ fix a memory-leak in del_curterm (prompted by discussion with Bram
	  Moolenaar, cf: 20210821).

20211030
	+ simplify some references to WINDOWS._flags using macros.
	+ add a "check" rule in Ada95 makefile, to help with test-packages.
	+ build-fix for cross-compiling to MingW, conditionally add -lssp

20211026
	+ corrected regex needed for older pkg-config used in Solaris 10.
	+ amend configure option's auto-search to account for systems where
	  none of the directories known to pkg-config exist, adapted from
	  mailing-list comment (report by Milan P. Stanic).

20211021 6.3 release for upload to ftp.gnu.org
	+ update release notes
	+ add "ncu2openbsd" script, to illustrate how to update an OpenBSD
	  system to use a current ncurses release.

20211018
	+ check for screen size-change in scr_init() and scr_restore(), in case
	  a screen dump does not match the current screen dimensions (report by
	  Frank Tkalcevic).

20211017
	+ amend change for pkg-config to account for "none" being returned in
	  the libdir-path result rather than "no" (report by Gabriele Balducci).

20211016
	+ build-fix for pmake with libtool.
	+ improve make-tar.sh scripts, adding COPYING to tar file, and clean up
	  shellcheck warnings.
	+ add link for "reset6" manpage in test-package ncurses6-doc
	+ revise configure option --with-pkg-config-libdir, using the actual
	  search path from pkg-config or pkgconf using the output from --debug
	  (report by Pascal Pignard).
	+ freeze ABI in ".map" files.

20211009
	+ implement "+m" option in tabs program.
	+ fill in some details for infoton -TD
	+ fix spelling/consistency in several descriptions -TD
	+ use vt420+lrmm in vt420 -TD
	+ modify save_tty_settings() to avoid opening /dev/tty for cases other
	  than reset/init, e.g., for clear.
	+ modify output of "toe -as" to show first description found rather
	  than the last.
	+ improve tic checks for number of parameters of smglp, smgrp, smgtp,
	  and smgbp (cf: 20020525).
	+ correct off-by-one comparison in last_char(), which did not allow
	  special case of ":" in a terminfo description field (cf: 20120407).
	+ remove check in tic that assumes that none or both parameterized and
	  non-parameterized margin-setting capabilities are present
	  (cf: 20101002).

20211002
	+ use return-value from vsnprintf to reallocate as needed to allow for
	  buffers larger than the screen size (report by "_RuRo_").
	+ modify tset "-q" option to refrain from modifying terminal modes, to
	  match the documentation.
	+ add section on margins to terminfo.5, adapted from X/Open Curses.
	+ make tput/tset warning messages consistently using alias names when
	  those are used, rather than the underlying program's name.
	+ improve tput usage message for aliases such as clear, by eliminating
	  tput-specific portions.
	+ add a check in toe to ensure that a "termcap file" is text rather
	  than binary.
	+ further build-fixes for OpenBSD 6.9, whose header files differ from
	  the other BSDs.

20210925
	+ add kbeg to xterm+keypad to accommodate termcap applications -TD
	+ add smglp and smgrp to vt420+lrmm, to provide useful data for the
	  "tabs" +m option -TD
	+ build-fix for gcc 3.4.3 with Solaris10, which does not allow forward
	  reference of anonymous struct typedef.
	+ modify tput to allow multiple commands per line.
	+ minor fixes for tset manpage.

20210911
	+ adjust ifdef in test_opaque.c to fix build with ncurses 5.7
	+ add testing note for xterm-{hp|sco|sun} -TD
	+ corrected description for ansi.sys-old -TD
	+ add xterm+nopcfkeys, to fill in keys for xterm-hp, xterm-sun -TD
	+ use hp+arrows in a few places -TD
	+ use hp+pfk-cr in a few places -TD

20210905
	+ correct logic in filtering of redefinitions (report by Sven Joachim,
	  cf: 20210828).

20210904
	+ modify linux3.0 entry to reflect default mapping of shift-tab by
	  kbd 1.14 (report by Jan Engelhardt) -TD
	+ add historical note to tput, curses-terminfo and curses-color
	  manpages based on source-code for SVr2, SVr3 and SVr4.
	+ minor grammatical fixes for "it's" vs "its" (report by Nick Black).
	+ amend fix for --disable-root-environ (report by Arnav Singh).
	+ build-fix for compiling link_test
	+ drop symbols GCC_PRINTF and GCC_SCANF from curses.h.in, to simplify
	  use (Debian #993179).

20210828
	+ correct reversed check for --disable-root-environ (report/analysis
	  by Arnav Singh, cf: 20210626).
	+ apply gcc format attribute to prototypes which use a va_list
	  parameter rather than a "..." variable-length parameter list
	  (prompted by discussion in a tmux pull-request).
	+ modify configure scripts to filter out redefinitions of _XOPEN_SOURCE,
	  e.g., for NetBSD which generally supports 500, but 600 is needed for
	  ncursesw.
	+ improve documentation for tparm and static/dynamic variables.
	+ improve typography in terminfo.5 (patch by Branden Robinson).

20210821
	+ improve tparm implementation of %P and %g, more closely matching
	  SVr4 terminfo.
	+ move internals of TERMINAL structure to new header term.priv.h
	+ add "check" rule for ncurses/Makefile
	+ corrected tsl capability for terminator -TD
	+ add check in tic to report instances where tparm would detect an
	  error in an expression (cf: 20201010).
	+ correct a few places where SP->_pair_limit was used rather than
	  SP->_pair_alloc (cf: 20170812).
	+ fix missing "%d" for setaf/setab code 8-15 in xterm+direct16 (report
	  by Florian Weimer) -TD
	+ fix some documentation errata from OpenBSD changes.
	+ update config.sub

20210814
	+ add workaround for broken pcre2 package in Debian 10, from xterm #369.

20210807
	+ ignore "--dynamic-linker" option in generated pkg/config files,
	  adapted from "distr1" patch.
	+ add CF_SHARED_OPTS case for Haiku, from patch in haikuports.

20210731
	+ add extensions in xterm+tmux and ecma+strikeout to ms-terminal,
	  but cancel the non-working Cr and Ms capabilities -TD
	+ add foot and foot-direct -TD

20210724
	+ add workaround for Windows Terminal's problems with CR/LF mapping to
	  ms-terminal (patch by Juergen Pfeifer).
	+ review/update current Windows Terminal vs ms-terminal -TD

20210718
	+ correct typo in "vip" comments (report by Nick Black), reviewed this
	  against Glink manual -TD
	+ fill in some missing pieces for pccons, to make it comparable to the
	  vt220 entry -TD
	+ modify mk-1st.awk to account for extra-suffix configure option
	  (report by Juergen Pfeifer).
	+ change default for --disable-wattr-macros option to help packagers
	  who reuse wide ncursesw header file with non-wide ncurses library.
	+ build-fix for test/test_opaque.c, for configurations without opaque
	  curses structs.

20210710
	+ improve history section for tset manpage based on the 1BSD tarball,
	  which preceded BSD's SCCS checkins by more than three years.
	+ improve CF_XOPEN_CURSES macro used in test/configure (report by Urs
	  Jansen).
	+ further improvement of libtool configuration, adding a dependency of
	  the install.tic rule, etc., on the library in the build-tree.
	+ update config.sub

20210703
	+ amend libtool configuration to add dependency for install.tic, etc.,
	  in ncurses/Makefile on the lower-level libraries.
	+ modify configure script to support ".PHONY" make program feature.

20210626
	+ add configure option --disable-root-access, which tells ncurses to
	  disallow most file-opens by setuid processes.
	+ use default colors in pccon "op" -TD
	+ correct rmacs/smacs in aaa+dec, aaa+rv -TD
	+ add hpterm-color2 and hp98550-color (Martin Trusler)
	+ regenerate man-html documentation.

20210619
	+ improve configure-macro used for dependencies of --disable-leaks such
	  as --with-valgrind
	+ trim trailing blanks from files

20210612
	+ fixes for scan-build, valgrind build/testing.
	+ update config.guess

20210605
	+ add a summary of ncurses-specific preprocessor symbols to curses.h
	  (prompted by discussion with Peter Farley, Bill Gray).

20210522
	+ regenerate configure scripts with autoconf 2.52.20210509 to eliminate
	  an unnecessary warning in config.log (report by Miroslav Lichvar).
	+ add a note in manual page to explain ungetch vs unget_wch (prompted
	  by discussion with Peter Farley).
	+ add sp-funcs for erasewchar, killwchar.
	+ modify wgetnstr, wgetn_wstr to improve compatibility with SVr4 curses
	  in its treatment of interrupt and quit characters (prompted by
	  report/testcase by Bill Gray)
	+ update config.guess, config.sub

20210515
	+ improve manual pages for wgetnstr, newwin (prompted by
	  report/testcase by Bill Gray).

20210508
	+ modify tputs' error check to allow it to be used without first
	  calling tgetent or setupterm, noting that terminfo initialization
	  is required for supporting the terminfo delay feature (report by
	  Sebastiano Vigna).
	+ fix several warnings from clang --analyze
	+ add null-pointer check in comp_parse.c, when a "use=" clause refers
	  to a nonexisting terminal description (report/patch by Miroslav
	  Lichvar, cf: 20210227).

20210501
	+ add a special case in the configure script to work around one of the
	  build-time breakages reported for OpenBSD 6 here:
	     https://www.mail-archive.com/bugs@openbsd.org/msg13200.html
	  There is no workaround for the other issue, a broken linker spec.
	+ modify configure check for libtool to prevent accidental use of an
	  OpenBSD program which uses the same name.
	+ update config.guess, config.sub

20210424
	+ avoid using broken system macros for snprintf which interfere with
	  _nc_SLIMIT's conditionally adding a parameter when the string-hacks
	  configure option is enabled.
	+ add a "all::" rule before the new "check" rule in test/Makefile.in

20210418
	+ improve CF_LINK_FUNCS by ensuring that the source-file is closed
	  before linking to the target.
	+ add "check" rules for headers in c++, progs and test-directories.
	+ build-fix for termsort module when configured with termcap (reports
	  by Rajeev V Pillai, Rudi Heitbaum).

20210417
	+ extend --disable-pkg-ldflags option to also control whether $LDFLAGS
	  from the build is provided in -config and .pc files (Debian #986764).
	+ fix some cppcheck warnings, mostly style, in ncurses and c++
	  libraries and progs directory.
	+ fix off-by-one limit for tput's processing command-line arguments
	  (patch by Hadrien Lacour).

20210403
	+ fix some cppcheck warnings, mostly style, in ncurses library and
	  progs directory.
	+ improve description of BSD-style padding in curs_termcap.3x
	+ improved CF_C11_NORETURN macro, from byacc changes.
	+ fix "--enable-leak" in CF_DISABLE_LEAKS to allow turning
	  leak-checking off later in a set of options.
	+ relax modification-time comparison in CF_LINK_FUNCS to allow it to
	  accept link() function with NFS filesystems which change the mtime
	  on the link target, e.g., several BSD systems.
	+ call delay_output_sp to handle BSD-style padding when tputs_sp is
	  called, whether directly or internally, to ensure that the SCREEN
	  pointer is passed correctly (reports by Henric Jungheim, Juraj
	  Lutter).

20210327
	+ build-fixes for Solaris10 /bin/sh
	+ fix some cppcheck warnings, mostly style, in ncurses test-programs,
	  form and menu libraries.

20210323
	+ add configure option --enable-stdnoreturn, making the _Noreturn
	  keyword optional to ease transition (prompted by report by
	  Rajeev V Pillai).

20210320
	+ improve parameter-checking in tput by forcing it to analyze any
	  extended string capability, e.g., as used in the Cs and Ms
	  capabilities of the tmux description (report by Brad Town,
	  cf: 20200531).
	+ remove an incorrect free in the fallback (non-checking) version of
	  _nc_free_and_exit (report by Miroslav Lichvar).
	+ correct use-ordering in some xterm-direct flavors -TD
	+ add hterm, hterm-256color (Mike Frysinger)
	+ if the build-time compiler accepts c11's _Noreturn keyword, use that
	  rather than gcc's attribute.
	+ change configure-check for gcc's noreturn attribute to assume it is
	  a prefix rather than suffix, matching c11's _Noreturn convention.
	+ add "lint" rule to c++/Makefile, e.g., with cppcheck.

20210313
	+ improve configure CF_LD_SEARCHPATH macro used for ncurses*-config and
	  ".pc" files, from dialog changes.
	+ reduce dependency of math-library in test programs.
	+ minor fixes for test_tparm.c (cf: 20210306)
	+ mention "ncurses" prefix in curses_version() manpage (report by
	  Michal Bielinski).

20210306
	+ improved test/test_tparm.c, by limiting the tests to capabilities
	  that might have parameters or padding, and combined with tputs test.
	+ improve discussion of padding versus tparm and tputs in
	  man/curs_terminfo.3x
	+ update portability note for FreeBSD in man/tput.1

20210227
	+ modify tic/infocmp to eliminate unnecessary "\" to escape ":" in
	  terminfo format.
	+ add check in tic for duplicate "use=" clauses.

20210220
	+ improve tic warning when oc/op do not mention SGR 39/49 for xterm
	  compatible XT flag.
	+ revert change to lib_addch.c in waddch_literal() from 20210130, since
	  the followup fix in PutCharLR() actually corrects the problem while
	  this change causes too-early filling/wrapping (report by Johannes
	  Altmanninger).
	+ add/use vt220+pcedit and vt220+vtedit  -TD
	+ add scrt/securecrt and absolute -TD
	+ add nel to xterm-new, though supported since X11R5 -TD
	+ add/use xterm+nofkeys -TD
	+ move use of ecma+italics from xterm-basic to xterm+nofkeys -TD

20210213
	+ add test/back_ground.c, to exercise the wide-character background
	  functions.
	+ add a check in _nc_build_wch() in case the background character is a
	  wide-character, rather than a new part of a multibyte character.
	+ improve tracemunch's coverage of form/menu/panel libraries.
	+ improve tracemunch's checking/reporting the type for the first
	  parameter, e.g., "WINDOW*" rather than "#1".

20210206
	+ provide for wide-characters as background character in wbkgrnd
	  (report/testcase by Anton Vidovic)
	+ add name for Fedora's pcre2 to configure check for "--with-pcre2"
	  option, from xterm #363 -TD
	+ modify adjustment in PutCharLR to restore the cursor position before
	  writing to the lower-right corner, rather than decrementing the
	  cursor column, in case it was a double-width character (cf: 20210130).

20210130
	+ correct an off-by-one in comparison in waddch_literal() which caused
	  scrolling when a double-cell character would not fit at the lower
	  right corner of the screen (report by Benno Schulenberg).
	+ split-out att610+cvis, vt220+cvis, vt220+cvis8 -TD
	+ add vt220-base, for terminal emulators which generally have not
	  supported att610's blinking cursor control -TD
	+ use vt220+cvis in vt220, etc -TD
	+ use att610+cvis, xterm+tmux and ansi+enq in kitty -TD
	+ use vt220+cvis in st, terminology, termite since they ignore
	  blinking-cursor detail in att610+cvis -TD

20210123
	+ modify package/config scripts to provide an explicit -L option for
	  cases when the loader search path has other directories preceding
	  the one in which ncurses is installed (report by Yuri Victorovich).
	+ minor build-fixes in configure script and makefiles to work around
	  quirks of pmake.

20210116
	+ add comment for linux2.6 regarding CONFIG_CONSOLE_TRANSLATIONS
	  (report by Patrick McDermott) -TD
	+ make opts extension for getcchar work as documented for ncurses 6.1,
	  adding "-g" flag to test/demo_new_pair to illustrate.

20210109
	+ fix errata in man/ncurses.3x from recent updates.
	+ improve quoting/escaping in configure script, uses some features of
	  autoconf 2.52.20210105

20210102
	+ update man/curs_memleaks.3x, to include <term.h> which declares
	  exit_terminfo.
	+ clarify man/curs_terminfo.3x, to mention why the macro setterm is
	  defined in <curses.h>, and remove it from the list of prototypes
	  (prompted by patch by Graeme McCutcheon).
	+ amend man/curs_terminfo.3x, to note that <curses.h> is required
	  for certain functions, e.g., those using chtype or attr_t for
	  types, as well as mvcur (cf: 20201031).
	+ use parameter-names in prototypes in curs_sp_funcs.3x, for
	  consistency with other manpages.

20201227
	+ update terminology entry to 1.8.1 -TD
	+ fix some compiler-warnings which gcc8 reports incorrectly.

20201219
	+ suppress hyphenation in generated html for manpages, to address
	  regression in upgrade of groff 1.22.2 to 1.22.3.
	+ fix inconsistent sort-order in see-also sections of manpages (report
	  by Chris Bennett).

20201212
	+ improve manual pages for form field-types.

20201205
	+ amend build-fixes for gnat 10 to work with certain systems lacking
	  gprbuild (cf: 20200627).
	+ eliminate an additional strlen and wsclen.
	+ eliminate an unnecessary strlen in waddnstr() (suggested by Benjamin
	  Abendroth).
	+ modify inopts manpage, separating the items for nodelay and notimeout
	  (patch by Benno Schulenberg).
	+ correct mlterm3 kf1-kf4 (Debian #975322) -TD
	+ add flash to mlterm3 -TD

20201128
	+ add Smulx to alacritty (Christian Duerr).
	+ add rep to PuTTY -TD
	+ add putty+keypad -TD
	+ add another fflush(stdout) in _nc_flush() to handle time-delays in
	  the middle of strings such as flash when the application uses
	  low-level calls rather than curses (cf: 20161217).
	+ modify configure check for c89/c99 aliases of clang to use its
	  -std option instead, because some platforms, in particular macOS,
	  do not provide workable c89/c99 aliases.

20201121
	+ fix some compiler-warnings in experimental Windows-10 driver.
	+ add the definitions needed in recent configure-check for clang
	  (report by Steven Pitman).

20201114
	+ fix some compiler-warnings in experimental Windows-10 driver.
	+ modify a check for parameters in terminfo capabilities to handle the
	  special case where short extended capability strings were not
	  converted from terminfo to termcap format.
	+ modify CF_MIXEDCASE_FILENAMES macro, adding darwin as special case
	  when cross-compiling (report by Eli Rykoff).

20201107
	+ update kitty+common -TD
	+ add putty+screen and putty-screen (suggested by Alexandre Montaron).
	+ explain in ncurses.3x that functions in the tinfo library do not rely
	  upon wide-characters (prompted by discussion with Reuben Thomas).

20201031
	+ modify MKterm.h.in so that it is not necessary to include <curses.h>
	  before <term.h> (prompted by discussion with Reuben Thomas).
	+ review/improve synopsis for curs_sp_funcs.3x (prompted by discussion
	  with Reuben Thomas).
	+ improve format of output in tic's check_infotocap() function, to
	  ensure that the messages contain only printable text.
	+ modify configure-check for clang to verify that -Qunused-arguments
	  is supported.  IBM's xlclang does not support it (report by Steven
	  Pitman).

20201024
	+ provide workaround configure-check for bool when cross-compiling.
	+ fix a potential indexing error in _nc_parse_entry(), seen with
	  Herlim's test data using address-sanitizer.
	+ change a null-pointer check in set_curterm to a valid-string check,
	  needed in to tic's use-resolution when pad_char is cancelled
	  (report/testcase by Robert Sebastian Herlim)
	+ improve tic's -c option to validate the number and type of parameters
	  and compare against expected number/type before deciding which set of
	  parameter-lists to use in tparm calls (report/testcase by Robert
	  Sebastian Herlim).
	+ fix a link for tabs.1 manpage in announce.html.in (report by Nick
	  Black), as well as some fixes via linklint.

20201017
	+ improve manpage typography.
	+ improve discussion in curs_addch.3x of the use of unctrl to display
	  nonprintable characters.
	+ add a note in terminfo.5 explaining that no-parameter strings such
	  as sgr0 or cnorm should not be used with tparm.

20201010
	+ correct sgr in aaa+rv (report by Florian Weimer) -TD
	+ fix some sgr inconsistencies in d230c, ibm6153, ibm6154,
	  ncrvt100an -TD
	+ improve tic's check for errors detected in tparm (prompted by
	  discussion with Florian Weimer).
	+ set output-mode to binary in experimental Windows-10 driver (Juergen
	  Pfeifer).

20201003
	+ remove output-related checks for nl/nonl (report by Leon Winter).
	+ change tmux's kbs to ^? (report by Premysl Eric Janouch)
	+ simplify mlterm initialization with DECSTR -TD
	+ fix a typo in man/curs_terminfo.3 (Reuben Thomas).
	+ add tmux-direct (tmux #2370, Debian #895754)
	+ add user-defined capabilities from mintty to Caps-ncurses, for
	  checking consistency with tic.

20200926
	+ correct configure-check for gnurx library.
	+ regenerate llib-* files.
	+ modify tracemunch and the panel library to show readable traces for
	  panel- and user-pointers.

20200919
	+ update mlterm3 for 3.9.0 (report by Premysl Eric Janouch) -TD

20200918
	+ corrected condition for appending curses.events to the generated
	  curses.h (report by Sven Joachim, Debian #970545).

20200912
	+ add configure-check for systre/tre with mingw configuration, to get
	  the library-dependencies as seen in msys2 configuration for mingw64.
	+ build-fixes for the win32-driver configuration.
	+ use more defensive binary mode setting for Win32 (Juergen Pfeifer).

20200907
	+ fix regression in setupterm validating non-empty $TERM (report by
	  Soren Tempel).

20200906
	+ merge/adapt in-progress work by Juergen Pfeifer for new version of
	  win32-driver.
	+ correct description of vt330/vt340 (Ross Combs).

20200831
	+ build-fix for awk-scripts modified for win32-driver (report by Werner
	  Fink).

20200829
	+ remove a redundant NCURSES_EXPORT as a build-fix for "Maarten
	  Anonymous".
	+ merge/adapt in-progress work by Juergen Pfeifer for new version of
	  win32-driver.
	+ modify configure script, moving gcc -Werror options to EXTRA_CFLAGS
	  to avoid breaking configure-checks (adapted from ongoing work on
	  mawk and lynx).
	> errata for terminfo.src (report by Florian Weimer):
	+ correct icl6404 csr
	+ correct ti916 cup
	+ improve ndr9500

20200822
	+ improve version-number extraction in MKlib_gen.sh
	+ make the test-package for manpages installable by adjusting the
	  man_db.renames file.
	+ correct an off-by-one loop-limit in convert_strings function
	  (report by Yue Tai).
	+ add CF_SHARED_OPTS cases for HPE NonStop systems (Randall S Becker).
	+ modify CF_SHARED_OPTS case for NetBSD to use the same "-shared"
	  option for the non-rpath case as for the rpath case, to allow gcc to
	  provide suitable runtime initialization (report by Rajeev V Pillai).

20200817
	+ reduce build-warnings by excluding ncurses-internals from deprecation
	  warnings.
	+ mark wgetch-events feature as deprecated.
	+ add definition for $(LIBS) to ncurses/Makefile.in, to simplify builds
	  using the string-hacks option.
	+ prevent KEY_EVENT from appearing in curses.h unless the configure
	  option --enable-wgetch-events is used (report by Werner Fink).

20200816
	+ amend tic/infocmp check to allow for the respective tool's absence
	  (report by Steve Wills, cf: 20200808).
	+ improved some of the build-scripts with shellcheck
	+ filter out -MT/-MD/-MTd/-MDd options in script for Visual Studio C++
	  (discussion with "Maarten Anonymous").

20200808
	+ improve discussion of the system's tic utility when used as part
	  of cross-compiling (discussion with Keith Marshall).
	+ modify configuration checks for build-time tic/infocmp to use
	  AC_CHECK_TOOL. That can still be overridden by --with-tic-path and
	  --with-infocmp-path when fallbacks are used, but even if not using
	  fallbacks, the improved check may help with cross-compiling
	  (discussion with Keith Marshall).
	+ other build-fixes for Ada95 with MinGW.
	+ modify Ada95 source-generation utility to write to a file given as
	  parameter rather than to the standard output, allowing builds with
	  MinGW.

20200801
	+ remove remaining parts of checks for ISC Unix (cf: 20121006).
	+ add user32.lib to LDFLAGS for Visual Studio C++ configuration
	  (discussion with "Maarten Anonymous").
	+ modify MKkey_defs.sh to hide ncurses' definition of KEY_EVENTS to
	  reduce Visual Studio C++ redefinition warnings.
	+ improve/update checks for external functions in test/configure

20200725
	+ set LINK_TESTS in CF_SHARED_OPTS for msvc (patch by
	  "Maarten Anonymous")
	+ improved workaround for redefinition-warnings for KEY_EVENT.
	+ improve man/term.5 section on legacy storage format (report by
	  Florian Weimer).

20200718
	+ reduce redefinition-warnings for KEY_EVENT when building with Visual
	  Studio C++.
	+ define NCURSES_STATIC when compiling programs to link with static
	  libraries, to work with MinGW vs Visual Studio C++.
	> additional changes for building with Visual Studio C++ and msys2
	  (reports/patches by "Maarten Anonymous")
	+ modify c++/Makefile.in to set the current directory while compiling
	  the main program, so the linker can find related objects.
	+ several changes to allow the c++/demo program to compile/link.
	+ change an ifdef in test-directory, to use VC++ wide-character funcs.

20200711
	+ fix pound-sign mapping in acsc of linux2.6 entry (report by Ingo
	  Bruckl).
	+ additional changes for building with Visual Studio C++ and msys2
	  (reports/patches by "Maarten Anonymous")
	+ build-improvements for Windows 10 and MinGW (patch by Juergen
	  Pfeifer).
	+ fix a typo in curs_printw.3x (patch by William Pursell).
	+ fix two errors in infotocap which allowed indexing outside the
	  buffer (report/testcases by Zhang Gan).
	+ update length of strings in infocmp's usage function to restore a
	  trailing null on the longest string (report/testcase by Zhang Gen).

20200704
	+ modify version-check with Ada generics to use the same pattern as in
	  the check for supported gnat versions (report by Pascal Pignard).
	> additional changes for building with Visual Studio C++ and msys2
	  (patches by "Maarten Anonymous"):
	+ adjust headers/declarations to provide for "dllimport" vs "dllexport"
	  declarations when constructing DLLs, to worko with Visual Studio C++.

20200627
	+ build-fixes for gnat 10.1.1, whose gnatmake drops integration with
	  gprbuild.
	+ correct buffer-length in test/color_name.h

20200613
	+ update list of functions in ncurses.3x
	+ move dlclose() call from lib_mouse.c to delscreen() to avoid a case
	  in the former which could be called from SIGTSTP handler (Debian
	  #961097).

20200606
	+ add xterm+256color2, xterm+88color2, to deprecate nonstandard usage
	  in xterm+256color, xterm+88color -TD
	+ add shifted Linux console keys in linux+sfkeys entry for
	  screen.linux (report by Alexandre Montaron).
	+ use vt100+enq in screen (report by Alexandre Montaron).
	+ add screen.linux-s alias (suggested by Alexandre Montaron).

20200531
	+ correct configure version-check/warnng for g++ to allow for 10.x
	+ re-enable "bel" in konsole-base (report by Nia Huang)
	+ add linux-s entry (patch by Alexandre Montaron).
	+ drop long-obsolete convert_configure.pl
	+ add test/test_tparm.c, for checking tparm changes.
	+ improve parameter-checking for tparm, adding function _nc_tiparm() to
	  handle the most-used case, which accepts only numeric parameters
	  (report/testcase by "puppet-meteor").
	+ use a more conservative estimate of the buffer-size in lib_tparm.c's
	  save_text() and save_number(), in case the sprintf() function
	  passes-through unexpected characters from a format specifier
	  (report/testcase by "puppet-meteor").
	+ add a check for end-of-string in cvtchar to handle a malformed
	  string in infotocap (report/testcase by "puppet-meteor").

20200523
	+ update version-check for gnat to allow for gnat 10.x to 99.x
	+ fix an uninitialized variable in lib_mouse.c changes (cf: 20200502)
	+ add a check in EmitRange to guard against repeat_char emitting digits
	  which could be interpreted as BSD-style padding when --enable-bsdpad
	  is configured (report/patch by Hiltjo Posthuma).
	+ add --disable-pkg-ldflags to suppress EXTRA_LDFLAGS from the
	  generated pkg-config and ncurses*-config files, to simplify
	  configuring in the case where rpath is used but the packager wants
	  to hide the feature (report by Michael Stapelberg).
	> fixes for building with Visual Studio C++ and msys2 (patches by
	  "Maarten Anonymous"):
	+ modify CF_SHARED_OPTS to generate a script which translates linker
	  options into Visual Studio's dialect.
	+ omit parentheses around function-names in generated lib_gen.c to
	  work around a Visual Studio C++ limitation.

20200516
	+ add notes on termcap.h header in curs_termcap.3x
	+ update notes on vscode / xterm.js -TD

20200509
	+ add "-r" option to the dots test-programs, to help with scripting
	  a performance comparison.
	+ build-fix test/move_field.c for NetBSD curses, whose form headers
	  use different names than SVr4 or ncurses.

20200502
	+ add details on the change to Linux SGR 21 in 2018 -TD
	+ add xterm-direct16 and xterm-direct256 -TD
	+ modify lib_mouse.c to check for out-of-range button numbers, convert
	  those to position reports.

20200425
	+ use vt100+fnkeys in putty -TD
	+ fix a typo in tput.1; "columns" should be "cols".

20200418
	+ improve tracemunch logic for "RUN" compaction.
	+ fix a special case in wresize() where copying the old text did not
	  check if the last cell on a row was the beginning of a fullwidth
	  character (adapted from patch by Benno Schulenberg).
	+ use vt52+keypad in xterm-vt52, from xterm #354 -TD
	+ improve see-also section of user_caps.5

20200411
	+ fix find_pair(), overlooked when refactoring for _nc_reserve_pairs()
	  (report/testcase by Brad Town, cf: 20170812).
	+ add a trailing null for magic-string in putwin, flagged by gcc 10
	+ update check for gcc version versus gnat to work with gcc 10.x

20200404
	+ modify -fvisibility check to work with g++
	> fixes for building with Visual Studio C++ and msys2 (patches by
	  "Maarten Anonymous"):
	+ add configure option and check for gcc -fvisibility=hidden feature
	+ define NCURSES_NOMACROS in lib_gen.c to work around Visual Studio
	  C++ preprocessor limitations.
	+ modify some of the configure-macros, as well as mk-1st.awk to work
	  with Visual Studio C++ default filenaming.

20200328
	+ correct length of buffer copied in dup_field().
	+ remove "$(srcdir)/" from path of library.gpr, needed for out-of-tree
	  builds of Ada95 (patch by Adam Van Ymeren).

20200321
	+ improve configure-checks to reduce warnings about unused variables.
	+ improve description of error-returns in waddch and waddnstr manual
	  pages (prompted by patch by Benno Schulenberg).
	+ add test/move_field.c to demonstrate move_field(), and a stub for
	  a corresponding demo of dup_field().

20200314
	+ add history note to curs_scanw.3x for <stdarg.h> and <varargs.h>
	+ add history note to curs_printw.3x for <stdarg.h> and <varargs.h>
	+ add portability note to ncurses.3x regarding <stdarg.h>

20200308
	+ update copyright notices in test-packages.
	+ modify tracemunch to guard against errors in its known_p1 table.
	+ add several --with-xxx-libname options, to help with pkgsrc (prompted
	  by discussion with Thomas Klausner).

20200301
	+ modify wbkgd() and wbkgrnd() to avoid storing a null in the
	  background character, because it may be used in cases where the
	  corresponding 0x80 is not treated as a null (report by Marc Rechte,
	  cf: 20181208).

20200229
	+ modify CF_NCURSES_CONFIG to work around xcode's c99 "-W" option,
	  which conflicts with conventional use for passing linker options.
	> fixes for building with Visual Studio C++ and msys2 (patches by
	  "Maarten Anonymous"):
	+ check for pcre2posix.h instead of pcre2-posix.h
	+ add case in CF_SHARED_OPTS for msys2 + msvc
	+ add fallback definition for STDIN_FILENO in progs.priv.h
	+ modify win_driver.c to use _alloca() rather than gcc's variable
	  length array feature.
	+ add NCURSES_IMPEXP to ncurses wrapped-variable declarations
	+ remove NCURSES_IMPEXP from class variables in c++/cursslk.h
	+ remove fallback prototype for exit() from c++/etip.h.in
	+ use configured check for <sys/time.h> in a couple of places
	+ conditionally include winsock.h in ncurses/win32con/gettimeofday.c,
	  because Visual Studio needs this for the timestruct declaration.
	+ adjust syntax in a couple of files using the NCURSES_API symbol.

20200222
	+ expanded note in ncurses.3x regarding automatically-included headers
	+ improve vt50h and vt52 based on DECScope manual -TD
	+ add/use vt52+keypad and vt52-basic -TD
	+ check/workaround for line-too-long in Ada95 generate utility when
	  building out-of-tree.
	+ improve/update HEADER_DEPS in */Makefile.in
	+ add "check" rule to include/Makefile, to demonstrate that the headers
	  include all of the required headers for the types used.

20200215
	+ improve manual page for panel library, extending the portability
	  section as well as documenting error-returns.
	+ show tic's version when installing terminal database in run_tic.sh
	+ correct check for gcc vs other compilers used in ncurses 6.0, from
	  FreeBSD patch by Kyle Evans (cf: 20150725).
	+ add notes for 6.2 to INSTALL.

20200212 6.2 release for upload to ftp.gnu.org
	+ update release notes
	+ minor build-fixes, mostly to test-package scripts

20200208
	+ modify check for sizeof(wchar_t) to ensure it gives useful result
	  when cross-compiling.
	+ drop assumption in configure script that Cygwin's linker is broken.
	+ define NCURSES_BROKEN_LINKER if the broken-linker feature is used,
	  to simplify configure-checks for ncurses-examples.

20200202
	+ reassert copyright on ncurses, per discussion in ncurses FAQ:
	  https://invisible-island.net/ncurses/ncurses.faq.html#relicensed

20200201
	+ modify comparison in make_hash.c to correct a special case in
	  collision handling for Caps-hpux11
	+ add testing utility report_hashing to check hash-tables used for
	  terminfo and termcap names.
	+ fix a missing prototype for _nc_free_and_exit().
	+ update a few comments about tack 1.07
	+ use an awk script to split too-long pathnames used in Ada95 sample
	  programs for explain.txt

20200118
	+ expanded description of XM in user_caps.5
	+ improve xm example for xterm+x11mouse, xterm+sm+1006 -TD
	+ add history section to curs_slk.3x and curs_terminfo.3x manpages.
	+ update alacritty entries for 0.4.0 (prompted by patch by
	  Christian Durr) -TD
	+ correct spelling errors found with codespell.
	+ fix for test/configure, from xterm #352.

20200111
	+ improve configure macros which check for the X11/Intrinsic.h header,
	  to accommodate recent MacOS changes.
	+ suppress gcc's -Winline warning; it has not been useful for some time
	+ update config.guess, config.sub

20200104
	+ modify a couple of macros in aclocal.m4 to allow autoconf 2.69 to
	  "work", to help illustrate discussion in
	  https://invisible-island.net/autoconf/my-autoconf.html
	+ fix some warnings from autoheader-252

20191228
	+ in gen-pkgconfig.in, move the RPATH_LIST and PRIVATE_LIBS assignments
	  past the various prefix/libdir assignments, to allow for using those
	  symbols, e.g., as done via CF_SHARED_OPTS.
	+ improve ncurses*-config and pc-files by filtering out linker-specs.
	+ modify test-package to more closely match Fedora's configuration
	  for PIE/PIC feature and debug-packages.

20191221
	+ correct pathname used in Ada95 sample programs for explain.txt, to
	  work with test-packages.
	+ improve tracemunch:
	  + keep track of TERMINAL* values
	  + if tracing was first turned on after initialization, attempt to
	    show distinct screen, window and terminal names anyway.
	+ ensure that GCC_NORETURN is defined in term.h, because the prototype
	  for exit_terminfo() uses it (report by Werner Fink).

20191214
	+ add exit_curses() and exit_terminfo() to replace internal symbols for
	  leak-checking.

20191207
	+ fix a few warnings for test-package builds
	+ add curses_trace(), to replace trace().

20191130
	+ add portability section to curs_getcchar manpage (prompted by
	  discussion with Nick Black).
	+ improve portability discussion of ACS characters in curs_addch
	  manpage.
	+ improve typography for double-quotes in manpages.

20191123
	+ fix typo for MinGW rpm test-package.
	+ workaround in rpm specs for NFS problems in Fedora 31.

20191116
	+ modify ncurses/Makefile.in to fix a case where Debian/testing changes
	  to the ld --as-needed configuration broke ncurses-examples test
	  packages.
	+ drop library-dependency on psapi for MinGW port, since win_driver.c
	  defines PSAPI_VERSION to 2, making it use GetProcessImageFileName
	  from kernel32.dll (prompted by patch by Simon Sobish, cf: 20140503).

20191109
	+ add warning-check in tic for terminals with parm_dch vs parm_ich.
	+ drop ich1 from rxvt-basic, Eterm and mlterm to improve compatibility
	  with old non-curses programs -TD
	+ reviewed st 0.8.2, updated some details -TD
	+ use ansi+rep several places -TD
	+ corrected tic's check for ich1 (report by Sebastian J. Bronner,
	  cf: 20020901).

20191102
	+ check parameter of set_escdelay, return ERR if negative.
	+ check parameter of set_tabsize, return ERR if not greater than zero
	  (report/patch by Anthony Sottile).
	+ revise CF_ADD_LIBS macro to prepend rather than append libraries.
	+ add "xterm-mono" to help packagers (report by Sven Joachim) -TD

20191026
	+ add a note in man/curs_add_wch.3x about Unicode terminology for the
	  line-drawing characters (report by Nick Black).
	+ improve comment in lib_tgoto.c regarding the use of \200 where a
	  \0 would be intended by the caller (report by "64 bit", cf: 20000923).
	+ modify linux-16color to accommodate Linux console driver change in
	  early 2018 (report by Dino Petrucci).

20191019
	+ modify make_hash to not require --disable-leaks, to simplify building
	  with address-sanitizer.
	+ modify tic to exit if it cannot remove a conflicting name, because
	  treating that as a partial success can cause an infinite loop in
	  use-resolution (report/testcase by Hongxu Chen, cf: 20111001).

20191015
	+ improve buffer-checks in captoinfo.c, for some cases when the
	  input string is shorter than expected.
	> fix two errata in tic (report/testcases by Hongxu Chen):
	+ check for missing character after backslash in write_it
	+ check for missing characters after "%>" when converting from termcap
	  syntax (cf: 980530).

20191012
	+ amend recent changes to ncurses*-config and pc-files to filter out
	  Debian linker-flags (report by Sven Joachim, cf: 20150516).
	+ clarify relationship between tic, infocmp and captoinfo in manpage.
	+ check for invalid hashcode in _nc_find_type_entry and
	  _nc_find_name_entry.
	> fix several errata in tic (reports/testcases by "zjuchenyuan"):
	+ check for invalid hashcode in _nc_find_entry.
	+ check for missing character after backslash in fmt_entry
	+ check for acsc with odd length in dump_entry in check for one-one
	  mapping (cf: 20060415);
	+ check length when converting from old AIX box_chars_1 capability,
	  overlooked in changes to eliminate strcpy (cf: 20001007).

20191005
	+ modify the ncurse*-config and pc-files to more closely match for the
	  -I and -l options.

20190928
	+ amend the ncurses*-config and pc-files to take into account the rpath
	  hack which differed between those files.
	+ improve -L option filtering in ncurses*-config
	+ improve recovery from error when reading command-character in
	  test/ncurses.c, showing the relevant error message and not exiting on
	  EINTR (cf: 20180922)

20190921
	+ add a note in resizeterm manpage about top-level windows which touch
	  the screen's borders.
	+ modify configure-checks for gnat to identify each of the tools path
	  and version.

20190914
	+ build-fixes for Ada95 configure-script and corresponding test package

20190907
	+ add --with-ada-libname option and modify Ada95 configuration to
	  allow renaming the "AdaCurses" library (prompted by proposed changes
	  by Pascal Pignard).
	+ modify configure script to distinguish gcc from icc and clang when
	  the --enable-warnings option is not used, to avoid unnecessary
	  warnings about unrecognized inline options (report by Sven Joachim).

20190831
	+ build-fixes for configuration using --program-suffix with Ada95,
	  noticed with MacOS but applicable to other platforms without
	  libpanelw, etc.

20190824
	+ fix some cppcheck warnings, mostly style, in ncurses test-programs.

20190817
	+ amend 20181208 changes for wbkgd() and wbkgrnd(), fixing a few
	  details where it still differed from SVr4.
	+ fix some cppcheck warnings, mostly style, in ncurses test-programs.

20190810
	+ fix a few more coverity warnings.

20190803
	+ improve loop limits in _nc_scroll_window() to handle a case where
	  the scrolled data is a pad which is taller than the window (patch
	  by Rob King).
	+ amend the change to screen, because tmux relies upon that entry
	  and does not support that feature (Debian #933572) -TD
	+ updated ms-terminal entry & notes -TD
	+ updated kitty entry & notes -TD
	+ updated alacritty+common entry & notes -TD
	+ use xterm+sl-twm for consistency -TD

20190728
	+ fix a few more coverity warnings.
	+ more documentation updates based on tctest.

20190727
	+ fix a few coverity warnings.
	+ documentation updates based on tctest.

20190720
	+ fix a few warnings for gcc 4.x
	+ add some portability/historical details to the tic, toe and infocmp
	  manual pages.
	+ correct fix for broken link from terminfo(5) to tabs(1) manpage
	  (report by Sven Joachim).

20190713
	+ change reset's behavior for margins to simply clear soft-margins if
	  possible, rather than clearing and then setting them according to the
	  terminal's width (suggested by Thomas Wolff).
	+ correct order of one wbkgd versus start_color call in test/padview.c

20190706
	+ add domterm -TD
	+ improve comments for recent changes, add alias xterm.js -TD

20190630
	+ add --with-tic-path and --with-infocmp-path to work around problems
	  building fallback source using pre-6.0 tic/infocmp.
	+ add a check in tic for paired indn/rin
	+ correct a buffer-limit in write_entry.c for systems that use caseless
	  filenames.
	+ add ms-terminal -TD
	+ add vscode, vscode-direct -TD

20190623
	+ improve the tabs.1 manual page to distinguish the PWB/Unix and 7th
	  Edition versions of the tabs utility.
	+ add configure check for getenv() to work around implementation shown
	  in Emscripten #6766, use that to optionally suppress START_TRACE
	  macro, whose call to getenv() may not work properly (report by Ilya
	  Ig Petrov).
	+ modify initialization functions to avoid relying upon persistent
	  data for the result from getenv().
	+ update config.guess, config.sub

20190615
	+ expand the portability section of the man/tabs.1 manual page.
	+ regenerate HTML manpages.

20190609
	+ add mintty, mintty-direct (adapted from patch by Thomas Wolff).
	  Some of the suggested user-defined capabilities are commented-out,
	  to allow builds with ncurses 5.9 and 6.0
	+ add Smol/Rmol for tmux, vte-2018 (patch by Nicholas Marriott).
	+ add rs1 to konsole, mlterm -TD
	+ modify _nc_merge_entry() to make a copy of the data which it merges,
	  to avoid modifying the source-data when aligning extended names.

20190601
	+ modify an internal call to vid_puts to pass extended color pairs
	  e.g., from tty_update.c and lib_mvcur.c (report by Niegodziwy Beru).
	+ improve manual page description of init_tabs capability and TABSIZE
	  variable.

20190525
	+ modify reset_cmd.c to allow for tabstops at intervals other than 8
	  (report by Vincent Huisman).

20190518
	+ update xterm-new to xterm patch #345 -TD
	+ add/use xterm+keypad in xterm-new (report by Alain D D Williams) -TD
	+ update terminator entry -TD
	+ remove hard-tabs from ti703 (report by Robert Clausecker)
	+ mention meml/memu/box1 in user_caps manual page.
	+ mention user_caps.5 in tic and infocmp manual pages.

20190511
	+ fix a spurious blank line seen with "infocmp -1fx xterm+x11mouse"
	+ add checks in repair_subwindows() to keep the current position and
	  scroll-margins inside the resized subwindow.
	+ add a limit check in newline_forces_scroll() for the case where the
	  row is inside scroll-margins, but not at the end (report by Toshio
	  Kuratomi, cf: 20170729).
	+ corrected a warning message in tic for extended capabilities versus
	  number of parameters.

20190504
	+ improve workaround for Solaris wcwidth versus line-drawing characters
	  (report by Pavel Stehule).
	+ add special case in tic to validate RGB string-capability extension.
	+ corrected string/parameter-field for RGB in Caps-ncurses.

20190427
	+ corrected problem in terminfo load/realignment which prevented
	  infocmp from comparing extended capabilities with the same name
	  but different types.

20190420
	+ improve ifdef's for TABSIZE variable, to help with AIX/HPUX ports.

20190413
	+ check for TABSIZE variable in test/configure script.
	+ used test/test_arrays.c to improve Caps.aix1 and Caps.hpux11
	+ corrected filtering of comments in MKparametrized.sh
	+ reduce duplication across Caps* files by moving some parts which do
	  not depend on order into Caps-ncurses.

20190406
	+ modify MKcaptab.sh, MKkey_defs.sh, and MKhashsize.sh to handle
	  split-up Caps-files.
	+ build-fixes if extended-functions are disabled.

20190330
	+ add "screen5", to mention italics (report by Stefan Assmann)
	+ modify description of xterm+x11hilite to eliminate unused p5 -TD
	+ add configure script checks to help with a port to Ultrix 3.1
	  (report by Dennis Grevenstein).
	  + check if "b" binary feature of fopen works
	  + check for missing feature of locale.h
	  + add fallback for strstr() in test-programs
	  + add fallback for STDOUT_FILENO in test-programs
	+ update config.guess, config.sub

20190323
	+ move macro for is_linetouched() inside NCURSES_NOMACROS ifndef.
	+ corrected prototypes in several manpages using script to extract
	  those in compilable form.
	+ use _nc_copy_termtype2() rather than direct assignment in setupterm,
	  in case it is called repeatedly using fallback terminfo descriptions
	  (report/patch by Werner Fink).

20190317
	+ regenerate llib-* files.
	+ modify tic to also use new function for user-defined capability info.
	+ modify _nc_parse_entry() to check if a user-defined capability has
	  an unexpected type; ignore it in that case.
	+ fix a special case of link-anchors in generated Ada html files.
	+ use newer rel=author tag in generated html rather than rev=made,
	  which did not become accepted.

20190309
	+ in-progress changes to add parameter-checking for common user-defined
	  capabilities in tic.
	+ update MKcodes.awk and MKnames.awk to ignore the new "userdef"
	  data in Caps-ncurses (cf: 20190302).

20190302
	+ corrected some of the undocumented terminfo names in Caps.hpux11
	+ add "Caps-ncurses" file to help with checking inconsistencies in some
	  user-defined capabilities.
	+ amend check for repeat_char to handle a case where setlocale() was
	  called after initscr() (report by "Ampera").

20190223
	+ fix typo in adds200 -TD
	+ add tic check for consistent alternate character set capabilities.
	+ improve check in mvcur() to decide whether to use hard-tabs, using
	  xt, tbc and hts as clues.
	+ replace check in reset command for obsolete "pt" capability using
	  tbc and hts capabilities as clues (report by Nicolas Marriott).

20190216
	+ improve manual page description of TABSIZE.
	+ add test/demo_tabs program.

20190209
	+ add check in tic to provide warnings for mismatched number of
	  parameters in the documented user-capability extensions.

20190202
	+ modify rpm test-package ".spec" file to work around naming conflict
	  with Redhat's package for ncurses6.
	+ modify no-leaks code in test/picsmap to avoid non-standard tdestroy.
	+ amend change to configure script which altered the top-level makefile
	  to avoid attempting to install the terminfo database when it was not
	  configured, to allow for installing the ".pc" files which are also
	  in the misc directory (report by Steve Wills).

20190126
	+ change some "%define" statements in test-packages for RPMs to
	  "%global" to work around changes in rpm 4.14 from recent Redhat.
	+ fixes for O_INPUT_FIELD extension (patch by Leon Winter).
	+ eliminate fixed buffer-size when reading $TERMCAP variable.
	+ correct logic in read_entry.c which prevented $TERMCAP variable from
	  being interpreted as a fallback to terminfo entry (prompted by
	  Savannah #54556, cf: 20110924).

20190121
	+ add a check in test/configure to work around non-ncurses termcap.h
	  file in Slackware.
	+ corrected flag for "seq" method of db 1.8.5 interface, needed by toe
	  on some of the BSDs.
	+ updated "string-hacks" feature.
	+ minor improvements to manpage typography.
	+ corrected conditionally-compiled limit on color pairs (report by
	  "Hudd").
	+ add -x option to test/pair_content, test/color_content for testing
	  init_extended_pair, extended_pair_content, init_extended_color,
	  extended_color_content
	+ add -p option to test/pair_content, test/color_content to show the
	  return values from the tested functions.
	+ improve manual page curs_color.3x discussion of error returns and
	  extensions.
	+ add O_INPUT_FIELD extension to form library (patch by Leon Winter).
	+ override/suppress --enable-db-install if --disable-database configure
	  option was given.
	+ change a too-large terminal entry in tic from a fatal error to a
	  warning (prompted by discussion with Gabriele Balducci).

20190112
	+ fix typo in term(5), improve explanation of format (report by Otto
	  Modinos).
	+ add nsterm-direct -TD
	+ use SGR 1006 mouse for konsole-base -TD
	+ use SGR 1006 mouse for putty -TD
	+ add ti703/ti707, ti703-w/ti707-w (Robert Clausecker)

20190105
	+ add dummy "check" rule in top-level and test-Makefile to simply
	  building test-packages for Arch.
	+ modify configure script to avoid conflict with a non-POSIX feature
	  that enables all parts of the system headers by default.  Some
	  packagers have come to rely upon this behavior (FreeBSD #234049).
	+ update config.guess, config.sub

20181229
	+ improve man/curs_mouse.3x with regard to xterm
	+ modify tracemunch to accept filename parameters in addition to use
	  as a pipe/filter.
	+ minor optimization to reduce calls to _nc_reserve_pairs (prompted by
	  discussion with Bryan Christ).
	+ add test/pair_content.c and test/color_content.c
	+ modify infocmp to omit filtering of "OTxx" names which are used for
	  obsolete capabilities, when the output is sorted by long-names.
	  Doing this helps when making a table of the short/long capability
	  names.

20181215
	+ several fixes for gcc8 strict compiler warnings.
	+ fix a typo in comments (Aaron Gyes).
	+ add nsterm-build309 to replace nsterm-256color, assigning the latter
	  as an alias of nsterm, to make mouse work with nsterm-256color -TD
	+ base gnome-256color entry on "gnome", not "vte", for consistency -TD
	+ updates for configure macros from work on tin and xterm:
	  + CF_GNU_SOURCE, allow for Cygwin's newlib when checking for the
	    _DEFAULT_SOURCE symbol.
	  + CF_VA_COPY, add fallback check if neither va_copy/__va_copy is
	    supported, to try copying the pointers for va_list, or as an array.
	    Also add another fallback check, for __builtin_va_copy(), which
	    could be used with AIX xlc in c89 mode.

20181208
	+ modify wbkgd() and wbkgrnd() to improve compatibility with SVr4
	  curses, changing the way the window rendition is updated when the
	  background character is modified (report by Valery Ushakov).

20181201
	+ add midnightbsd to CF_XOPEN_SOURCE macro (patch by Urs Jansen).
	+ add "@" command to test/ncurses F-test, to allow rapid jump to
	  different character pages.
	+ update config.guess, config.sub from
		http://git.savannah.gnu.org/cgit/config.git

20181125
	+ build-fix (reports by Chih-Hsuan Yen, Sven Joachim).

20181124
	+ check --with-fallbacks option to ensure there is a value, and add
	  the fallback information to top-level Makefile summary.
	+ add some traces in initialization to show whether a fallback entry is
	  used.
	+ build-fix for test/movewindow with ncurses-examples on Solaris.
	+ add "-l" option to test/background, to dump screen contents in a form
	  that lets different curses implementations be compared.
	+ modify the initialization checks for mouse so that the xterm+sm+1006
	  block will work with terminal descriptions not mentioning xterm
	  (report by Tomas Janousek).

20181117
	+ ignore the hex/b64 $TERMINFO in toe's listing.
	+ correct a status-check in _nc_read_tic_entry() so that if reading
	  a hex/b64 $TERMINFO, and the $TERM does not match, fall-through to
	  the compiled-in search list.

20181110
	+ several workarounds to ensure proper C compiler used in parts of
	  Ada95 tree.
	+ update config.guess, config.sub from
		http://git.savannah.gnu.org/cgit/config.git

20181027
	+ add OpenGL clients alacritty and kitty -TD
	+ add Smulx for tmux, vte-2018 -Nicholas Marriott

20181020
	+ ignore $TERMINFO as a default value in configure script if it came
	  from the infocmp -Q option.
	+ allow value for --with-versioned-syms to be a relative pathname
	+ add a couple of broken-linker symbols to the list of versioned
	  symbols to help with link-time optimization versus weak symbols.
	+ apply shift/control/alt logic when decoding xterm's 1006 mode to
	  wheel-mouse events (Redhat #1610681).

20181013
	+ amend change from 20180818, which undid a fix for the $INSTALL value
	  to make it an absolute path.

20181006
	+ improve a configure check to work with newer optimizers (report by
	  Denis Pronin, Gentoo #606142).
	+ fix typo in tput.c (Sven Joachim, cf: 20180825).

20180929
	+ fix typo in tvi955 -TD
	+ corrected acsc for regent60 -TD
	+ add alias n7900 -TD
	+ corrected acsc for tvi950 -TD
	+ remove bogus kf0 from tvi950 -TD
	+ added function-key definitions to agree with Televideo 950 manual -TD
	+ add bel to tvi950 -TD
	+ add shifted function-keys to regent60 -TD
	+ renumber regent40 function-keys to match manual -TD
	+ add cd (clr_eos) to adds200 -TD

20180923
	+ build-fix: remove a _tracef call which was used for debugging (report
	  by Chris Clayton).

20180922
	+ ignore interrupted system-call in test/ncurses's command-line, e.g.,
	  if the terminal were resized.
	+ add shift/control/alt logic for decoding xterm's 1006 mode (Redhat
	  #1610681, cf: 20141011).
	+ modify rpm test-packages to not use --disable-relink with Redhat,
	  since Fedora 28's tools do not work with that feature.

20180908
	+ document --with-pcre2 configure option in INSTALL.
	+ improve workaround for special case in PutAttrChar() where a cell is
	  marked as alternate-character set, to handle a case where the
	  character in the cell does not correspond to any of the ASCII
	  fallbacks (report by Leon Winter, cf: 20180505).
	+ amend change to form library which attempted to avoid unnecessary
	  update of cursor position in non-public fields, to simply disable
	  output in this case (patch by Leon Winter, cf: 20180414).
	+ improve check for LINE_MAX runtime limit, to accommodate broken
	  implementations of sysconf().

20180901
	+ improve manual page for wgetnstr, giving background for the length
	  parameter.
	+ define a limit for wgetnstr, wgetn_wstr when length is negative or
	  "too large".
	+ update configure script to autoconf 2.52.20180819 (Debian #887390).

20180825
	+ add a section to tput manual page clarifying how it determines the
	  terminal size (prompted by discussion with Grant Jenks).
	+ add "--disable-relink" to rpm test-packages, for consistency with the
	  deb test-packages.
	+ split spec-file into ncurses6.spec and ncursest6.spec to work around
	  toolset breakage in Fedora 28.
	+ drop mention of "--disable-touching", which was not in the final
	  20180818 updates.

20180818
	+ build-fix for PDCurses with ncurses-examples.
	+ improved CF_CC_ENV_FLAGS.
	+ modify configure scripts to reduce relinking/ranlib during library
	  install (Debian #903790):
	  + use "install -p" when available, to avoid need for ranlib of
	    static libraries.
	  + modify scripts which use "--disable-relink" to add a 1-second
	    sleep to work around tools which use whole-second timestamps, e.g.,
	    in utime() rather than the actual file system resolution.

20180804
	+ improve logic for clear with E3 extension, in case the terminal
	  scrolls content onto its saved-lines before actually clearing
	  the display, by clearing the saved-lines after clearing the
	  display (report/patch by Nicholas Marriott).

20180728
	+ improve documentation regarding feature-test macros in curses.h
	+ improve documentation regarding the virtual and physical screens.
	+ formatting fixes for manpages, regenerate man-html documentation.

20180721
	+ build-fixes for gcc8.
	+ corrected acsc for wy50 -TD
	+ add wy50 and wy60 shifted function-keys as kF1 to kF16 -TD
	+ remove ansi+rep mis-added to interix in 2018-02-23 -TD

20180714
	+ add enum, regex examples to test/demo_forms
	+ add configure check for pcre-posix library to help with MinGW port.

20180707
	+ build-fixes for gcc8.
	+ correct order of WINDOW._ttytype versus WINDOW._windowlist in
	  report_offsets.
	+ fix a case where tiparm could return null if the format-string was
	  empty (Debian #902630).

20180630
	+ add acsc string to vi200 (Nibby Nebbulous)
	  add right/down-arrow to vi200's acsc -TD
	+ add "x" to tput's getopt string so that "tput -x clear" works
	  (Nicholas Marriott).
	+ minor fixes prompted by anonymous report on stack overflow:
	  + correct order of checks in _nc_get_locale(), for systems lacking
	    locale support.
	  + add "#error" in a few places to flag unsupported configurations

20180623
	+ use _WIN32/_WIN64 in preference to __MINGW32__/__MINGW64__ symbols
	  to simplify building with MSVC, since the former are defined in both
	  compiler configurations (report by Ali Abdulkadir).
	+ further improvements to configure-checks from work on dialog, i.e.,
	  updated CF_ADD_INCDIR, CF_FIND_LINKAGE, CF_GCC_WARNINGS,
	  CF_GNU_SOURCE, CF_LARGEFILE, CF_POSIX_C_SOURCE, CF_SIZECHANGE, and
	  CF_TRY_XOPEN_SOURCE.
	+ update config.guess, config.sub from
		http://git.savannah.gnu.org/cgit/config.git

20180616
	+ build-fix for ncurses-examples related to gcc8-fixes (cf: 20180526).
	+ reduce use of _GNU_SOURCE for current glibc where _DEFAULT_SOURCE
	  combines with _XOPEN_SOURCE (Debian #900987).
	+ change target configure level for _XOPEN_SOURCE to 600 to address
	  use of vsscanf and setenv.
	+ improved configure-checks CF_SIZECHANGE and CF_STRUCT_TERMIOS from
	  work on dialog.

20180609
	+ modify generated ncurses*config and ncurses.pc, ncursesw.pc, etc.,
	  to list helper libraries such as gpm for static linking (Debian
	  #900839).
	+ marked vwprintw and vwscanw as deprecated; recommend using vw_printw
	  and vw_scanw, respectively.

20180602
	+ add RPM test-package "ncursest-examples".
	+ modified RPM test-package to work with Mageia6.

20180526
	+ add note in curs_util.3x about unctrl.h
	+ review/improve header files to ensure that those include necessary
	  files except for the previously-documented cases (report by Isaac
	  Pascual Monells).
	+ improved test-package scripts, adapted from byacc 1.9 20180525.
	+ fix some gcc8 warnings seen in Redhat package build, but
	  work around bug in gcc8 compiler warnings in comp_parse.c

20180519
	+ formatting fixes for manpages, regenerate man-html documentation.
	+ trim spurious whitespace from tmux in 2018-02-24 changes;
	  fix some inconsistencies in/between tmux- and iterm2-entries for SGR
	  (report by C Anthony Risinger)
	+ improve iterm2 using some xterm features which it has adapted -TD
	+ add check in pair_content() to handle the case where caller asks
	  for an uninitialized pair (Debian #898658).

20180512
	+ remove trailing ';' from GCC_DEPRECATED definition.
	+ repair a change from 20110730 which left an error-check/warning dead.
	+ fix several minor Coverity warnings.

20180505
	+ add deprecation warnings for internal functions called by older
	  versions of tack.
	+ fix a special case in PutAttrChar() where a cell is marked as
	  alternate-character set, but the terminal does not actually support
	  the given graphic character.  This would happen in an older terminal
	  such as vt52, which lacks most line-drawing capability.
	+ use configure --with-config-suffix option to work around filename
	  conflict with Debian packages versus test-packages.
	+ update tracemunch to work with perl 5.26.2, which changed the rules
	  for escaping regular expressions.

20180428
	+ document new form-extension O_EDGE_INSERT_STAY (report by Leon
	  Winter).
	+ correct error-returns listed in manual pages for a few form functions
	  (report by Leon Winter).
	+ add a check in form-library for null-pointer dereference:
		unfocus_current_field (form);
		form_driver (form, REQ_VALIDATION);
	  (patch by Leon Winter).

20180414
	+ modify form library to optionally delay cursor movement on a field
	  edge/boundary (patch by Leon Winter).
	+ modify form library to avoid unnecessary update of cursor position in
	  non-public fields (patch by Leon Winter).
	+ remove unused _nc_import_termtype2() function.
	+ also add/improve null-pointer checks in other places
	+ add a null-pointer check in _nc_parse_entry to handle an error when
	  a use-name is invalid syntax (report by Chung-Yi Lin).

20180407
	+ clarify in manual pages that vwprintw and vwscanw are obsolete,
	  not part of X/Open Curses since 2007.
	+ use "const" in some prototypes rather than NCURSES_CONST where X/Open
	  Curses was updated to do this, e.g., wscanw, newterm, the terminfo
	  interface.  Also use "const" for consistency in the termcap
	  interface, which was withdrawn by X/Open Curses in Issue 5 (2007).
	  As of Issue 7, X/Open Curses still lacks "const" for certain return
	  values, e.g., keyname().

20180331
	+ improve terminfo write/read by modifying the fourth item of the
	  extended header to denote the number of valid strings in the extended
	  string table (prompted by a comment in unibilium's sources).

20180324
	+ amend Scaled256() macro in test/picsmap.c to cover the full range
	  0..1000 (report by Roger Pau Monne).
	+ add some checks in tracemunch for undefined variables.
	+ trim some redundant capabilities from st-0.7 -TD
	+ trim unnecessary setf/setb from interix -TD

20180317
	+ fix a check in infotocap which may not have detected a problem when
	  it should have.
	+ add a check in tic for the case where setf/setb are given using
	  different strings, but provide identical results to setaf/setab.
	+ further improve fix for terminfo.5 (patch by Kir Kolyshkin).
	+ reorder loop-limit checks in winsnstr() in case the string has no
	  terminating null and only the number of characters is used (patch
	  by Gyorgy Jeney).

20180303
	+ modify TurnOn/TurnOff macros in lib_vidattr.c and lib_vid_attr.c to
	  avoid expansion of "CUR" in trace.
	+ improve a few lintian warnings in test-packages.
	+ modify lib_setup to avoid calling pthread_self() without first
	  verifying that the address is valid, i.e., for weak symbols
	  (report/patch by Werner Fink).
	+ modify generated terminfo.5 to not use "expand" and related width
	  on the last column of tables, making layout on wide terminals look
	  better (adapted from patch by Kir Kolyshkin).
	+ add a category to report_offsets, e.g., "w" for wide-character, "t"
	  for threads to make the report more readable.  Reorganized the
	  structures reported to make the categories more apparent.
	+ simplify some ifdef's for extended-colors.
	+ add NCURSES_GLOBALS and NCURSES_PRESCREEN to report_offsets, to show
	  how similar the different tinfo configurations are.

20180224
	+ modify _nc_resolve_uses2() to detect incompatible types when merging
	  a "use=" clause of extended capabilities.  The problem was seen in a
	  defective terminfo integrated from simpleterm sources in 20171111,
	  compounded by repair in 20180121.
	+ correct Ss/Ms interchange in st-0.7 entry (tmux #1264) -TD
	+ fix remaining flash capabilities with trailing mandatory delays -TD
	+ correct cut/paste in NEWS (report by Sven Joachim).

20180217
	+ remove incorrect free() from 20170617 changes (report by David Macek).
	+ correct type for "U8" in user_caps.5; it is a number not boolean.
	+ add a null-pointer check in safe_sprintf.c (report by Steven Noonan).
	+ improve fix for Debian #882620 by reusing limit2 variable (report by
	  Julien Cristau, Sven Joachim).

20180210
	+ modify misc/Makefile.in to install/uninstall explicit list in case
	  the build-directory happens to have no ".pc" files when an uninstall
	  is performed (report by Jeffrey Walton).
	+ deprecate safe-sprintf, since the vsnprintf function, which does what
	  was needed, was standardized long ago.
	+ add several development/experimental options to development packages.
	+ minor reordering of options in configure script to make the threaded
	  and reentrant options distinct from the other extensions which are
	  normally enabled.

20180203
	+ minor fixes to test/*.h to make them idempotent.
	+ add/use test/parse_rgb.h to show how the "RGB" capability works.
	+ add a clarification in user_caps.5 regarding "RGB" capability.
	+ add extended_slk_color{,_sp} symbols to the appropriate
	  package/*.{map,sym} files (report by Sven Joachim, cf: 20170401).

20180129
	+ update "VERSION" file, used in shared-library naming.

20180127 6.1 release for upload to ftp.gnu.org

20180127
	+ updated release notes
	+ amend a warning message from tic which should have flagged misuse
	  of "XT" capability in "screen" terminal description.
	> terminfo changes:
	+ trim "XT" from screen entry, add comments to explain why it was
	  not suitable -TD
	+ modify iterm to use xterm+sl-twm building block -TD
	+ mark konsole-420pc, konsole-vt100, konsole-xf3x obsolete reflecting
	  konsole's removal in 2008 -TD
	+ expanded the history section of konsole to explain its flawed
	  imitation of xterm's keyboard -TD
	+ use xterm+x11mouse in screen.* entries because screen does not yet
	  support xterm's 1006 mode -TD
	+ add nsterm-build400 for macOS 10.13 -TD
	+ add ansi+idc1, use that in ansi+idc adding dch for consistency -TD
	+ update vte to vte-2017 -TD
	+ add ecma+strikeout to vte-2017 -TD
	+ add iterm2-direct -TD
	+ updated teraterm, added teraterm-256color -TD
	+ add mlterm-direct -TD
	+ add descriptions for ANSI building-blocks -TD

20180121 pre-release
	> terminfo changes:
	+ add xterm+noalt, xterm+titlestack, xterm+alt1049, xterm+alt+title
	  blocks from xterm #331 -TD
	+ add xterm+direct, xterm+indirect, xterm-direct entries from xterm
	  #331 -TD
	+ modify xterm+256color and xterm+256setaf to use correct number of
	  color pairs, for ncurses 6.1 -TD
	+ add rs1 capability to xterm-256color -TD
	+ modify xterm-r5, xterm-r6 and xterm-xf86-v32 to use xterm+kbs to
	  match xterm #272, reflecting packager's changes -TD
	+ remove "boolean" Se, Ss from st-0.7 -TD
	+ add konsole-direct and st-direct -TD
	+ remove unsupported "Tc" capability from st-0.7; use st-direct if
	  direct-colors are wanted -TD
	+ add vte-direct -TD
	+ add XT, hpa, indn, and vpa to screen, and invis, E3 to tmux (patch by
	  Pierre Carru)
	+ use xterm+sm+1006 in xterm-new, vte-2014 -TD
	+ use xterm+x11mouse in iterm, iterm2, mlterm3 because xterm's 1006
	  mode does not work with those programs.  konsole is debatable -TD
	+ add "termite" entry (report by Markus Pfeiffer) -TD
	> merge branch begun April 2, 2017 which provides these features:
	+ support read/write new binary-format for terminfo which stores
	  numeric capabilities as a signed 32-bit integer.  The test programs
	  such as picsmap, ncurses were created or updated during 2017 to use
	  this feature.
	+ the new format is written by the wide-character configuration of
	  tic when it finds a numeric capability larger than 32767.
	+ other applications such as infocmp built with the wide-character
	  ncurses library work as expected.
	+ applications built with the "narrow" (8-bit) configuration will
	  read the new format, but will limit those extended values to 32767.
	+ in either wide/narrow configuration, the structure defined in
	  term.h still uses signed 16-bit values.
	+ because it is incompatible with the legacy (mid-1980s) binary format,
	  a new magic value is provided for the "file" program.
	+ the term.5 manual page is updated to describe this new format.
	+ the limit on file-size for compiled terminfo is increased in the
	  wide-character configuration to 32768.

20180120
	+ build-fix in picsmap.c for stdint.h existence.
	+ add --disable-stripping option to configure scripts.
	+ modify ncurses-examples to install test-scripts in the data directory.
	+ work around tool-breakage in Debian 9 and later by invoking
	  gprconfig to specify the C compiler to be used by gnatmake,
	  and conditionally suppressing Library_Options line for static
	  libraries.
	+ bump the compat level for test-packages to 7, i.e., Debian 5.

20180106
	+ fixes for writing extended color pairs in putwin.
	+ modify test/savescreen.c to add test patterns that exercise 88-,
	  256-, etc., colors.
	+ modify configure option --with-build-cc, adding clang, c89 and c99
	  as possible default values.
	+ modify ncurses-examples configure script to use pkg-config for the
	  extra form/menu/panel libraries, to be more consistent with the
	  handling of the curses/ncurses library.
	+ modify test-packages for mingw to supply "pc" files.
	+ modify gen-pkgconfig.in to list -lpthread as a private library when
	  configured to access it via weak symbols.
	+ simplify gen-pkgconfig.in, adding -ltinfo without the special linker
	  checks because some versions of the linker simply hard-code the
	  behavior.
	+ update URLs for ncurses website to use https.
	+ modify CF_CURSES_LIBS to fill in $cf_nculib_root in case the
	  ncurses-examples are built with a system ncurses that lacks the
	  standard "curses" symbolic link, as done by SuSE.  The symbol is
	  needed to make a followup check for the pthread library work, and
	  would be set properly using the options "--with-screen", etc.
	+ generate misc/*.pc with "all" rule, as done for "sources" rule
	  (report by Jeffrey Walton).

20171230
	+ build-fix for ncurses-examples with Fedora27, adding check for
	  reset_color_pairs() -- not yet in Fedora's package.
	+ consistently add $CFLAGS to $MK_SHARED_LIB symbol in configure
	  script when the latter happens to use the C compiler rather than
	  directly using the loader (report by Jeffrey Walton).
	+ set ABI for upcoming 6.1 release in "*.map" files.  While there are
	  some remaining internals to apply, no ABI-related changes are
	  anticipated.
	+ add configure --with-config-suffix option to work around filename
	  conflict with Redhat packages versus test-packages.

20171223
	+ modify ncurses-examples to quiet const-warnings when building with
	  PDCurses.
	+ modify toe to not exit if unable to read a terminal description,
	  e.g., if there is a permission problem.
	+ minor fix for progs/toe.c, using _nc_free_termtype2.
	+ assign 0 to pointer in _nc_tgetent_leak() after freeing it. Also
	  avoid reusing pointer from previous successful call to tgetent
	  if the latest call is unsuccessful (patch by Michael Schroeder,
	  OpenSuSE #1070450).
	+ minor fix for test/tracemunch, initialize $awaiting variable.

20171216
	+ repair template in test/package/ncurses-examples.spec (cf: 20171111).
	+ improve tic's warning about the number of parameters tparm might use
	  for u1-u9 by making a special case for u6.
	+ improve curs_attr.3x discussion of color pairs.

20171209
	+ modify misc/ncurses-config.in to make output with --includedir
	  consistent with --cflags, i.e., when --disable-overwrite option was
	  configured the output should show the subdirectory where headers
	  are.
	+ modify MKlib_gen.sh to suppress macros when calling an "implemented"
	  function in link_test.c
	+ updated ftp-url used in test-packages, etc.
	+ modify order of -pie/-shared options in configure script in case
	  LDFLAGS uses "-pie", working around a defect or limitation in the GNU
	  linker (prompted by patch by Yogesh Prasad, forwarded by Jay Shah).
	+ add entry in man_db.renames for user_caps.5

20171125
	+ modify MKlib_gen.sh to avoid tracing result from getstr/getnstr
	  before initialized.
	+ add "-a" aspect-ratio option to picsmap.
	+ add configure check for default path of rgb.txt, used in picsmap.
	+ modify _nc_write_entry() to truncate too-long filename (report by
	  Hosein Askari, Debian #882620).
	+ build-fix for ncurses-examples with NetBSD curses:
	  + it lacks the use_env() function.
	  + it lacks libpanel; a recent change used the wrong ifdef symbol.
	+ add a macro for is_linetouched() and adjust the function's return
	  value to make it possible for most applications to check for an
	  error-return (report by Midolikawa H).
	+ additional manpage cleanup.
	+ update config.guess, config.sub from
		http://git.savannah.gnu.org/cgit/config.git

20171118
	+ add a note to curs_addch.3x on portability.
	+ add a note to curs_pad.3x on the origin and portability of pads.
	+ improve manpage description of getattrs (report by Midolikawa H).
	+ improve manpage macros (prompted by discussion in Debian #880551.
	+ reviewed test-programs using KEY_RESIZE, made fixes to test/worm.c
	+ add a "-d" option to picsmap for default-colors.
	+ modify old terminology entry and a few other terminal emulators to
	  account for xon -TD
	+ correct sgr string for tmux, which used screen's "standout" code
	  rather than the standard code (patch by Roman Kagan)
	+ correct sgr/sgr0 strings in a few other cases reported by tic, making
	  those correspond to the non-sgr settings where they differ, but
	  otherwise use ECMA-48 consistently:
	  jaixterm, aixterm, att5420_2, att4424, att500, decansi, d410-7b,
	  dm80, hpterm, emu-220, hp2, iTerm2.app, mterm-ansi, ncrvt100an,
	  st-0.7, vi603, vwmterm -TD
	+ build-fix for diagnostics warning in lib_mouse.c for pre-5.0 versions
	  of gcc which did not recognize the diagnostic "push" pragma (patch by
	  Vassili Courzakis).

20171111
	+ add "op" to xterm+256setaf -TD
	+ reviewed terminology 1.0.0 -TD
	+ reviewed st 0.7 -TD
	+ suppress debug-package for ncurses-examples rpm build.

20171104
	+ check for interrupt in color-pair initialization of dots_curses.c,
	  dots_xcurses.c
	+ add z/Z zoom feature to test/ncurses.c C/c screens.
	+ add '<' and '>' commands to test/ncurses.c S/s screens, to better
	  test off-by-ones in the overlap/copywin functions.

20171028
	+ improve man/curs_inwstr.3x, correct end-logic for lib_inwstr.c
	  (report by Midolikawa H).
	+ fix typo in a few places for "improvements" (patch by Sven Joachim).
	+ clear the other half of a double-width character on which a line
	  drawing character is drawn.
	+ make test/ncurses.c "s" test easier to understand which subtests are
	  available; add a "S" wide-character overlap test-screen.
	+ modify test/ncurses.c C/c tests to allow for extended color pairs.
	+ add endwin() call in error-returns from test/ncurses.c omitted in
	  recent redesign of its menu (cf: 20170923).
	+ improve install of hashed-db by removing the ".db" file as done for
	  directory-tree terminal databases.
	+ repair a few overlooked items in include/ncurses_defs from recent
	  port/refactoring of test-programs (cf: 20170909).
	+ add test/padview.c, to compare pads with direct updates in view.c

20171021
	+ modify test/view.c to expand tabs using the ncurses library rather
	  than in the test-program.
	+ remove very old SIGWINCH example in test/view.c, just use KEY_RESIZE.
	+ add -T, -e, -f -m options to "dots" test-programs.
	+ fix a few typos in usage-messages for test-programs.

20171014
	+ minor cleanup to test/view.c:
	  + eliminate "-n" option by simply reading the whole file.
	  + implement page up/down commands.
	+ add check in tput for init/reset operands to ensure those use a
	  terminal.
	+ improve manual pages which discuss chtype, cchar_t types and the
	  attribute values which can be stored in those types.
	+ correct array-index when parsing "-T" command-line option in tabs
	  program.
	+ modify demo_new_pair.c to pass extended pairs to setcchar().
	+ add test/dots_xcurses.c to illustrate a different approach used for
	  extended colors which can be contrasted with dots_curses.c.
	+ add a check in tic to note when a description uses non-mandatory
	  delays without xon_xoff.  This is not an error, but some descriptions
	  for a terminal emulator may use the combination incorrectly.

20171007
	+ modify "-T" option of clear and tput to call use_tioctl() to obtain
	  the operating system's notion of the screensize if possible.
	+ review/repair some exit-codes for tput, making usage-message exit
	  with 2 rather than 1, and a failure to open terminal 4+errno.
	+ amend check in tput, tabs and clear to allow those to use the
	  database-only features in cron if a -T option gives a suitable
	  terminal name (report by Lauri Tirkkonen).
	+ correct an ifdef in test/ncurses.c for systems with soft-keys but
	  not slk_color().
	+ regenerate man-html documentation.

20170930
	+ fix a symbol conflict that made ncurses.c C/c menu not work with
	  Solaris xpg4 curses.
	+ add refresh() call to dots_mvcur.c, needed to use mvcur() with
	  Solaris xpg4 curses after calling newterm().
	+ minor fixes for configure script from work on ncurses-examples and
	  tin.
	+ improve animation in test/xmas.c by adding a time-delay in blinkit().
	+ modify several test programs to reflect that ncurses honors existing
	  signal handlers in initscr(), while other implementations do not.
	+ modify bs.c to make it easier to quit.
	+ change ncurses-examples to use attr_t vs chtype to follow X/Open
	  documentation more closely since Solaris xpg4-curses uses different
	  values for WA_xxx vs A_xxx that rely on attr_t being an unsigned
	  short.  Tru64 aka OSF1, HPUX, AIX did as ncurses does, equating the
	  two sets.

20170923
	+ modify menu for test/ncurses.c to fit on 24-line screen.
	+ build-fix for configure --with-caps=uwin
	+ add options to test_arrays.c, for selecting termcap vs terminfo, etc.

20170916
	+ minor fix to test/filter.c to avoid clearing the command in one case.
	+ modify filter() to discard clr_eos if back_color_erase is set.

20170909
	+ improve wide-character implementation of myADDNSTR() in frm_driver.c,
	  which was inconsistent with the normal implementation.
	+ save/restore cursor position in Undo_Justification(), matching
	  behavior of Buffer_To_Window() (report by Leon Winter).
	+ modify test/knight to provide the "slow" solution for small screens
	  using "R", noting that Warnsdorf's method is easily done with "a".
	+ modify several test-programs which call use_default_colors() to
	  consistently do this only if "-d" option is given.
	+ additional changes to test with non-standard variants of curses:
	  + modify a loop limit in firework.c to work around absence of limit
	    checks in some libraries.
	  + fill the last row of a window with "?" in firstlast if waddch does
	    not return ERR on the lower-right corner.
	+ add checks in test/configure for some functions not in 4.3BSD curses.
	+ fix a regression in test/configure (cf: 20170826).

20170902
	+ amend change for endwin-state for better consistency with the older
	  logic (report/patch by Jeb Rosen, cf: 20170722).
	+ modify check in fmt_entry() to handle a cancelled reset string
	  (Debian #873746).  Make similar fixes in other parts of dump_entry.c
	  and tput.c

20170827
	+ fix a bug in repeat_char logic (cf: 20170729, report by Chris Clayton).

20170826
	+ fixes for "iterm2" (report by Leonardo Brondani Schenkel) -TD
	+ corrected a warning from tic about keys which are the same, to skip
	  over missing/cancelled values.
	+ add check in tic for unnecessary use of "2" to denote a shifted
	  special key.
	+ improve checks in trim_sgr0, comp_parse.c and parse_entry.c, for
	  cancelled string capabilities.
	+ add check in _nc_parse_entry() for invalid entry name, setting the
	  name to "invalid" to avoid problems storing entries.
	+ add/improve checks in tic's parser to address invalid input
	  + add a check in comp_scan.c to handle the special case where a
	    nontext file ending with a NUL rather than newline is given to tic
	    as input (Redhat #1484274).
	  + allow for cancelled capabilities in _nc_save_str (Redhat #1484276).
	  + add validity checks for "use=" target in _nc_parse_entry (Redhat
	    #1484284).
	  + check for invalid strings in postprocess_termcap (Redhat #1484285)
	  + reset secondary pointers on EOF in next_char() (Redhat #1484287).
	  + guard _nc_safe_strcpy() and _nc_safe_strcat() against calls using
	    cancelled strings (Redhat #1484291).
	+ correct typo in curs_memleaks.3x (Sven Joachim).
	+ improve test/configure checks for some curses variants not based on
	  X/Open Curses.
	+ add options for test/configure to disable checks for form, menu and
	  panel libraries.

20170819
	+ update "iterm" entry -TD
	+ add "iterm2" entry (report by Leonardo Brondani Schenkel) -TD
	+ regenerate llib-* files.
	+ regenerate HTML manpages.
	+ improve picsmap test-program:
	  + reduce memory used for tsearch
	  + add report in log file showing cumulative color coverage.
	+ add -x option to clear/tput to make the E3 extension optional
	  (cf: 20130622).
	+ add options -T and -V to clear command for compatibility with tput.
	+ add usage message to clear command (Debian #371855).
	+ improve usage messages for tset and tput.
	+ minor fixes to "RGB" extension and reset_color_pairs().

20170812
	+ improve description of -R option in infocmp manual page (report by
	  Stephane Chazelas).
	+ add reset_color_pairs() function.
	+ add user_caps.5 manual page to document the terminfo extensions used
	  by ncurses.
	+ improve build scripts, using SIGQUIT vs SIGTRAP; add other configure
	  script fixes from work on xterm, lynx and tack.
	+ modify install-rule for ncurses-examples to put the data files in
	  /usr/share/ncurses-examples
	+ improve tracemunch, by changing address-parameters of add_wch(),
	  color_content() and pair_content() to dummy parameters.
	+ minor optimization to _nc_change_pair, to return quickly when the
	  current screen is marked for clearing.
	+ in-progress changes to improve performance of test/picsmap.c for
	  loading image files.
	+ modify allocation for SCREEN's color-pair table to start small, grow
	  on demand up to the existing limit.
	+ add "RGB" extension capability for direct-color support, use this to
	  improve color_content().
	+ improve picsmap test-program:
	  + if no palette file is needed, attempt to load one based on $TERM,
	    checking first in the current directory, then by adding ".dat"
	    suffix, and finally in the data-directory, e.g.,
	    /usr/share/ncurses-examples
	  + add "-l" option for logging
	  + add "-d" option for debugging
	  + add "-s" option for stepping automatically through list of images,
	    with time delay.
	  + use tsearch to improve time for loading color table for images.
	+ update config.guess, config.sub from
		http://git.savannah.gnu.org/cgit/config.git

20170729
	+ update interix entry using tack and SFU on Windows 7 Ultimate -TD
	+ use ^? for kdch1 in interix (reported by Jonathan de Boyne Pollard)
	+ add "rep" to xterm-new, available since 1997/01/26 -TD
	+ move SGR 24 and 27 from vte-2014 to vte-2012 (request by Alain
	  Williams) -TD
	+ add a check in newline_forces_scroll() in case a program moves the
	  cursor outside scrolling margins (report by Robert King).
	+ improve _nc_tparm_analyze, using that to extend the checks made by
	  tic for reporting inconsistencies between the expected number of
	  parameters for a capability and the actual.
	+ amend handling of repeat_char capability in EmitRange (adapted from
	  report/patch by Dick Wesseling):
	  + translate the character to the alternate character set when the
	    alternate character set is enabled.
	  + do not use repeat_char for characters past 255.
	+ document "_nc_free_tinfo" in manual page, because it could be used in
	  tack for memory-leak checking.
	+ add "--without-tack" configure option to refine "--with-progs"
	  configure option.  Normally tack is no longer built in-tree, but
	  a few packagers combine it during the build.  If term_entry.h is
	  installed, there is no advantage to in-tree builds.
	+ adjust configure-script to define HAVE_CURSES_DATA_BOOLNAMES symbol
	  needed for tack 1.08 when built in-tree.  Rather than relying upon
	  internal "_nc_" functions, tack now uses the boolean, number and
	  string capability name-arrays provided by ncurses and SVr4 Unix
	  curses.  It still uses term_entry.h for the definitions of the
	  extended capability arrays.
	+ add an overlooked null-pointer check in mvcur changes from 20170722

20170722
	+ improve test-packages for ncurses-examples and AdaCurses for lintian
	+ modify logic for endwin-state to be able to detect the case where
	  the screen was never initialized, using that to trigger a flush of
	  ncurses' buffer for mvcur, e.g., in test/dots_mvcur.c for the
	  term-driver configuration.
	+ add dependency upon ncurses_cfg.h to a few other internal header
	  files to allow each to be compiled separately.
	+ add dependency upon ncurses_cfg.h to tic's header-files; any program
	  using tic-library will have to supply this file.  Legacy tack
	  versions supply this file; ongoing tack development has dropped the
	  dependency upon tic-library and new releases will not be affected.

20170715
	+ modify command-line parameters for "convert" used in picsmap to work
	  with ImageMagick 6.8 and newer.
	+ fix build-problem with tack and ABI-5 (Debian #868328).
	+ repair termcap-format from tic/infocmp broken in 20170701 fixes
	  (Debian #868266).
	+ reformat terminfo.src with 20170513 updates.
	+ improve test-packages to address lintian warnings.

20170708
	+ add a note to tic manual page about -W versus -f options.
	+ correct a limit-check in fixes from 20170701 (report by Sven Joachim).

20170701
	+ modify update_getenv() in db_iterator.c to ensure that environment
	  variables which are not initially set will be checked later if an
	  application happens to set them (patch by Guillaume Maudoux).
	+ remove initialization-check for calling napms() in the term-driver
	  configuration; none is needed.
	+ add help-screen to test/test_getstr.c and test/test_get_wstr.c
	+ improve compatibility between different configurations of new_prescr,
	  fixing a case with threaded code and term-driver where c++/demo did
	  not work (cf: 20160213).
	+ the fixes for Redhat #1464685 obscured a problem subsequently
	  reported in Redhat #1464687; the given test-case was no longer
	  reproducible.  Testing without the fixes for the earlier reports
	  showed a problem with buffer overflow in dump_entry.c, which is
	  addressed by reducing the use of a fixed-size buffer.
	+ add/improve checks in tic's parser to address invalid input
	  (Redhat #1464684, #1464685, #1464686, #1464691).
	  + alloc_entry.c, add a check for a null-pointer.
	  + parse_entry.c, add several checks for valid pointers as well as
	    one check to ensure that a single character on a line is not
	    treated as the 2-character termcap short-name.
	+ fix a memory leak in delscreen() (report by Bai Junq).
	+ improve tracemunch, showing thread identifiers as names.
	+ fix a use-after-free in NCursesMenu::~NCursesMenu()
	+ further amend incorrect calls for memory-leaks from 20170617 changes
	  (report by Allen Hewes).

20170624
	+ modify c++/etip.h.in to accommodate deprecation of throw() and
	  throws() in c++17 (prompted by patch by Romain Geissler).
	+ remove some incorrect calls for memory-leaks from 20170617 changes
	  (report by Allen Hewes).
	+ add test-programs for termattrs and term_attrs.
	+ modify _nc_outc_wrapper to use the standard output if the screen was
	  not initialized, rather than returning an error.
	+ improve checks for low-level terminfo functions when the terminal
	  has not been initialized (Redhat #1345963).
	+ modify make_hash to allow building with address-sanitizer,
	  assuming that --disable-leaks is configured.
	+ amend changes for number_format() in 20170506 to avoid undefined
	  behavior when shifting (patch by Emanuele Giaquinta).

20170617
	+ fill in some places where TERMTYPE2 vs TERMTYPE was not used
	  (report by Allen Hewes).
	+ use ExitTerminfo() internally in error-exits for ncurses' setupterm
	  to help with leak checking.
	+ use ExitProgram() in error-exit from initscr() to help with leak
	  checking.
	+ review test-programs, adding checks for cases where the terminal
	  cannot be initialized.

20170610
	+ add option "-xp" to picsmap.c, to use init_extended_pair().
	+ make simple performance fixes for picsmap.c
	+ improve aspect ratio of images read from "convert" in picsmap.c

20170603
	+ add option to picsmap to use color-palette files, e.g., for mapping
	  to xterm-256color.
	+ move the data in SCREEN used for the alloc_pair() function to the
	  end, to restore compatibility between ncurses/ncursesw libtinfo
	  (report/patch by Miroslav Lichvar).
	+ add build-time utility "report_offsets" to help show when the various
	  configurations of tinfo library are compatible or not.

20170527
	+ improved test/picsmap.c:
	  + lookup named colors for xpm files in rgb.txt
	  + accept blanks in color-keys for xpm files.
	  + if neither xbm/xpm work, try "convert", which may be available.

20170520
	+ modify test/picsmap.c to read xpm files.
	+ modify package/debian/* to create documentation packages, so the
	  related files can be checked with lintian.
	+ fix some typos in manpages (report/patch by Sven Joachim).

20170513
	+ add test/picsmap.c to fill in some testing issues not met by dots.
	  The initial version reads X bitmap (".xbm") files.
	+ repair logic which forces a repaint where a color-pair's content is
	  changed (cf: 20170311).
	+ improve tracemunch, showing screenXX pointers as names.

20170506
	+ modify tic/infocmp display of numeric values to use hexadecimal when
	  they are "close" to a power of two, making the result more readable.
	+ improve discussion of portability in curs_mouse.3x
	+ change line-length for generated html/manpages to 78 columns from 65.
	+ improve discussion of line-drawing characters in curs_add_wch.3x
	  (prompted by discussion with Lorinczy Zsigmond).
	+ cleanup formatting of hackguide.html and ncurses-intro.html
	+ add examples for WACS_D_PLUS and WACS_T_PLUS to test/ncurses.c

20170429
	+ corrected a case where $with_gpm was set to "maybe" after CF_WITH_GPM,
	  overlooked in 20160528 fixes (report by Alexandre Bury).
	+ improve a couple of test-program's help-messages.
	+ corrected loop in rain.c from 20170415 changes.
	+ modify winnstr and winchnstr to return error if the output pointer is
	  null, as well as adding a null pointer check of the window pointer
	  for better compatibility with other implementations.
	+ improve discussion of NetBSD curses in scr_dump.5
	+ modify LIMIT_TYPED macro in new_pair.h to avoid changing sign of the
	  value to be limited (reports by Darby Payne, Rob Boudreau).
	+ update config.guess, config.sub from
		http://git.savannah.gnu.org/cgit/config.git

20170422
	+ build-fix for termcap-configuration (report by Chi-Hsuan Yen).
	+ improve terminfo manual page discussion of control- and graphics-
	  characters.
	+ remove tic warning about "^?" in string capabilities, which was
	  marked as an extension (cf: 20000610, 20110820); however all Unix
	  implementations support this and X/Open Curses does not address it.
	  On the other hand, termcap never did support this feature.
	+ correct missing comma-separator between string capabilities in
	  icl6402 and m2-nam -TD
	+ restore rmir/smir in ansi+idc to better match original ansiterm+idc,
	  add alias ansiterm (report by Robert King).
	+ amend an old check for ambiguous use of "ma" in terminfo versus
	  a termcap use, if the capability is cancelled to treat it as number.
	+ correct a case in _nc_captoinfo() which read "%%" and emitted "%".
	+ modify sscanf calls in _nc_infotocap() for patterns "%{number}%+%c"
	  and "%'char'%+%c" to check that the final character is really 'c',
	  avoiding a case in icl6404 which cannot be converted to termcap.
	+ in _nc_infotocap(), add a check to ensure that terminfo "^?" is not
	  written to termcap, because the BSDs did not implement that.
	+ in _nc_tic_expand() and _nc_infotocap(), improve string-length check
	  when deciding whether to use "^X" or "\xxx" format for control
	  characters, to make the output of tic/infocmp more predictable.
	+ limit termcap "%d" width to 2 digits on input, and use "%2" in
	  preference to "%02" on output.
	+ correct terminfo/termcap conversion of "%02" and "%03" into "%2" and
	  "%3"; the result repeated the last character.
	+ add man/scr_dump.5 to document screen-dump format.

20170415
	+ modify several test programs to use new popup_msgs, adapted from
	  help-screen used in test/edit_field.c
	+ drop two symbols obsoleted in 2004: _nc_check_termtype, and
	  _nc_resolve_uses
	+ fix some old copyright dates (cf: 20031025).
	+ build-fixes for test/savescreen.c to work with AIX and HPUX.
	+ minor fix to configure script, adding a backslash/continuation.
	+ extend TERMINAL structure for ABI 6 to store numbers internally as
	  integers rather than short, by adding new data for this purpose.
	+ more fixes for minor memory-leaks in test-programs.

20170408
	+ change logic in wins_nwstr() to avoid addressing data past the output
	  of mbstowcs().
	+ correct a call to setcchar() in Data_Entry_w() from 20131207 changes.
	+ fix minor memory-leaks in test-programs.
	+ further improve ifdef in term_entry.h for internal definitions not
	  used by tack.

20170401
	+ minor fixes for vt100+4bsd, e.g., delay in sgr for consistency -TD
	+ add smso for env230, to match sgr -TD
	+ remove p7/protect from sgr in fbterm -TD
	+ drop setf/setb from fbterm; setaf/setab are enough -TD
	+ make xterm-pcolor sgr consistent with other capabilities -TD
	+ add rmxx/smxx ECMA-48 strikeout extension to tmux and xterm-basic
	  (discussion with Nicholas Marriott)
	+ add test-programs sp_tinfo and extended_color
	+ modify no-leaks code for lib_cur_term.c to account for the tgetent()
	  cache.
	+ modify setupterm() to save original tty-modes so that erasechar()
	  works as expected.  Also modify _nc_setupscreen() to avoid redundant
	  calls to get original tty-modes.
	+ modify set_curterm() to update ttytype[] data used by longname().
	+ modify wattr_set() and wattr_get() to return ERR if win-parameter is
	  null, as documented.
	+ improve cast used for null-pointer checks in header macros, to
	  reduce compiler warnings.
	+ modify several functions, using the reserved "opts" parameter to pass
	  color- and pair-values larger than 16-bits:
	  + getcchar(), setcchar(), slk_attr_set(), vid_puts(), wattr_get(),
	    wattr_set(), wchgat(), wcolor_set().
	  + Other functions call these with the corresponding altered behavior,
	    including chgat(), mvchgat(), mvwchgat(), slk_color_on(),
	    slk_color_off(), vid_attr().
	+ add new functions for manipulating color- and pair-values larger
	  than 16-bits.  These are extended_color_content(),
	  extended_pair_content(), extended_slk_color(), init_extended_color(),
	  init_extended_pair(), and the corresponding sp-funcs.

20170325
	+ fix a memory leak in the window-list when creating multiple screens
	  (reports by Andres Martinelli, Debian #783486).
	+ reviewed calls from link_test.c, added a few more null-pointer
	  checks.
	+ add a null-pointer check in ungetmouse, in case mousemask was not
	  called (report by "Kau").
	+ updated curs_sp_funcs.3x for new functions.

20170318
	+ change TERMINAL structure in term.h to make it opaque.  Some
	  applications misuse its members, e.g., directly modifying it
	  rather than using def_prog_mode().
	+ modify utility headers such as tic.h to make it clearer which are
	  externals that are used by tack.
	+ improve curs_slk.3x in particular its discussion of portability.
	+ fix cut/paste in legacy_encoding.3x
	+ add prototype for find_pair() to new_pair.3x (report by Branden
	  Robinson).
	+ fix a couple of broken links in generated man-html documentation.
	+ regenerate man-html documentation.

20170311
	+ modify vt100 rs2 string to reset vt52 mode and scrolling regions
	  (report/analysis by Robert King) -TD
	+ add vt100+4bsd building block, use that for older terminals rather
	  than "vt100" which is now mostly used as a building block for
	  terminal emulators -TD
	+ correct a few spelling errors in terminfo.src comments -TD
	+ add fbterm -TD
	+ fix a typo in ncurses.c test_attr legend (patch by Petr Vanek).
	+ changed internal colorpair_t to a struct, eliminating an internal
	  8-bit limit on colors
	+ add ncurses/new_pair.h
	+ add ncurses/base/new_pair.c with alloc_pair(), find_pair() and
	  free_pair() functions
	+ add test/demo_new_pair.c

20170304
	+ improve terminfo manual description of terminfo syntax.
	+ clarify the use of wint_t vs wchar_t in curs_get_wstr.3x
	+ improve description of endwin() in manual.
	+ modify setcchar() and getcchar() to treat negative color-pair as an
	  error.
	+ fix a typo in include/hashed_db.h (Andre Sa).

20170225
	+ fixes for CF_CC_ENV_FLAGS (report by Ross Burton).

20170218
	+ fix several formatting issues with manual pages.
	+ correct read of terminfo entry in which all strings are absent or
	  explicitly cancelled.  Before this fix, the result was that all were
	  treated as only absent.
	+ modify infocmp to suppress mixture of absent/cancelled capabilities
	  that would only show as "NULL, NULL", unless the -q option is used,
	  e.g., to show "-, @" or "@, -".

20170212
	+ build-fixes for PGI compilers (report by Adam J. Stewart)
	  + accept whitespace in sed expression for generating expanded.c
	  + modify configure check that g++ compiler warnings are not used.
	  + add configure check for -fPIC option needed for shared libraries.
	+ let configure --disable-ext-funcs override the default for the
	  --enable-sp-funcs option.
	+ mark some structs in form/menu/panel libraries as potentially opaque
	  without modifying API/ABI.
	+ add configure option --enable-opaque-curses for ncurses library and
	  similar options for the other libraries.

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
	+ add settings corresponding to xterm-keys option to tmux entry to
	  reflect upcoming change to make that option "on" by default
	  (patch by Nicholas Marriott).
	+ uncancel Ms in tmux entry (Harry Gindi, Nicholas Marriott).
	+ add dumb-emacs-ansi -TD

20170121
	+ improve discussion of early history of tput program.
	+ incorporate A_COLOR mask into COLOR_PAIR(), in case user application
	  provides an out-of-range pair number (report by Elijah Stone).
	+ clarify description in tput manual page regarding support for
	  termcap names (prompted by FreeBSD #214709).
	+ remove a restriction in tput's support for termcap names which
	  omitted capabilities normally not shown in termcap translations
	  (cf: 990123).
	+ modify configure script for clang as used on FreeBSD, to work around
	  clang's differences in exit codes vs gcc.

20170114
	+ improve discussion of early history of tset/reset programs.
	+ clarify in manual pages that the optional verbose option level is
	  available only when ncurses is configured for tracing.
	+ amend change from 20161231 to avoid writing traces to the standard
	  error after initializing the trace feature using the environment
	  variable.

20170107
	+ amend changes for tput to reset tty modes to "sane" if the program
	  is run as "reset", like tset.  Likewise, ensure that tset sends
	  either reset- or init-strings.
	+ improve manual page descriptions of tput init/reset and tset/reset,
	  to make it easier to see how they are similar and different.
	+ move a static result from key_name() to _nc_globals
	+ modify _nc_get_screensize to allow for use_env() and use_tioctl()
	  state to be per-screen when sp-funcs are configured, better matching
	  the behavior when using the term-driver configuration.
	+ improve cross-references in manual pages for often used functions
	+ move SCREEN field for use_tioctl() data before the ncursesw fields,
	  and limit that to the sp-funcs configuration to improve termlib
	  compatibility (cf:  20120714).
	+ correct order of initialization for traces in use_env() and
	  use_tioctl() versus first trace calls.

20161231
	+ fix errata for ncurses-howto (report by Damien Ruscoe).
	+ fix a few places in configure/build scripts where DESTDIR and rpath
	  were combined (report by Thomas Klausner).
	+ merge current st description (report by Harry Gindi) -TD
	+ modify flash capability for linux and wyse entries to put the delay
	  between the reverse/normal escapes rather than after -TD
	+ modify program tabs to pass the actual tty file descriptor to
	  setupterm rather than the standard output, making padding work
	  consistently.
	+ explain in clear's manual page that it writes to stdout.
	+ add special case for verbose debugging traces of command-line
	  utilities which write to stderr (cf: 20161126).
	+ remove a trace with literal escapes from skip_DECSCNM(), added in
	  20161203.
	+ update config.guess, config.sub from
		http://git.savannah.gnu.org/cgit/config.git

20161224
	+ correct parameters for copywin call in _nc_Synchronize_Attributes()
	  (patch by Leon Winter).
	+ improve color-handling section in terminfo manual page (prompted by
	  patch by Mihail Konev).
	+ modify programs clear, tput and tset to pass the actual tty file
	  descriptor to setupterm rather than the standard output, making
	  padding work.

20161217
	+ add tput-colorcube demo script.
	+ add -r and -s options to tput-initc demo, to match usage in xterm.
	+ flush the standard output in _nc_flush for the case where SP is zero,
	  e.g., when called via putp.  This fixes a scenario where "tput flash"
	  did not work after changes in 20130112.

20161210
	+ add configure script option --disable-wattr-macros for use in cases
	  where one wants to use the same headers for ncurses5/ncurses6
	  development, by suppressing the wattr* macros which differ due to
	  the introduction of extended colors (prompted by comments in
	  Debian #230990, Redhat #1270534).
	+ add test/tput-initc to demonstrate tput used to initialize palette
	  from a data file.
	+ modify test/xterm*.dat to use the newer color4/color12 values.

20161203
	+ improve discussion of field validation in form_driver.3x manual page.
	+ update curs_trace.3x manual page.

20161126
	+ modify linux-16color to not mask dim, standout or reverse with the
	  ncv capability -TD
	+ add 0.1sec mandatory delay to flash capabilities using the VT100
	  reverse-video control -TD
	+ omit selection of ISO-8859-1 for G0 in enacs capability from linux2.6
	  entry, to avoid conflict with the user-defined mapping.  The reset
	  feature will use ISO-8859-1 in any case (Mikulas Patocka).
	+ improve check in tic for delays by also warning about beep/flash
	  when a delay is not embedded, or if those use the VT100 reverse
	  video escape without using a delay.
	+ minor fix for syntax-check of delays from 20161119 changes.
	+ modify trace() to avoid overwriting existing file (report by Maor
	  Shwartz).

20161119
	+ add check in tic for some syntax errors of delays, as well as use of
	  proportional delays for non-line capabilities.
	+ document history of the clear program and the E3 extension, prompted
	  by various discussions including
	  http://unix.stackexchange.com/questions/87469/clearing-the-old-scrollback-buffer

20161112
	+ improve -W option in tic/infocmp:
	  + correct order of size-adjustments in wrapped lines
	  + if -f option splits line, do not further split it with -W
	  + begin a new line when adding "use=" after a wrapped line

20161105
	+ fix typo in man/terminfo.tail (Alain Williams).
	+ correct program-name in adacurses6-config.1 manual page.

20161029
	+ add new function "unfocus_current_field" (Leon Winter)

20161022
	+ modify tset -w (and tput reset) to update the program's copy of the
	  screensize if it was already set in the system, to improve tabstop
	  setting which relies upon knowing the actual screensize.
	+ add functionality of tset -w to tput, like the "-c" feature this is
	  not optional in tput.
	+ add "clear" as a possible link/alias to tput.
	+ improve tput's check for being called as "init" or "reset" to allow
	  for transformed names.
	+ split-out the "clear" function from progs/clear.c, share with
	  tput to get the same behavior, e.g., the E3 extension.

20161015
	+ amend internal use of tputs to consistently use the number of lines
	  affected, e.g., for insert/delete character operations.  While
	  merging terminfo source early in 1995, several descriptions used the
	  "*" proportional delay for these operations, prompting a change in
	  doupdate.
	+ regenerate llib-* files.
	+ regenerate HTML manpages.
	+ fix several formatting issues with manual pages.

20161008
	+ adjust size in infocmp/tic to work with strlcpy.
	+ fix configure script to record when strlcat is found on OpenBSD.
	+ build-fix for "recent" OpenBSD vs baudrate.

20161001
	+ add -W option to tic/infocmp to force long strings to wrap.  This is
	  in addition to the -w option which attempts to fit capabilities into
	  a given line-length.
	+ add linux-m1 minitel entries (patch by Alexandre Montaron).
	+ correct rs2 string for vt100-nam -TD

20160924
	+ modify _nc_tic_expand to escape comma if it immediately follows a
	  percent sign, to work with minitel change.
	+ updated minitel and viewdata descriptions (Alexandre Montaron).

20160917
	+ build-fix for gnat6, which unhelpfully attempts to compile C files.
	+ fix typo in 20160910 changes (Debian #837892, patch by Sven Joachim).

20160910
	+ trim dead code ifdef'd with HIDE_EINTR since 970830 (discussion with
	  Leon Winter).
	+ trim some obsolete/incorrect wording about EINTR from wgetch manual
	  page (patch by Leon Winter).
	+ really correct 20100515 change (patch by Rich Coe).
	+ add "--enable-string-hacks" option to test/configure
	+ completed string-hacks for "sprintf", etc., including test-programs.
	+ make "--enable-string-hacks" work with Debian by checking for the
	  "bsd" library and its associated "<bsd/string.h>" header.

20160903
	+ correct 20100515 change for weak signals versus sigprocmask (report
	  by Rich Coe).
	+ modify misc/Makefile.in to work around OpenBSD "make" which unlike
	  all other versions of "make" does not recognize continuation lines
	  of comments.
	+ amend the last change to CF_C_ENV_FLAGS to move only the
	  preprocessor, optimization and warning flags to CPPFLAGS and CFLAGS,
	  leaving the residue in CC.  That happens to work for gcc's various
	  "model" options, but may require tuning for other compilers (report
	  by Sven Joachim).

20160827
	+ add "v" menu entry to test/ncurses.c to show baudrate and other
	  values.
	+ add "newer" baudrate symbols from Linux and FreeBSD to progs/tset.c,
	  lib_baudrate.c
	+ modify CF_XOPEN_SOURCE macro:
	  + add "uclinux" to case for "linux" (patch by Yann E. Morin)
	  + modify _GNU_SOURCE for cygwin headers, tested with cygwin 2.3, 2.5
	    (patch by Corinna Vinschen, from changes to tin).
	+ improve CF_CC_ENV_FLAGS macro to allow for compiler wrappers such
	  as "ccache" (report by Enrico Scholz).
	+ update config.guess, config.sub from
		http://git.savannah.gnu.org/cgit/config.git

20160820
	+ update tput manual page to reflect changes to manipulate terminal
	  modes by sharing functions with tset.
	+ add the terminal-mode parts of "reset" (aka tset) to the "tput reset"
	  command, making the two almost the same except for window-size.
	+ adapt logic used in dialog "--keep-tite" option for test/filter.c as
	  "-a" option.  When set, test/filter attempts to suppress the
	  alternate screen.
	+ correct a typo in interix entry -TD

20160813
	+ add a dependency upon generated-sources in Ada95/src/Makefile.in to
	  handle a case of "configure && make install".
	+ trim trailing blanks from include/Caps*, to work around a problem
	  in sed (Debian #818067).

20160806
	+ improve CF_GNU_SOURCE configure macro to optionally define
	  _DEFAULT_SOURCE work around a nuisance in recent glibc releases.
	+ move the terminfo-specific parts of tput's "reset" function into
	  the shared reset_cmd.c, making the two forms of reset use the same
	  strings.
	+ split-out the terminal initialization functions from tset as
	  progs/reset_cmd.c, as part of changes to merge the reset-feature
	  with tput.

20160730
	+ change tset's initialization to allow it to get settings from the
	  standard input as well as /dev/tty, to be more effective when
	  output or error are redirected.
	+ improve discussion of history and portability for tset/reset/tput
	  manual pages.

20160723
	+ improve error message from tset/reset when both stderr/stdout are
	  redirected to a file or pipe.
	+ improve organization of curs_attr.3x, curs_color.3x

20160709
	+ work around Debian's antique/unmaintained version of mawk when
	  building link_test.
	+ improve test/list_keys.c, showing ncurses's convention of modifiers
	  for special keys, based on xterm.

20160702
	+ improve test/list_keys.c, using $TERM if no parameters are given.

20160625
	+ build-fixes for ncurses "test_progs" rule.
	+ amend change to CF_CC_ENV_FLAGS in 20160521 to make multilib build
	  work (report by Sven Joachim).

20160618
	+ build-fixes for ncurses-examples with NetBSD curses.
	+ improve test/list_keys.c, fixing column-widths and sorting the list
	  to make it more readable.

20160611
	+ revise fix for Debian #805618 (report by Vlado Potisk, cf: 20151128).
	+ modify test/ncurses.c a/A screens to make exiting on an escape
	  character depend on the start of keypad and timeout modes, to allow
	  better testing of function-keys.
	+ modify rs1 for xterm-16color, xterm-88color and xterm-256color to
	  reset palette using "oc" string as in linux -TD
	+ use ANSI reply for u8 in xterm-new, to reflect vt220-style responses
	  that could be returned -TD
	+ added a few capabilities fixed in recent vte -TD

20160604
	+ correct logic for -f option in test/demo_terminfo.c
	+ add test/list_keys.c

20160528
	+ further workaround for PIE/PIC breakage which causes gpm to not link.
	+ fix most cppcheck warnings, mostly style, in ncurses library.

20160521
	+ improved manual page description of tset/reset versus window-size.
	+ fixes to work with a slightly broken compiler configuration which
	  cannot compile "Hello World!" without adding compiler options
	  (report by Ola x Nilsson):
	  + pass appropriate compiler options to the CF_PROG_CC_C_O macro.
	  + when separating compiler and options in CF_CC_ENV_FLAGS, ensure
	    that all options are split-off into CFLAGS or CPPFLAGS
	  + restore some -I options removed in 20140726 because they appeared
	    to be redundant.  In fact, they are needed for a compiler that
	    cannot combine -c and -o options.

20160514
	+ regenerate HTML manpages.
	+ improve manual pages for wgetch and wget_wch to point out that they
	  might return values without names in curses.h (Debian #822426).
	+ make linux3.0 entry the default linux entry (Debian #823658) -TD
	+ modify linux2.6 entry to improve line-drawing so that the linux3.0
	  entry can be used in non-UTF-8 mode -TD
	+ document return value of use_extended_names (report by Mike Gran).

20160507
	+ amend change to _nc_do_color to restore the early return for the
	  special case used in _nc_screen_wrap (report by Dick Streefland,
	  cf: 20151017).
	+ modify test/ncurses.c:
	  + check return-value of putwin
	  + correct ifdef which made the 'g' test's legend not reflect changes
	    to keypad- and scroll-modes.
	+ correct return-value of extended putwin (report by Mike Gran).

20160423
	+ modify test/ncurses.c 'd' edit-color menu to optionally read xterm
	  color palette directly from terminal, as well as handling KEY_RESIZE
	  and screen-repainting with control/L and control/R.
	+ add 'oc' capability to xterm+256color, allowing palette reset for
	  xterm -TD

20160416
	+ add workaround in configure script for inept transition to PIE vs
	  PIC builds documented in
		  https://fedoraproject.org/wiki/Changes/Harden_All_Packages
	+ add "reset" to list of programs whose names might change in manpages
	  due to program-transformation configure options.
	+ drop long-obsolete "-n" option from tset.

20160409
	+ modify test/blue.c to use Unicode values for card-glyphs when
	  available, as well as improving the check for CP437 and CP850.

20160402
	+ regenerate HTML manpages.
	+ improve manual pages for utilities with respect to POSIX versus
	  X/Open Curses.

20160326
	+ regenerate HTML manpages.
	+ improve test/demo_menus.c, allowing mouse-click on the menu-headers
	  to switch the active menu.  This requires a new extension option
	  O_MOUSE_MENU to tell the menu driver to put mouse events which do not
	  apply to the active menu back into the queue so that the application
	  can handle the event.

20160319
	+ improve description of tgoto parameters (report by Steffen Nurpmeso).
	+ amend workaround for Solaris line-drawing to restore a special case
	  that maps Unicode line-drawing characters into the acsc string for
	  non-Unicode locales (Debian #816888).

20160312
	+ modified test/filter.c to illustrate an alternative to getnstr, that
	  polls for input while updating a clock on the right margin as well
	  as responding to window size-changes.

20160305
	+ omit a redefinition of "inline" when traces are enabled, since this
	  does not work with gcc 5.3.x MinGW cross-compiling (cf: 20150912).

20160220
	+ modify test/configure script to check for pthread dependency of
	  ncursest or ncursestw library when building ncurses examples, e.g.,
	  in case weak symbols are used.
	+ modify configure macro for shared-library rules to use -Wl,-rpath
	  rather than -rpath to work around a bug in scons (FreeBSD #178732,
	  cf: 20061021).
	+ double-width multibyte characters were not counted properly in
	  winsnstr and wins_nwstr (report/example by Eric Pruitt).
	+ update config.guess, config.sub from
		http://git.savannah.gnu.org/cgit/config.git

20160213
	+ amend fix for _nc_ripoffline from 20091031 to make test/ditto.c work
	  in threaded configuration.
	+ move _nc_tracebits, _tracedump and _tracemouse to curses.priv.h,
	  since they are not part of the suggested ABI6.

20160206
	+ define WIN32_LEAN_AND_MEAN for MinGW port, making builds faster.
	+ modify test/ditto.c to allow $XTERM_PROG environment variable to
	  override "xterm" as the name of the program to run in the threaded
	  configuration.

20160130
	+ improve formatting of man/curs_refresh.3x and man/tset.1 manpages
	+ regenerate HTML manpages using newer man2html to eliminate some
	  unwanted blank lines.

20160123
	+ ifdef'd header-file definition of mouse_trafo() with NCURSES_NOMACROS
	  (report by Corey Minyard).
	+ fix some strict compiler-warnings in traces.

20160116
	+ tidy up comments about hardcoded 256color palette (report by
	  Leonardo Brondani Schenkel) -TD
	+ add putty-noapp entry, and amend putty entry to use application mode
	  for better consistency with xterm (report by Leonardo Brondani
	  Schenkel) -TD
	+ modify _nc_viscbuf2() and _tracecchar_t2() to trace wide-characters
	  as a whole rather than their multibyte equivalents.
	+ minor fix in wadd_wchnstr() to ensure that each cell has nonzero
	  width.
	+ move PUTC_INIT calls next to wcrtomb calls, to avoid carry-over of
	  error status when processing Unicode values which are not mapped.

20160102
	+ modify ncurses c/C color test-screens to take advantage of wide
	  screens, reducing the number of lines used for 88- and 256-colors.
	+ minor refinement to check versus ncv to ignore two parameters of
	  SGR 38 and 48 when those come from color-capabilities.

20151226
	+ add check in tic for use of bold, etc., video attributes in the
	  color capabilities, accounting whether the feature is listed in ncv.
	+ add check in tic for conflict between ritm, rmso, rmul versus sgr0.

20151219
	+ add a paragraph to curs_getch.3x discussing key naming (discussion
	  with James Crippen).
	+ amend workaround for Solaris vs line-drawing to take the configure
	  check into account.
	+ add a configure check for wcwidth() versus the ncurses line-drawing
	  characters, to use in special-casing systems such as Solaris.

20151212
	+ improve CF_XOPEN_CURSES macro used in test/configure, to define as
	  needed NCURSES_WIDECHAR for platforms where _XOPEN_SOURCE_EXTENDED
	  does not work.  Also modified the test program to ensure that if
	  building with ncurses, that the cchar_t type is checked, since that
	  normally is since 20111030 ifdef'd depending on this test.
	+ improve 20121222 workaround for broken acs, letting Solaris "work"
	  in spite of its misconfigured wcwidth which marks all of the line
	  drawing characters as double-width.

20151205
	+ update form_cursor.3x, form_post.3x, menu_attributes.3x to list
	  function names in NAME section (patch by Jason McIntyre).
	+ minor fixes to manpage NAME/SYNOPSIS sections to consistently use
	  rule that either all functions which are prototyped in SYNOPSIS are
	  listed in the NAME section, or the manual-page name is the sole item
	  listed in the NAME section.  The latter is used to reduce clutter,
	  e.g., for the top-level library manual pages as well as for certain
	  feature-pages such as SP-funcs and threading (prompted by patches by
	  Jason McIntyre).

20151128
	+ add option to preserve leading whitespace in form fields (patch by
	  Leon Winter).
	+ add missing assignment in lib_getch.c to make notimeout() work
	  (Debian #805618).
	+ add 't' toggle for notimeout() function in test/ncurses.c a/A screens
	+ add viewdata terminal description (Alexandre Montaron).
	+ fix a case in tic/infocmp for formatting capabilities where a
	  backslash at the end of a string was mishandled.
	+ fix some typos in curs_inopts.3x (Benno Schulenberg).

20151121
	+ fix some inconsistencies in the pccon* entries -TD
	+ add bold to pccon+sgr+acs and pccon-base (Tati Chevron).
	+ add keys f12-f124 to pccon+keys (Tati Chevron).
	+ add test/test_sgr.c program to exercise all combinations of sgr.

20151107
	+ modify tset's assignment to TERM in its output to reflect the name by
	  which the terminal description is found, rather than the primary
	  name.  That was an unnecessary part from the initial conversion of
	  tset from termcap to terminfo.  The termcap program in 4.3BSD did
	  this to avoid using the short 2-character name (report by Rich
	  Burridge).
	+ minor fix to configure script to ensure that rules for resulting.map
	  are only generated when needed (cf: 20151101).
	+ modify configure script to handle the case where tic-library is
	  renamed, but the --with-debug option is used by itself without
	  normal or shared libraries (prompted by comment in Debian #803482).

20151101
	+ amend change for pkg-config which allows build of pc-files when no
	  valid pkg-config library directory was configured to suppress the
	  actual install if it is not overridden to a valid directory at
	  install time (cf: 20150822).
	+ modify editing script which generates resulting.map to work with the
	  clang configuration on recent FreeBSD, which gives an error on an
	  empty "local" section.
	+ fix a spurious "(Part)" message in test/ncurses.c b/B tests due
	  to incorrect attribute-masking.

20151024
	+ modify MKexpanded.sh to update the expansion of a temporary filename
	  to "expanded.c", for use in trace statements.
	+ modify layout of b/B tests in test/ncurses.c to allow for additional
	  annotation on the right margin; some terminals with partial support
	  did not display well.
	+ fix typo in curs_attr.3x (patch by Sven Joachim).
	+ fix typo in INSTALL (patch by Tomas Cech).
	+ improve configure check for setting WILDCARD_SYMS variable; on ppc64
	  the variable is in the Data section rather than Text (patch by Michel
	  Normand, Novell #946048).
	+ using configure option "--without-fallbacks" incorrectly caused
	  FALLBACK_LIST to be set to "no" (patch by Tomas Cech).
	+ updated minitel entries to fix kel problem with emacs, and add
	  minitel1b-nb (Alexandre Montaron).
	+ reviewed/updated nsterm entry Terminal.app in OSX -TD
	+ replace some dead URLs in comments with equivalents from the
	  Internet Archive -TD
	+ update config.guess, config.sub from
		http://git.savannah.gnu.org/cgit/config.git

20151017
	+ modify ncurses/Makefile.in to sort keys.list in POSIX locale
	  (Debian #801864, patch by Esa Peuha).
	+ remove an early-return from _nc_do_color, which can interfere with
	  data needed by bkgd when ncurses is configured with extended colors
	  (patch by Denis Tikhomirov).
	> fixes for OS/2 (patches by KO Myung-Hun)
	+ use button instead of kbuf[0] in EMX-specific part of lib_mouse.c
	+ support building with libtool on OS/2
	+ use stdc++ on OS/2 kLIBC
	+ clear cf_XOPEN_SOURCE on OS/2

20151010
	+ add configure check for openpty to test/configure script, for ditto.
	+ minor fixes to test/view.c in investigating Debian #790847.
	+ update autoconf patch to 2.52.20150926, incorporates a fix for Cdk.
	+ add workaround for breakage of POSIX makefiles by recent binutils
	  change.
	+ improve check for working poll() by using posix_openpt() as a
	  fallback in case there is no valid terminal on the standard input
	  (prompted by discussion on bug-ncurses mailing list, Debian #676461).

20150926
	+ change makefile rule for removing resulting.map to distclean rather
	  than clean.
	+ add /lib/terminfo to terminfo-dirs in ".deb" test-package.
	+ add note on portability of resizeterm and wresize to manual pages.

20150919
	+ clarify in resizeterm.3x how KEY_RESIZE is pushed onto the input
	  stream.
	+ clarify in curs_getch.3x that the keypad mode affects ability to
	  read KEY_MOUSE codes, but does not affect KEY_RESIZE.
	+ add overlooked build-fix needed with Cygwin for separate Ada95
	  configure script, cf: 20150606 (report by Nicolas Boulenguez)

20150912
	+ fixes for configure/build using clang on OSX (prompted by report by
	  William Gallafent).
	  + do not redefine "inline" in ncurses_cfg.h; this was originally to
	    solve a problem with gcc/g++, but is aggravated by clang's misuse
	    of symbols to pretend it is gcc.
	  + add braces to configure script to prevent unwanted add of
	    "-lstdc++" to the CXXLIBS symbol.
	  + improve/update test-program used for checking existence of stdc++
	    library.
	  + if $CXXLIBS is set, the linkage test uses that in addition to $LIBS

20150905
	+ add note in curs_addch.3x about line-drawing when it depends upon
	  UTF-8.
	+ add tic -q option for consistency with infocmp, use it to suppress
	  all comments from the "tic -I" output.
	+ modify infocmp -q option to suppress the "Reconstructed from"
	  header.
	+ add infocmp/tic -Q option, which allows one to dump the compiled
	  form of the terminal entry, in hexadecimal or base64.

20150822
	+ sort options in usage message for infocmp, to make it simpler to
	  see unused letters.
	+ update usage message for tic, adding "-0" option.
	+ documented differences in ESCDELAY versus AIX's implementation.
	+ fix some compiler warnings from ports.
	+ modify --with-pkg-config-libdir option to make it possible to install
	  ".pc" files even if pkg-config is not found (adapted from patch by
	  Joshua Root).

20150815
	+ disallow "no" as a possible value for "--with-shlib-version" option,
	  overlooked in cleanup-changes for 20000708 (report by Tommy Alex).
	+ update release notes in INSTALL.
	+ regenerate llib-* files to help with review for release notes.

20150810
	+ workaround for Debian #65617, which was fixed in mawk's upstream
	  releases in 2009 (report by Sven Joachim).  See
	  	https://invisible-island.net/mawk/CHANGES.html#t20090727

20150808 6.0 release for upload to ftp.gnu.org

20150808
	+ build-fix for Ada95 on older platforms without stdint.h
	+ build-fix for Solaris, whose /bin/sh and /usr/bin/sed are non-POSIX.
	+ update release announcement, summarizing more than 800 changes across
	  more than 200 snapshots.
	+ minor fixes to manpages, etc., to simplify linking from announcement
	  page.

20150725
	+ updated llib-* files.
	+ build-fixes for ncurses library "test_progs" rule.
	+ use alternate workaround for gcc 5.x feature (adapted from patch by
	  Mikhail Peselnik).
	+ add status line to tmux via xterm+sl (patch by Nicholas Marriott).
	+ fixes for st 0.5 from testing with tack -TD
	+ review/improve several manual pages to break up wall-of-text:
	  curs_add_wch.3x, curs_attr.3x, curs_bkgd.3x, curs_bkgrnd.3x,
	  curs_getcchar.3x, curs_getch.3x, curs_kernel.3x, curs_mouse.3x,
	  curs_outopts.3x, curs_overlay.3x, curs_pad.3x, curs_termattrs.3x
	  curs_trace.3x, and curs_window.3x

20150719
	+ correct an old logic error for %A and %O in tparm (report by "zreed").
	+ improve documentation for signal handlers by adding section in the
	  curs_initscr.3x page.
	+ modify logic in make_keys.c to not assume anything about the size
	  of strnames and strfnames variables, since those may be functions
	  in the thread- or broken-linker configurations (problem found by
	  Coverity).
	+ modify test/configure script to check for pthreads configuration,
	  e.g., ncursestw library.

20150711
	+ modify scripts to build/use test-packages for the pthreads
	  configuration of ncurses6.
	+ add references to ttytype and termcap symbols in demo_terminfo.c and
	  demo_termcap.c to ensure that when building ncursest.map, etc., that
	  the corresponding names such as _nc_ttytype are added to the list of
	  versioned symbols (report by Werner Fink)
	+ fix regression from 20150704 (report/patch by Werner Fink).

20150704
	+ fix a few problems reported by Coverity.
	+ fix comparison against "/usr/include" in misc/gen-pkgconfig.in
	  (report by Daiki Ueno, Debian #790548, cf:  20141213).

20150627
	+ modify configure script to remove deprecated ABI 5 symbols when
	  building ABI 6.
	+ add symbols _nc_Default_Field, _nc_Default_Form, _nc_has_mouse to
	  map-files, but marked as deprecated so that they can easily be
	  suppressed from ABI 6 builds (Debian #788610).
	+ comment-out "screen.xterm" entry, and inherit screen.xterm-256color
	  from xterm-new (report by Richard Birkett) -TD
	+ modify read_entry.c to set the error-return to -1 if no terminal
	  databases were found, as documented for setupterm.
	+ add test_setupterm.c to demonstrate normal/error returns from the
	  setupterm and restartterm functions.
	+ amend cleanup change from 20110813 which removed redundant definition
	  of ret_error, etc., from tinfo_driver.c, to account for the fact that
	  it should return a bool rather than int (report/analysis by Johannes
	  Schindelin).

20150613
	+ fix overflow warning for OSX with lib_baudrate.c (cf: 20010630).
	+ modify script used to generate map/sym files to mark 5.9.20150530 as
	  the last "5.9" version, and regenerated the files.  That makes the
	  files not use ".current" for the post-5.9 symbols.  This also
	  corrects the label for _nc_sigprocmask used in when weak symbols are
	  configured for the ncursest/ncursestw libraries (prompted by
	  discussion with Sven Joachim).
	+ fix typo in NEWS (report by Sven Joachim).

20150606 pre-release
	+ make ABI 6 the default by updates to dist.mk and VERSION, with the
	  intention that the existing ABI 5 should build as before using the
	  "--with-abi-version=5" option.
	+ regenerate ada- and man-html documentation.
	+ minor fixes to color- and util-manpages.
	+ fix a regression in Ada95/gen/Makefile.in, to handle special case of
	  Cygwin, which uses the broken-linker feature.
	+ amend fix for CF_NCURSES_CONFIG used in test/configure to assume that
	  ncurses package scripts work when present for cross-compiling, as the
	  lessor of two evils (cf: 20150530).
	+ add check in configure script to disallow conflicting options
	  "--with-termlib" and "--enable-term-driver".
	+ move defaults for "--disable-lp64" and "--with-versioned-syms" into
	  CF_ABI_DEFAULTS macro.

20150530
	+ change private type for Event_Mask in Ada95 binding to work when
	  mmask_t is set to 32-bits.
	+ remove spurious "%;" from st entry (report by Daniel Pitts) -TD
	+ add vte-2014, update vte to use that -TD
	+ modify tic and infocmp to "move" a diagnostic for tparm strings that
	  have a syntax error to tic's "-c" option (report by Daniel Pitts).
	+ fix two problems with configure script macros (Debian #786436,
	  cf: 20150425, cf: 20100529).

20150523
	+ add 'P' menu item to test/ncurses.c, to show pad in color.
	+ improve discussion in curs_color.3x about color rendering (prompted
	  by comment on Stack Overflow forum):
	+ remove screen-bce.mlterm, since mlterm does not do "bce" -TD
	+ add several screen.XXX entries to support the respective variations
	  for 256 colors -TD
	+ add putty+fnkeys* building-block entries -TD
	+ add smkx/rmkx to capabilities analyzed with infocmp "-i" option.

20150516
	+ amend change to ".pc" files to only use the extra loader flags which
	  may have rpath options (report by Sven Joachim, cf: 20150502).
	+ change versioning for dpkg's in test-packages for Ada95 and
	  ncurses-examples for consistency with Debian, to work with package
	  updates.
	+ regenerate html manpages.
	+ clarify handling of carriage return in waddch manual page; it was
	  discussed only in the portability section (prompted by comment on
	  Stack Overflow forum):

20150509
	+ add test-packages for cross-compiling ncurses-examples using the
	  MinGW test-packages.  These are only the Debian packages; RPM later.
	+ cleanup format of debian/copyright files
	+ add pc-files to the MinGW cross-compiling test-packages.
	+ correct a couple of places in gen-pkgconfig.in to handle renaming of
	  the tinfo library.

20150502
	+ modify the configure script to allow different default values
	  for ABI 5 versus ABI 6.
	+ add wgetch-events to test-packages.
	+ add a note on how to build ncurses-examples to test/README.
	+ fix a memory leak in delscreen (report by Daniel Kahn Gillmor,
	  Debian #783486) -TD
	+ remove unnecessary ';' from E3 capabilities -TD
	+ add tmux entry, derived from screen (patch by Nicholas Marriott).
	+ split-out recent change to nsterm-bce as nsterm-build326, and add
	  nsterm-build342 to reflect changes with successive releases of OSX
	  (discussion with Leonardo B Schenkel)
	+ add xon, ich1, il1 to ibm3161 (patch by Stephen Powell, Debian
	  #783806)
	+ add sample "magic" file, to document ext-putwin.
	+ modify gen-pkgconfig.in to add explicit -ltinfo, etc., to the
	  generated ".pc" file when ld option "--as-needed" is used, or when
	  ncurses and tinfo are installed without using rpath (prompted by
	  discussion with Sylvain Bertrand).
	+ modify test-package for ncurses6 to omit rpath feature when installed
	  in /usr.
	+ add OSX's "*.dSYM" to clean-rules in makefiles.
	+ make extra-suffix work for OSX configuration, e.g., for shared
	  libraries.
	+ modify Ada95/configure script to work with pkg-config
	+ move test-package for ncurses6 to /usr, since filename-conflicts have
	  been eliminated.
	+ corrected build rules for Ada95/gen/generate; it does not depend on
	  the ncurses library aside from headers.
	+ reviewed man pages, fixed a few other spelling errors.
	+ fix a typo in curs_util.3x (Sven Joachim).
	+ use extra-suffix in some overlooked shared library dependencies
	  found by 20150425 changes for test-packages.
	+ update config.guess, config.sub from
		http://git.savannah.gnu.org/cgit/config.git

20150425
	+ expanded description of tgetstr's area pointer in manual page
	  (report by Todd M Lewis).
	+ in-progress changes to modify test-packages to use ncursesw6 rather
	  than ncursesw, with updated configure scripts.
	+ modify CF_NCURSES_CONFIG in Ada95- and test-configure scripts to
	  check for ".pc" files via pkg-config, but add a linkage check since
	  frequently pkg-config configurations are broken.
	+ modify misc/gen-pkgconfig.in to include EXTRA_LDFLAGS, e.g., for the
	  rpath option.
	+ add 'dim' capability to screen entry (report by Leonardo B Schenkel)
	+ add several key definitions to nsterm-bce to match preconfigured
	  keys, e.g., with OSX 10.9 and 10.10 (report by Leonardo B Schenkel)
	+ fix repeated "extra-suffix" in ncurses-config.in (cf: 20150418).
	+ improve term_variables manual page, adding section on the terminfo
	  long-name symbols which are defined in the term.h header.
	+ fix bug in lib_tracebits.c introduced in const-fixes (cf: 20150404).

20150418
	+ avoid a blank line in output from tabs program by ending it with
	  a carriage return as done in FreeBSD (patch by James Clarke).
	+ build-fix for the "--enable-ext-putwin" feature when not using
	  wide characters (report by Werner Fink).
	+ modify autoconf macros to use scripting improvement from xterm.
	+ add -brtl option to compiler options on AIX 5-7, needed to link
	  with the shared libraries.
	+ add --with-extra-suffix option to help with installing nonconflicting
	  ncurses6 packages, e.g., avoiding header- and library-conflicts.
	  NOTE: as a side-effect, this renames
		  adacurses-config to adacurses5-config and
		  adacursesw-config to adacursesw5-config
	+ modify debian/rules test package to suffix programs with "6".
	+ clarify in curs_inopts.3x that window-specific settings do not
	  inherit into new windows.

20150404
	+ improve description of start_color() in the manual.
	+ modify several files in ncurses- and progs-directories to allow
	  const data used in internal tables to be put by the linker into the
	  readonly text segment.

20150329
	+ correct cut/paste error for "--enable-ext-putwin" that made it the
	  same as "--enable-ext-colors" (report by Roumen Petrov)

20150328
	+ add "-f" option to test/savescreen.c to help with testing/debugging
	  the extended putwin/getwin.
	+ add logic for writing/reading combining characters in the extended
	  putwin/getwin.
	+ add "--enable-ext-putwin" configure option to turn on the extended
	  putwin/getwin.

20150321
	+ in-progress changes to provide an extended version of putwin and
	  getwin which will be capable of reading screen-dumps between the
	  wide/normal ncurses configurations.  These are text files, except
	  for a magic code at the beginning:
	  0       string          \210\210        Screen-dump (ncurses)

20150307
	+ document limitations of getwin in manual page (prompted by discussion
	  with John S Urban).
	+ extend test/savescreen.c to demonstrate that color pair values
	  and graphic characters can be restored using getwin.

20150228
	+ modify win_driver.c to eliminate the constructor, to make it more
	  usable in an application which may/may not need the console window
	  (report by Grady Martin).

20150221
	+ capture define's related to -D_XOPEN_SOURCE from the configure check
	  and add those to the *-config and *.pc files, to simplify use for
	  the wide-character libraries.
	+ modify ncurses.spec to accommodate Fedora21's location of pkg-config
	  directory.
	+ correct sense of "--disable-lib-suffixes" configure option (report
	  by Nicolas Boos, cf: 20140426).

20150214
	+ regenerate html manpages using improved man2html from work on xterm.
	+ regenerated ".map" and ".sym" files using improved script, accounting
	  for the "--enable-weak-symbols" configure option (report by Werner
	  Fink).

20150131
	+ regenerated ".map" and ".sym" files using improved script, showing
	  the combinations of configure options used at each stage.

20150124
	+ add configure check to determine if "local: _*;" can be used in the
	  ".map" files to selectively omit symbols beginning with "_".  On at
	  least recent FreeBSD, the wildcard applies to all "_" symbols.
	+ remove obsolete/conflicting rule for ncurses.map from
	  ncurses/Makefile.in (cf:  20130706).

20150117
	+ improve description in INSTALL of the --with-versioned-syms option.
	+ add combination of --with-hashed-db and --with-ticlib to
	  configurations for ".map" files (report by Werner Fink).

20150110
	+ add a step to generating ".map" files, to declare any remaining
	  symbols beginning with "_" as local, at the last version node.
	+ improve configure checks for pkg-config, addressing a variant found
	  with FreeBSD ports.
	+ modify win_driver.c to provide characters for special keys, like
	  ansi.sys, when keypad mode is off, rather than returning nothing at
	  all (discussion with Eli Zaretskii).
	+ add "broken_linker" and "hashed-db" configure options to combinations
	  use for generating the ".map" and ".sym" files.
	+ avoid using "ld" directly when creating shared library, to simplify
	  cross-compiles.  Also drop "-Bsharable" option from shared-library
	  rules for FreeBSD and DragonFly (FreeBSD #196592).
	+ fix a memory leak in form library Free_RegularExpression_Type()
	  (report by Pavel Balaev).

20150103
	+ modify_nc_flush() to retry if interrupted (patch by Stian Skjelstad).
	+ change map files to make _nc_freeall a global, since it may be used
	  via the Ada95 binding when checking for memory leaks.
	+ improve sed script used in 20141220 to account for wide-, threaded-
	  variations in ABI 6.

20141227
	+ regenerate ".map" files, using step overlooked in 20141213 to use
	  the same patch-dates across each file to match ncurses.map (report by
	  Sven Joachim).

20141221
	+ fix an incorrect variable assignment in 20141220 changes (report by
	  Sven Joachim).

20141220
	+ updated Ada95/configure with macro changes from 20141213
	+ tie configure options --with-abi-version and --with-versioned-syms
	  together, so that ABI 6 libraries have distinct symbol versions from
	  the ABI 5 libraries.
	+ replace obsolete/nonworking link to man2html with current one,
	  regenerate html-manpages.

20141213
	+ modify misc/gen-pkgconfig.in to add -I option for include-directory
	  when using both --prefix and --disable-overwrite (report by Misty
	  De Meo).
	+ add configure option --with-pc-suffix to allow minor renaming of
	  ".pc" files and the corresponding library.  Use this in the test
	  package for ncurses6.
	+ modify configure script so that if pkg-config is not installed, it
	  is still possible to install ".pc" files (report by Misty De Meo).
	+ updated ".sym" files, removing symbols which are marked as "local"
	  in the corresponding ".map" files.
	+ updated ".map" files to reflect move of comp_captab and comp_hash
	  from tic-library to tinfo-library in 20090711 (report by Sven
	  Joachim).

20141206
	+ updated ".map" files so that each symbol that may be shared across
	  the different library configurations has the same label.  Some
	  review is needed to ensure these are really compatible.
	+ modify MKlib_gen.sh to work around change in development version of
	  gcc introduced here:
		  https://gcc.gnu.org/ml/gcc-patches/2014-06/msg02185.html
		  https://gcc.gnu.org/ml/gcc-patches/2014-07/msg00236.html
	  (reports by Marcus Shawcroft, Maohui Lei).
	+ improved configure macro CF_SUBDIR_PATH, from lynx changes.

20141129
	+ improved ".map" files by generating them with a script that builds
	  ncurses with several related configurations and merges the results.
	  A further refinement is planned, to make the tic- and tinfo-library
	  symbols use the same versions across each of the four configurations
	  which are represented (reports by Sven Joachim, Werner Fink).

20141115
	+ improve description of limits for color values and color pairs in
	  curs_color.3x (prompted by patch by Tim van der Molen).
	+ add VERSION file, using first field in that to record the ABI version
	  used for configure --with-libtool --disable-libtool-version
	+ add configure options for applying the ".map" and ".sym" files to
	  the ncurses, form, menu and panel libraries.
	+ add ".map" and ".sym" files to show exported symbols, e.g., for
	  symbol-versioning.

20141101
	+ improve strict compiler-warnings by adding a cast in TRACE_RETURN
	  and making a new TRACE_RETURN1 macro for cases where the cast does
	  not apply.

20141025
	+ in-progress changes to integrate the win32 console driver with the
	  msys2 configuration.

20141018
	+ reviewed terminology 0.6.1, add function key definitions.  None of
	  the vt100-compatibility issues were improved -TD
	+ improve infocmp conversion of extended capabilities to termcap by
	  correcting the limit check against parametrized[], as well as filling
	  in a check if the string happens to have parameters, e.g., "xm"
	  in recent changes.
	+ add check for zero/negative dimensions for resizeterm and resize_term
	  (report by Mike Gran).

20141011
	+ add experimental support for xterm's 1005 mouse mode, to use in a
	  demonstration of its limitations.
	+ add experimental support for "%u" format to terminfo.
	+ modify test/ncurses.c to also show position reports in 'a' test.
	+ minor formatting fixes to _nc_trace_mmask_t, make this function
	  exported to help with debugging mouse changes.
	+ improve behavior of wheel-mice for xterm protocol, noting that there
	  are only button-presses for buttons "4" and "5", so there is no need
	  to wait to combine events into double-clicks (report/analysis by
	  Greg Field).
	+ provide examples xterm-1005 and xterm-1006 terminfo entries -TD
	+ implement decoder for xterm SGR 1006 mouse mode.

20140927
	+ implement curs_set in win_driver.c
	+ implement flash in win_driver.c
	+ fix an infinite loop in win_driver.c if the command-window loses
	  focus.
	+ improve the non-buffered mode, i.e., NCURSES_CONSOLE2, of
	  win_driver.c by temporarily changing the buffer-size to match the
	  window-size to eliminate the scrollback.  Also enforce a minimum
	  screen-size of 24x80 in the non-buffered mode.
	+ modify generated misc/Makefile to suppress install.data from the
	  dependencies if the --disable-db-install option is used, compensating
	  for the top-level makefile changes used to add ncurses*-config in the
	  20140920 changes (report by Steven Honeyman).

20140920
	+ add ncurses*-config to bin-directory of sample package-scripts.
	+ add check to ensure that getopt is available; this is a problem in
	  some older cross-compiler environments.
	+ expanded on the description of --disable-overwrite in INSTALL
	  (prompted by reports by Joakim Tjernlund, Thomas Klausner).
	  See Gentoo #522586 and NetBSD #49200 for examples.
	  which relates to the clarified guidelines.
	+ remove special logic from CF_INCLUDE_DIRS which adds the directory
	  for the --includedir from the build (report by Joakim Tjernlund).
	+ add case for Unixware to CF_XOPEN_SOURCE, from lynx changes.
	+ update config.sub from
		http://git.savannah.gnu.org/cgit/config.git

20140913
	+ add a configure check to ignore some of the plethora of non-working
	  C++ cross-compilers.
	+ build-fixes for Ada95 with gnat 4.9

20140906
	+ build-fix and other improvements for port of ncurses-examples to
	  NetBSD.
	+ minor compiler-warning fixes.

20140831
	+ modify test/demo_termcap.c and test/demo_terminfo.c to make their
	  options more directly comparable, and add "-i" option to specify
	  a terminal description filename to parse for names to lookup.

20140823
	+ fix special case where double-width character overwrites a single-
	  width character in the first column (report by Egmont Koblinger,
	  cf: 20050813).

20140816
	+ fix colors in ncurses 'b' test which did not work after changing
	  it to put the test-strings in subwindows (cf: 20140705).
	+ merge redundant SEE-ALSO sections in form and menu manpages.

20140809
	+ modify declarations for user-data pointers in C++ binding to use
	  reinterpret_cast to facilitate converting typed pointers to void*
	  in user's application (patch by Adam Jiang).
	+ regenerated html manpages.
	+ add note regarding cause and effect for TERM in ncurses manpage,
	  having noted clueless verbiage in Terminal.app's "help" file
	  which reverses cause/effect.
	+ remove special fallback definition for NCURSES_ATTR_T, since macros
	  have resolved type-mismatches using casts (cf: 970412).
	+ fixes for win_driver.c:
	  + handle repainting on endwin/refresh combination.
	  + implement beep().
	  + minor cleanup.

20140802
	+ minor portability fixes for MinGW:
	  + ensure WINVER is defined in makefiles rather than using headers
	  + add check for gnatprep "-T" option
	  + work around bug introduced by gcc 4.8.1 in MinGW which breaks
	    "trace" feature:
	    http://stackoverflow.com/questions/20877689/gcc-4-8-1-minggw-d-option-does-not-work-as-usual
	+ fix most compiler warnings for Cygwin ncurses-examples.
	+ restore "redundant" -I options in test/Makefile.in, since they are
	  typically needed when building the derived ncurses-examples package
	  (cf: 20140726).

20140726
	+ eliminate some redundant -I options used for building libraries, and
	  ensure that ${srcdir} is added to the include-options (prompted by
	  discussion with Paul Gilmartin).
	+ modify configure script to work with Minix3.2
	+ add form library extension O_DYNAMIC_JUSTIFY option which can be
	  used to override the different treatment of justification for static
	  versus dynamic fields (adapted from patch by Leon Winter).
	+ add a null pointer check in test/edit_field.c (report/analysis by
	  Leon Winter, cf: 20130608).

20140719
	+ make workarounds for compiling test-programs with NetBSD curses.
	+ improve configure macro CF_ADD_LIBS, to eliminate repeated -l/-L
	  options, from xterm changes.

20140712
	+ correct Charable() macro check for A_ALTCHARSET in wide-characters.
	+ build-fix for position-debug code in tty_update.c, to work with or
	  without sp-funcs.

20140705
	+ add w/W toggle to ncurses.c 'B' test, to demonstrate permutation of
	  video-attributes and colors with double-width character strings.

20140629
	+ correct check in win_driver.c for saving screen contents, e.g., when
	  NCURSES_CONSOLE2 is set (cf: 20140503).
	+ reorganize b/B menu items in ncurses.c, putting the test-strings into
	  subwindows.  This is needed for a planned change to use Unicode
	  fullwidth characters in the test-screens.
	+ correct update to form status for _NEWTOP, broken by fixes for
	  compiler warnings (patch by Leon Winter, cf: 20120616).

20140621
	+ change shared-library suffix for AIX 5 and 6 to ".so", avoiding
	  conflict with the static library (report by Ben Lentz).
	+ document RPATH_LIST in INSTALLATION file, as part of workarounds for
	  upgrading an ncurses library using the "--with-shared" option.
	+ modify test/ncurses.c c/C tests to cycle through subsets of the
	  total number of colors, to better illustrate 8/16/88/256-colors by
	  providing directly comparable screens.
	+ add test/dots_curses.c, for comparison with the low-level examples.

20140614
	+ fix dereference before null check found by Coverity in tic.c
	  (cf: 20140524).
	+ fix sign-extension bug in read_entry.c which prevented "toe" from
	  reading empty "screen+italics" entry.
	+ modify sgr for screen.xterm-new to support dim capability -TD
	+ add dim capability to nsterm+7 -TD
	+ cancel dim capability for iterm -TD
	+ add dim, invis capabilities to vte-2012 -TD
	+ add sitm/ritm to konsole-base and mlterm3 -TD

20140609
	> fix regression in screen terminfo entries (reports by Christian
	  Ebert, Gabriele Balducci) -TD
	+ revert the change to screen; see notes for why this did not work -TD
	+ cancel sitm/ritm for entries which extend "screen", to work around
	  screen's hardcoded behavior for SGR 3 -TD

20140607
	+ separate masking for sgr in vidputs from sitm/ritm, which do not
	  overlap with sgr functionality.
	+ remove unneeded -i option from adacurses-config; put -a in the -I
	  option for consistency (patch by Pascal Pignard).
	+ update xterm-new terminfo entry to xterm patch #305 -TD
	+ change format of test-scripts for Debian Ada95 and ncurses-examples
	  packages to quilted to work around Debian #700177 (cf: 20130907).
	+ build fix for form_driver_w.c as part of ncurses-examples package for
	  older ncurses than 20131207.
	+ add Hello World example to adacurses-config manpage.
	+ remove unused --enable-pc-files option from Ada95/configure.
	+ add --disable-gnat-projects option for testing.
	+ revert changes to Ada95 project-files configuration (cf: 20140524).
	+ corrected usage message in adacurses-config.

20140524
	+ fix typo in ncurses manpage for the NCURSES_NO_MAGIC_COOKIE
	  environment variable.
	+ improve discussion of input-echoing in curs_getch.3x
	+ clarify discussion in curs_addch.3x of wrapping.
	+ modify parametrized.h to make fln non-padded.
	+ correct several entries which had termcap-style padding used in
	  terminfo: adm21, aj510, alto-h19, att605-pc, x820 -TD
	+ correct syntax for padding in some entries: dg211, h19 -TD
	+ correct ti924-8 which had confused padding versus octal escapes -TD
	+ correct padding in sbi entry -TD
	+ fix an old bug in the termcap emulation; "%i" was ignored in tparm()
	  because the parameters to be incremented were already on the internal
	  stack (report by Corinna Vinschen).
	+ modify tic's "-c" option to take into account the "-C" option to
	  activate additional checks which compare the results from running
	  tparm() on the terminfo expressions versus the translated termcap
	  expressions.
	+ modify tic to allow it to read from FIFOs (report by Matthieu Fronton,
	  cf: 20120324).
	> patches by Nicolas Boulenguez:
	+ explicit dereferences to suppress some style warnings.
	+ when c_varargs_to_ada.c includes its header, use double quotes
	  instead of <>.
	+ samples/ncurses2-util.adb:  removed unused with clause.  The warning
	  was removed by an obsolete pragma.
	+ replaced Unreferenced pragmas with Warnings (Off).  The latter,
	  available with older GNATs, needs no configure test.  This also
	  replaces 3 untested Unreferenced pragmas.
	+ simplified To_C usage in trace handling.  Using two parameters allows
	  some basic formatting, and avoids a warning about security with some
	  compiler flags.
	+ for generated Ada sources, replace many snippets with one pure
	  package.
	+ removed C_Chtype and its conversions.
	+ removed C_AttrType and its conversions.
	+ removed conversions between int, Item_Option_Set, Menu_Option_Set.
	+ removed int, Field_Option_Set, Item_Option_Set conversions.
	+ removed C_TraceType, Attribute_Option_Set conversions.
	+ replaced C.int with direct use of Eti_Error, now enumerated.  As it
	  was used in a case statement, values were tested by the Ada compiler
	  to be consecutive anyway.
	+ src/Makefile.in: remove duplicate stanza
	+ only consider using a project for shared libraries.
	+ style. Silent gnat-4.9 warning about misplaced "then".
	+ generate shared library project to honor ADAFLAGS, LDFLAGS.

20140510
	+ cleanup recently introduced compiler warnings for MingW port.
	+ workaround for ${MAKEFLAGS} configure check versus GNU make 4.0,
	  which introduces more than one gratuitous incompatibility.

20140503
	+ add vt520ansi terminfo entry (patch by Mike Gran)
	+ further improve MinGW support for the scenario where there is an
	  ANSI-escapes handler such as ansicon running in the console window
	  (patch by Juergen Pfeifer).

20140426
	+ add --disable-lib-suffixes option (adapted from patch by Juergen
	  Pfeifer).
	+ merge some changes from Juergen Pfeifer's work with MSYS2, to
	  simplify later merging:
	  + use NC_ISATTY() macro for isatty() in library
	  + add _nc_mingw_isatty() and related functions to windows-driver
	  + rename terminal driver entrypoints to simplify grep's
	+ remove a check in the sp-funcs flavor of newterm() which allowed only
	  the first call to newterm() to succeed (report by Thomas Beierlein,
	  cf: 20090927).

20140419
	+ update config.guess, config.sub from
		http://git.savannah.gnu.org/cgit/config.git

20140412
	+ modify configure script:
	  + drop the -no-gcc option from Intel compiler, from lynx changes.
	  + extend the --with-hashed-db configure option to simplify building
	    with different versions of Berkeley database using FreeBSD ports.
	+ improve initialization for MinGW port (Juergen Pfeifer):
	  + enforce Windows-style path-separator if cross-compiling,
	  + add a driver-name method to each of the drivers,
	  + allow the Windows driver name to match "unknown", ignoring case,
	  + lengthen the built-in name for the Windows console driver to
	    "#win32console", and
	  + move the comparison of driver-names allowing abbreviation, e.g.,
	    to "#win32con" into the Windows console driver.

20140329
	+ add check in tic for mismatch between ccc and initp/initc
	+ cancel ccc in putty-256color and konsole-256color for consistency
	  with the cancelled initc capability (patch by Sven Zuhlsdorf).
	+ add xterm+256setaf building block for various terminals which only
	  get the 256-color feature half-implemented -TD
	+ updated "st" entry (leaving the 0.1.1 version as "simpleterm") to
	  0.4.1 -TD

20140323
	+ fix typo in "mlterm" entry (report by Gabriele Balducci) -TD

20140322
	+ use types from <stdint.h> in sample build-scripts for chtype, etc.
	+ modify configure script and curses.h.in to allow the types specified
	  using --with-chtype and related options to be defined in <stdint.h>
	+ add terminology entry -TD
	+ add mlterm3 entry, use that as "mlterm" -TD
	+ inherit mlterm-256color from mlterm -TD

20140315
	+ modify _nc_New_TopRow_and_CurrentItem() to ensure that the menu's
	  top-row is adjusted as needed to ensure that the current item is
	  on the screen (patch by Johann Klammer).
	+ add wgetdelay() to retrieve _delay member of WINDOW if it happens to
	  be opaque, e.g., in the pthread configuration (prompted by patch by
	  Soren Brinkmann).

20140308
	+ modify ifdef in read_entry.c to handle the case where
	  NCURSES_USE_DATABASE is not defined (patch by Xin Li).
	+ add cast in form_driver_w() to fix ARM build (patch by Xin Li).
	+ add logic to win_driver.c to save/restore screen contents when not
	  allocating a console-buffer (cf: 20140215).

20140301
	+ clarify error-returns from newwin (report by Ruslan Nabioullin).

20140222
	+ fix some compiler warnings in win_driver.c
	+ updated notes for wsvt25 based on tack and vttest -TD
	+ add teken entry to show actual properties of FreeBSD's "xterm"
	  console -TD

20140215
	+ in-progress changes to win_driver.c to implement output without
	  allocating a console-buffer.  This uses a pre-existing environment
	  variable NCGDB used by Juergen Pfeifer for debugging (prompted by
	  discussion with Erwin Waterlander regarding Console2, which hangs
	  when reading in an allocated console-buffer).
	+ add -t option to gdc.c, and modify to accept "S" to step through the
	  scrolling-stages.
	+ regenerate NCURSES-Programming-HOWTO.html to fix some of the broken
	  html emitted by docbook.

20140209
	+ modify CF_XOPEN_SOURCE macro to omit followup check to determine if
	  _XOPEN_SOURCE can/should be defined.  g++ 4.7.2 built on Solaris 10
	  has some header breakage due to its own predefinition of this symbol
	  (report by Jean-Pierre Flori, Sage #15796).

20140201
	+ add/use symbol NCURSES_PAIRS_T like NCURSES_COLOR_T, to illustrate
	  which "short" types are for color pairs and which are color values.
	+ fix build for s390x, by correcting field bit offsets in generated
	  representation clauses when int=32 long=64 and endian=big, or at
	  least on s390x (patch by Nicolas Boulenguez).
	+ minor cleanup change to test/form_driver_w.c (patch by Gaute Hope).

20140125
	+ remove unnecessary ifdef's in Ada95/gen/gen.c, which reportedly do
	  not work as is with gcc 4.8 due to fixes using chtype cast made for
	  new compiler warnings by gcc 4.8 in 20130824 (Debian #735753, patch
	  by Nicolas Boulenguez).

20140118
	+ apply includesubdir variable which was introduced in 20130805 to
	  gen-pkgconfig.in (Debian #735782).

20131221
	+ further improved man2html, used this to fix broken links in html
	  manpages.  See
	  ftp://ftp.invisible-island.net/ncurses/patches/man2html

20131214
	+ modify configure-script/ifdef's to allow OLD_TTY feature to be
	  suppressed if the type of ospeed is configured using the option
	  --with-ospeed to not be a short.  By default, it is a short for
	  termcap-compatibility (adapted from suggestion by Christian
	  Weisgerber).
	+ correct a typo in _nc_baudrate() (patch by Christian Weisgerber,
	  cf: 20061230).
	+ fix a few -Wlogical-op warnings.
	+ updated llib-l* files.

20131207
	+ add form_driver_w() entrypoint to wide-character forms library, as
	  well as test program form_driver_w (adapted from patch by Gaute
	  Hope).

20131123
	+ minor fix for CF_GCC_WARNINGS to special-case options which are not
	  recognized by clang.

20131116
	+ add special case to configure script to move _XOPEN_SOURCE_EXTENDED
	  definition from CPPFLAGS to CFLAGS if it happens to be needed for
	  Solaris, because g++ errors with that definition (report by
	  Jean-Pierre Flori, Sage #15268).
	+ correct logic in infocmp's -i option which was intended to ignore
	  strings which correspond to function-keys as candidates for piecing
	  together initialization- or reset-strings.  The problem dates to
	  1.9.7a, but was overlooked until changes in -Wlogical-op warnings for
	  gcc 4.8 (report by David Binderman).
	+ updated CF_GCC_WARNINGS to documented options for gcc 4.9.0, moving
	  checks for -Wextra and -Wdeclaration-after-statement into the macro,
	  and adding checks for -Wignored-qualifiers, -Wlogical-op and
	  -Wvarargs
	+ updated CF_CURSES_UNCTRL_H and CF_SHARED_OPTS macros from ongoing
	  work on cdk.
	+ update config.sub from
		http://git.savannah.gnu.org/cgit/config.git

20131110
	+ minor cleanup of terminfo.tail

20131102
	+ use TS extension to describe xterm's title-escapes -TD
	+ modify terminator and nsterm-s to use xterm+sl-twm building block -TD
	+ update hurd.ti, add xenl to reflect 2011-03-06 change in
	  http://git.savannah.gnu.org/cgit/hurd/hurd.git/log/console/display.c
	  (Debian #727119).
	+ simplify pfkey expression in ansi.sys -TD

20131027
	+ correct/simplify ifdef's for cur_term versus broken-linker and
	  reentrant options (report by Jean-Pierre Flori, cf: 20090530).
	+ modify release/version combinations in test build-scripts to make
	  them more consistent with other packages.

20131019
	+ add nc_mingw.h to installed headers for MinGW port; needed for
	  compiling ncurses-examples.
	+ add rpm-script for testing cross-compile of ncurses-examples.

20131014
	+ fix new typo in CF_ADA_INCLUDE_DIRS macro (report by Roumen Petrov).

20131012
	+ fix a few compiler warnings in progs and test.
	+ minor fix to package/debian-mingw/rules, do not strip dll's.
	+ minor fixes to configure script for empty $prefix, e.g., when doing
	  cross-compiles to MinGW.
	+ add script for building test-packages of binaries cross-compiled to
	  MinGW using NSIS.

20131005
	+ minor fixes for ncurses-example package and makefile.
	+ add scripts for test-builds of cross-compiler packages for ncurses6
	  to MinGW.

20130928
	+ some build-fixes for ncurses-examples with NetBSD-6.0 curses, though
	  it lacks some common functions such as use_env() which is not yet
	  addressed.
	+ build-fix and some compiler warning fixes for ncurses-examples with
	  OpenBSD 5.3
	+ fix a possible null-pointer reference in a trace message from newterm.
	+ quiet a few warnings from NetBSD 6.0 namespace pollution by
	  nonstandard popcount() function in standard strings.h header.
	+ ignore g++ 4.2.1 warnings for "-Weffc++" in c++/cursesmain.cc
	+ fix a few overlooked places for --enable-string-hacks option.

20130921
	+ fix typo in curs_attr.3x (patch by Sven Joachim, cf: 20130831).
	+ build-fix for --with-shared option for DragonFly and FreeBSD (report
	  by Rong-En Fan, cf: 20130727).

20130907
	+ build-fixes for MSYS for two test-programs (patches by Ray Donnelly,
	  Alexey Pavlov).
	+ revert change to two of the dpkg format files, to work with dpkg
	  before/after Debian #700177.
	+ fix gcc -Wconversion warning in wattr_get() macro.
	+ add msys and msysdll to known host/configuration types (patch by
	  Alexey Pavlov).
	+ modify CF_RPATH_HACK configure macro to not rely upon "-u" option
	  of sort, improving portability.
	+ minor improvements for test-programs from reviewing Solaris port.
	+ update config.guess, config.sub from
		http://git.savannah.gnu.org/cgit/config.git

20130831
	+ modify test/ncurses.c b/B tests to display lines only for the
	  attributes which a given terminal supports, to make room for an
	  italics test.
	+ completed ncv table in terminfo.tail; it did not list the wide
	  character codes listed in X/Open Curses issue 7.
	+ add A_ITALIC extension (prompted by discussion with Egmont Koblinger).

20130824
	+ fix some gcc 4.8 -Wconversion warnings.
	+ change format of dpkg test-scripts to quilted to work around bug
	  introduced by Debian #700177.
	+ discard cached keyname() values if meta() is changed after a value
	  was cached using (report by Kurban Mallachiev).

20130816
	+ add checks in tic to warn about terminals which lack cursor
	  addressing, capabilities or having those, are marked as hard_copy or
	  generic_type.
	+ use --without-progs in mingw-ncurses rpm.
	+ split out _nc_init_termtype() from alloc_entry.c to use in MinGW
	  port when tic and other programs are not needed.

20130805
	+ minor fixes to the --disable-overwrite logic, to ensure that the
	  configured $(includedir) is not cancelled by the mingwxx-filesystem
	  rpm macros.
	+ add --disable-db-install configure option, to simplify building
	  cross-compile support packages.
	+ add mingw-ncurses.spec file, for testing cross-compiles.

20130727
	+ improve configure macros from ongoing work on cdk, dialog, xterm:
	  + CF_ADD_LIB_AFTER - fix a problem with -Wl options
	  + CF_RPATH_HACK - add missing result-message
	  + CF_SHARED_OPTS - modify to use $rel_builddir in cygwin and mingw
	    dll symbols (which can be overridden) rather than explicit "../".
	  + CF_SHARED_OPTS - modify NetBSD and DragonFly symbols to use ${CC}
	    rather than ${LD} to improve rpath support.
	  + CF_SHARED_OPTS - add a symbol to denote the temporary files that
	    are created by the macro, to simplify clean-rules.
	  + CF_X_ATHENA - trim extra libraries to work with -Wl,--as-needed
	+ fix a regression in hashed-database support for NetBSD, which uses
	  the key-size differently from other implementations (cf: 20121229).

20130720
	+ further improvements for setupterm manpage, clarifying the
	  initialization of cur_term.

20130713
	+ improve manpages for initscr and setupterm.
	+ minor compiler-warning fixes

20130706
	+ add fallback defs for <inttypes.h> and <stdint.h> (cf: 20120225).
	+ add check for size of wchar_t, use that to suppress a chunk of
	  wcwidth.h in MinGW port.
	+ quiet linker warnings for MinGW cross-compile with dll's using the
	  --enable-auto-import flag.
	+ add ncurses.map rule to ncurses/Makefile to help diagnose symbol
	  table issues.

20130622
	+ modify the clear program to take into account the E3 extended
	  capability to clear the terminal's scrollback buffer (patch by
	  Miroslav Lichvar, Redhat #815790).
	+ clarify in resizeterm manpage that LINES and COLS are updated.
	+ updated ansi example in terminfo.tail, correct misordered example
	  of sgr.
	+ fix other doclifter warnings for manpages
	+ remove unnecessary ".ta" in terminfo.tail, add missing ".fi"
	  (patch by Eric Raymond).

20130615
	+ minor changes to some configure macros to make them more reusable.
	+ fixes for tabs program (prompted by report by Nick Andrik).
	  + corrected logic in command-line parsing of -a and -c predefined
	    tab-lists options.
	  + allow "-0" and "-8" options to be combined with others, e.g.,"-0d".
	  + make warning messages more consistent with the other utilities by
	    not printing the full pathname of the program.
	  + add -V option for consistency with other utilities.
	+ fix off-by-one in columns for tabs program when processing an option
	  such as "-5" (patch by Nick Andrik).

20130608
	+ add to test/demo_forms.c examples of using the menu-hooks as well
	  as showing how the menu item user-data can be used to pass a callback
	  function pointer.
	+ add test/dots_termcap.c
	+ remove setupterm call from test/demo_termcap.c
	+ build-fix if --disable-ext-funcs configure option is used.
	+ modified test/edit_field.c and test/demo_forms.c to move the lengths
	  into a user-data structure, keeping the original string for later
	  expansion to free-format input/out demo.
	+ modified test/demo_forms.c to load data from file.
	+ added note to clarify Terminal.app's non-emulation of the various
	  terminal types listed in the preferences dialog -TD
	+ fix regression in error-reporting in lib_setup.c (Debian #711134,
	  cf: 20121117).
	+ build-fix for a case where --enable-broken_linker and
	  --enable-reentrant options are combined (report by George R Goffe).

20130525
	+ modify mvcur() to distinguish between internal use by the ncurses
	  library, and external callers, preventing it from reading the content
	  of the screen which is only nonblank when curses calls have updated
	  it.  This makes test/dots_mvcur.c avoid painting colored cells in
	  the left margin of the display.
	+ minor fix to test/dots_mvcur.c
	+ move configured symbols USE_DATABASE and USE_TERMCAP to term.h as
	  NCURSES_USE_DATABASE and NCURSES_USE_TERMCAP to allow consistent
	  use of these symbols in term_entry.h

20130518
	+ corrected ifdefs in test/testcurs.c to allow comparison of mouse
	  interface versus pdcurses (cf: 20130316).
	+ add pow() to configure-check for math library, needed since
	  20121208 for test/hanoi (Debian #708056).
	+ regenerated html manpages.
	+ update doctype used for html documentation.

20130511
	+ move nsterm-related entries out of "obsolete" section to more
	  plausible "ansi consoles" -TD
	+ additional cleanup of table-of-contents by reordering -TD
	+ revise fix for check for 8-bit value in _nc_insert_ch(); prior fix
	  prevented inserts when video attributes were attached to the data
	  (cf: 20121215) (Redhat #959534).

20130504
	+ fixes for issues found by Coverity:
	  + correct FNKEY() macro in progs/dump_entry.c, allowing kf11-kf63 to
	    display when infocmp's -R option is used for HP or AIX subsets.
	  + fix dead-code issue with test/movewindow.c
	  + improve limited-checking in _nc_read_termtype().

20130427
	+ fix clang 3.2 warning in progs/dump_entry.c
	+ drop AC_TYPE_SIGNAL check; ncurses relies on c89 and later.

20130413
	+ add MinGW to cases where ncurses installs by default into /usr
	  (prompted by discussion with Daniel Silva Ferreira).
	+ add -D option to infocmp's usage-message (patch by Miroslav Lichvar).
	+ add a missing 'int' type for main function in configure check for
	  type of bool variable, to work with clang 3.2 (report by Dmitri
	  Gribenko).
	+ improve configure check for static_cast, to work with clang 3.2
	  (report by Dmitri Gribenko).
	+ re-order rule for demo.o and macros defining header dependencies in
	  c++/Makefile.in to accommodate gmake (report by Dmitri Gribenko).

20130406
	+ improve parameter checking in copywin().
	+ modify configure script to work around OS X's "libtool" program, to
	  choose glibtool instead.  At the same time, chance the autoconf macro
	  to look for a "tool" rather than a "prog", to help with potential use
	  in cross-compiling.
	+ separate the rpath usage for c++ library from demo program
	  (Redhat #911540)
	+ update/correct header-dependencies in c++ makefile (report by Werner
	  Fink).
	+ add --with-cxx-shared to dpkg-script, as done for rpm-script.

20130324
	+ build-fix for libtool configuration (reports by Daniel Silva Ferreira
	  and Roumen Petrov).

20130323
	+ build-fix for OS X, to handle changes for --with-cxx-shared feature
	  (report by Christian Ebert).
	+ change initialization for vt220, similar entries for consistency
	  with cursor-key strings (NetBSD #47674) -TD
	+ further improvements to linux-16color (Benjamin Sittler)

20130316
	+ additional fix for tic.c, to allocate missing buffer space.
	+ eliminate configure-script warnings for gen-pkgconfig.in
	+ correct typo in sgr string for sun-color,
	  add bold for consistency with sgr,
	  change smso for consistency with sgr -TD
	+ correct typo in sgr string for terminator -TD
	+ add blink to the attributes masked by ncv in linux-16color (report
	  by Benjamin Sittler)
	+ improve warning message from post-load checking for missing "%?"
	  operator by tic/infocmp by showing the entry name and capability.
	+ minor formatting improvement to tic/infocmp -f option to ensure
	  line split after "%;".
	+ amend scripting for --with-cxx-shared option to handle the debug
	  library "libncurses++_g.a" (report by Sven Joachim).

20130309
	+ amend change to toe.c for reading from /dev/zero, to ensure that
	  there is a buffer for the temporary filename (cf: 20120324).
	+ regenerated html manpages.
	+ fix typo in terminfo.head (report by Sven Joachim, cf: 20130302).
	+ updated some autoconf macros:
	  + CF_ACVERSION_CHECK, from byacc 1.9 20130304
	  + CF_INTEL_COMPILER, CF_XOPEN_SOURCE from luit 2.0-20130217
	+ add configure option --with-cxx-shared to permit building
	  libncurses++ as a shared library when using g++, e.g., the same
	  limitations as libtool but better integrated with the usual build
	  configuration (Redhat #911540).
	+ modify MKkey_defs.sh to filter out build-path which was unnecessarily
	  shown in curses.h (Debian #689131).

20130302
	+ add section to terminfo manpage discussing user-defined capabilities.
	+ update manpage description of NCURSES_NO_SETBUF, explaining why it
	  is obsolete.
	+ add a check in waddch_nosync() to ensure that tab characters are
	  treated as control characters; some broken locales claim they are
	  printable.
	+ add some traces to the Windows console driver.
	+ initialize a temporary array in _nc_mbtowc, needed for some cases
	  of raw input in MinGW port.

20130218
	+ correct ifdef on change to lib_twait.c (report by  Werner Fink).
	+ update config.guess, config.sub

20130216
	+ modify test/testcurs.c to work with mouse for ncurses as it does for
	  pdcurses.
	+ modify test/knight.c to work with mouse for pdcurses as it does for
	  ncurses.
	+ modify internal recursion in wgetch() which handles cooked mode to
	  check if the call to wgetnstr() returned an error.  This can happen
	  when both nocbreak() and nodelay() are set, for instance (report by
	  Nils Christopher Brause) (cf: 960418).
	+ fixes for issues found by Coverity:
	  + add a check for valid position in ClearToEOS()
	  + fix in lib_twait.c when --enable-wgetch-events is used, pointer
	    use after free.
	  + improve a limit-check in make_hash.c
	  + fix a memory leak in hashed_db.c

20130209
	+ modify test/configure script to make it simpler to override names
	  of curses-related libraries, to help with linking with pdcurses in
	  MinGW environment.
	+ if the --with-terminfo-dirs configure option is not used, there is
	  no corresponding compiled-in value for that.  Fill in "no default
	  value" for that part of the manpage substitution.

20130202
	+ correct initialization in knight.c which let it occasionally make
	  an incorrect move (cf: 20001028).
	+ improve documentation of the terminfo/termcap search path.

20130126
	+ further fixes to mvcur to pass callback function (cf: 20130112),
	  needed to make test/dots_mvcur work.
	+ reduce calls to SetConsoleActiveScreenBuffer in win_driver.c, to
	  help reduce flicker.
	+ modify configure script to omit "+b" from linker options for very
	  old HP-UX systems (report by Dennis Grevenstein)
	+ add HP-UX workaround for missing EILSEQ on old HP-UX systems (patch
	  by Dennis Grevenstein).
	+ restore memmove/strdup support for antique systems (request by
	  Dennis Grevenstein).
	+ change %l behavior in tparm to push the string length onto the stack
	  rather than saving the formatted length into the output buffer
	  (report by Roy Marples, cf: 980620).

20130119
	+ fixes for issues found by Coverity:
	  + fix memory leak in safe_sprintf.c
	  + add check for return-value in tty_update.c
	  + correct initialization for -s option in test/view.c
	  + add check for numeric overflow in lib_instr.c
	  + improve error-checking in copywin
	+ add advice in infocmp manpage for termcap users (Debian #698469).
	+ add "-y" option to test/demo_termcap and test/demo_terminfo to
	  demonstrate behavior with/without extended capabilities.
	+ updated termcap manpage to document legacy termcap behavior for
	  matching capability names.
	+ modify name-comparison for tgetstr, etc., to accommodate legacy
	  applications as well as to improve compatibility with BSD 4.2
	  termcap implementations (Debian #698299) (cf: 980725).

20130112
	+ correct prototype in manpage for vid_puts.
	+ drop ncurses/tty/tty_display.h, ncurses/tty/tty_input.h, since they
	  are unused in the current driver model.
	+ modify mvcur to use stdout except when called within the ncurses
	  library.
	+ modify vidattr and vid_attr to use stdout as documented in manpage.
	+ amend changes made to buffering in 20120825 so that the low-level
	  putp() call uses stdout rather than ncurses' internal buffering.
	  The putp_sp() call does the same, for consistency (Redhat #892674).

20130105
	+ add "-s" option to test/view.c to allow it to start in single-step
	  mode, reducing size of trace files when it is used for debugging
	  MinGW changes.
	+ revert part of 20121222 change to tinfo_driver.c
	+ add experimental logic in win_driver.c to improve optimization of
	  screen updates.  This does not yet work with double-width characters,
	  so it is ifdef'd out for the moment (prompted by report by Erwin
	  Waterlander regarding screen flicker).

20121229
	+ fix Coverity warnings regarding copying into fixed-size buffers.
	+ add throw-declarations in the c++ binding per Coverity warning.
	+ minor changes to new-items for consistent reference to bug-report
	  numbers.

20121222
	+ add *.dSYM directories to clean-rule in ncurses directory makefile,
	  for Mac OS builds.
	+ add a configure check for gcc option -no-cpp-precomp, which is not
	  available in all Mac OS X configurations (report by Andras Salamon,
	  cf: 20011208).
	+ improve 20021221 workaround for broken acs, handling a case where
	  that ACS_xxx character is not in the acsc string but there is a known
	  wide-character which can be used.

20121215
	+ fix several warnings from clang 3.1 --analyze, includes correcting
	  a null-pointer check in _nc_mvcur_resume.
	+ correct display of double-width characters with MinGW port (report
	  by Erwin Waterlander).
	+ replace MinGW's wcrtomb(), fixing a problem with _nc_viscbuf
	> fixes based on Coverity report:
	+ correct coloring in test/bs.c
	+ correct check for 8-bit value in _nc_insert_ch().
	+ remove dead code in progs/tset.c, test/linedata.h
	+ add null-pointer checks in lib_tracemse.c, panel.priv.h, and some
	  test-programs.

20121208
	+ modify test/knight.c to show the number of choices possible for
	  each position in automove option, e.g., to allow user to follow
	  Warnsdorff's rule to solve the puzzle.
	+ modify test/hanoi.c to show the minimum number of moves possible for
	  the given number of tiles (prompted by patch by Lucas Gioia).
	> fixes based on Coverity report:
	+ remove a few redundant checks.
	+ correct logic in test/bs.c, when randomly placing a specific type of
	  ship.
	+ check return value from remove/unlink in tic.
	+ check return value from sscanf in test/ncurses.c
	+ fix a null dereference in c++/cursesw.cc
	+ fix two instances of uninitialized variables when configuring for the
	  terminal driver.
	+ correct scope of variable used in SetSafeOutcWrapper macro.
	+ set umask when calling mkstemp in tic.
	+ initialize wbkgrndset() temporary variable when extended-colors are
	  used.

20121201
	+ also replace MinGW's wctomb(), fixing a problem with setcchar().
	+ modify test/view.c to load UTF-8 when built with MinGW by using
	  regular win32 API because the MinGW functions mblen() and mbtowc()
	  do not work.

20121124
	+ correct order of color initialization versus display in some of the
	  test-programs, e.g., test_addstr.c
	> fixes based on Coverity report:
	+ delete windows on exit from some of the test-programs.

20121117
	> fixes based on Coverity report:
	+ add missing braces around FreeAndNull in two places.
	+ various fixes in test/ncurses.c
	+ improve limit-checks in tinfo/make_hash.c, tinfo/read_entry.c
	+ correct malloc size in progs/infocmp.c
	+ guard against negative array indices in test/knight.c
	+ fix off-by-one limit check in test/color_name.h
	+ add null-pointer check in progs/tabs.c, test/bs.c, test/demo_forms.c,
	  test/inchs.c
	+ fix memory-leak in tinfo/lib_setup.c, progs/toe.c,
	  test/clip_printw.c, test/demo_menus.c
	+ delete unused windows in test/chgat.c, test/clip_printw.c,
	  test/insdelln.c, test/newdemo.c on error-return.

20121110
	+ modify configure macro CF_INCLUDE_DIRS to put $CPPFLAGS after the
	  local -I include options in case someone has set conflicting -I
	  options in $CPPFLAGS (prompted by patch for ncurses/Makefile.in by
	  Vassili Courzakis).
	+ modify the ncurses*-config scripts to eliminate relative paths from
	  the RPATH_LIST variable, e.g., "../lib" as used in installing shared
	  libraries or executables.

20121102
	+ realign these related pages:
	    curs_add_wchstr.3x
	    curs_addchstr.3x
	    curs_addstr.3x
	    curs_addwstr.3x
	  and fix a long-ago error in curs_addstr.3x which said that a -1
	  length parameter would only write as much as fit onto one line
	  (report by Reuben Thomas).
	+ remove obsolete fallback _nc_memmove() for memmove()/bcopy().
	+ remove obsolete fallback _nc_strdup() for strdup().
	+ cancel any debug-rpm in package/ncurses.spec
	+ reviewed vte-2012, reverted most of the change since it was incorrect
	  based on testing with tack -TD
	+ un-cancel the initc in vte-256color, since this was implemented
	  starting with version 0.20 in 2009 -TD

20121026
	+ improve malloc/realloc checking (prompted by discussion in Redhat
	  #866989).
	+ add ncurses test-program as "ncurses6" to the rpm- and dpkg-scripts.
	+ updated configure macros CF_GCC_VERSION and CF_WITH_PATHLIST.  The
	  first corrects pattern used for Mac OS X's customization of gcc.

20121017
	+ fix change to _nc_scroll_optimize(), which incorrectly freed memory
	  (Redhat #866989).

20121013
	+ add vte-2012, gnome-2012, making these the defaults for vte/gnome
	  (patch by Christian Persch).

20121006
	+ improve CF_GCC_VERSION to work around Debian's customization of gcc
	  --version message.
	+ improve configure macros as done in byacc:
	  + drop 2.13 compatibility; use 2.52.xxxx version only since EMX port
	    has used that for a while.
	  + add 3rd parameter to AC_DEFINE's to allow autoheader to run, i.e.,
	    for experimental use.
	  + remove unused configure macros.
	+ modify configure script and makefiles to quiet new autoconf warning
	  for LIBS_TO_MAKE variable.
	+ modify configure script to show $PATH_SEPARATOR variable.
	+ update config.guess, config.sub

20120922
	+ modify setupterm to set its copy of TERM to "unknown" if configured
	  for the terminal driver and TERM was null or empty.
	+ modify treatment of TERM variable for MinGW port to allow explicit
	  use of the windows console driver by checking if $TERM is set to
	  "#win32con" or an abbreviation of that.
	+ undo recent change to fallback definition of vsscanf() to build with
	  older Solaris compilers (cf: 20120728).

20120908
	+ add test-screens to test/ncurses to show 256-characters at a time,
	  to help with MinGW port.

20120903
	+ simplify varargs logic in lib_printw.c; va_copy is no longer needed
	  there.
	+ modifications for MinGW port to make wide-character display usable.

20120902
	+ regenerate configure script (report by Sven Joachim, cf: 20120901).

20120901
	+ add a null-pointer check in _nc_flush (cf: 20120825).
	+ fix a case in _nc_scroll_optimize() where the _oldnums_list array
	  might not be allocated.
	+ improve comparisons in configure.in for unset shell variables.

20120826
	+ increase size of ncurses' output-buffer, in case of very small
	  initial screen-sizes.
	+ fix evaluation of TERMINFO and TERMINFO_DIRS default values as needed
	  after changes to use --datarootdir (reports by Gabriele Balducci,
	  Roumen Petrov).

20120825
	+ change output buffering scheme, using buffer maintained by ncurses
	  rather than stdio, to avoid problems with SIGTSTP handling (report
	  by Brian Bloniarz).

20120811
	+ update autoconf patch to 2.52.20120811, adding --datarootdir
	  (prompted by discussion with Erwin Waterlander).
	+ improve description of --enable-reentrant option in README and the
	  INSTALL file.
	+ add nsterm-256color, make this the default nsterm -TD
	+ remove bw from nsterm-bce, per testing with tack -TD

20120804
	+ update test/configure, adding check for tinfo library.
	+ improve limit-checks for the getch fifo (report by Werner Fink).
	+ fix a remaining mismatch between $with_echo and the symbols updated
	  for CF_DISABLE_ECHO affecting parameters for mk-2nd.awk (report by
	  Sven Joachim, cf:  20120317).
	+ modify followup check for pkg-config's library directory in the
	  --enable-pc-files option to validate syntax (report by Sven Joachim,
	  cf: 20110716).

20120728
	+ correct path for ncurses_mingw.h in include/headers, in case build
	  is done outside source-tree (patch by Roumen Petrov).
	+ modify some older xterm entries to align with xterm source -TD
	+ separate "xterm-old" alias from "xterm-r6" -TD
	+ add E3 extended capability to xterm-basic and putty -TD
	+ parenthesize parameters of other macros in curses.h -TD
	+ parenthesize parameter of COLOR_PAIR and PAIR_NUMBER in curses.h
	  in case it happens to be a comma-expression, etc.  (patch by Nick
	  Black).

20120721
	+ improved form_request_by_name() and menu_request_by_name().
	+ eliminate two fixed-size buffers in toe.c
	+ extend use_tioctl() to have expected behavior when use_env(FALSE) and
	  use_tioctl(TRUE) are called.
	+ modify ncurses test-program, adding -E and -T options to demonstrate
	  use_env() versus use_tioctl().

20120714
	+ add use_tioctl() function (adapted from patch by Werner Fink,
	  Novell #769788):

20120707
	+ add ncurses_mingw.h to installed headers (prompted by patch by
	  Juergen Pfeifer).
	+ clarify return-codes from wgetch() in response to SIGWINCH (prompted
	  by Novell #769788).
	+ modify resizeterm() to always push a KEY_RESIZE onto the fifo, even
	  if screensize is unchanged.  Modify _nc_update_screensize() to push a
	  KEY_RESIZE if there was a SIGWINCH, even if it does not call
	  resizeterm().  These changes eliminate the case where a SIGWINCH is
	  received, but ERR returned from wgetch or wgetnstr because the screen
	  dimensions did not change (Novell #769788).

20120630
	+ add --enable-interop to sample package scripts (suggested by Juergen
	  Pfeifer).
	+ update CF_PATH_SYNTAX macro, from mawk changes.
	+ modify mk-0th.awk to allow for generating llib-ltic, etc., though
	  some work is needed on cproto to work with lib_gen.c to update
	  llib-lncurses.
	+ remove redundant getenv() cal in database-iterator leftover from
	  cleanup in 20120622 changes (report by Sven Joachim).

20120622
	+ add -d, -e and -q options to test/demo_terminfo and test/demo_termcap
	+ fix caching of environment variables in database-iterator (patch by
	  Philippe Troin, Redhat #831366).

20120616
	+ add configure check to distinguish clang from gcc to eliminate
	  warnings about unused command-line parameters when compiler warnings
	  are enabled.
	+ improve behavior when updating terminfo entries which are hardlinked
	  by allowing for the possibility that an alias has been repurposed to
	  a new primary name.
	+ fix some strict compiler warnings based on package scripts.
	+ further fixes for configure check for working poll (Debian #676461).

20120608
	+ fix an uninitialized variable in -c/-n logic for infocmp changes
	  (cf: 20120526).
	+ corrected fix for building c++ binding with clang 3.0 (report/patch
	  by Richard Yao, Gentoo #417613, cf: 20110409)
	+ correct configure check for working poll, fixing the case where stdin
	  is redirected, e.g., in rpm/dpkg builds (Debian #676461).
	+ add rpm- and dpkg-scripts, to test those build-environments.
	  The resulting packages are used only for testing.

20120602
	+ add kdch1 aka "Remove" to vt220 and vt220-8 entries -TD
	+ add kdch1, etc., to qvt108 -TD
	+ add dl1/il1 to some entries based on dl/il values -TD
	+ add dl to simpleterm -TD
	+ add consistency-checks in tic for insert-line vs delete-line
	  controls, and insert/delete-char keys
	+ correct no-leaks logic in infocmp when doing comparisons, fixing
	  duplicate free of entries given via the command-line, and freeing
	  entries loaded from the last-but-one of files specified on the
	  command-line.
	+ add kdch1 to wsvt25 entry from NetBSD CVS (reported by David Lord,
	  analysis by Martin Husemann).
	+ add cnorm/civis to wsvt25 entry from NetBSD CVS (report/analysis by
	  Onno van der Linden).

20120526
	+ extend -c and -n options of infocmp to allow comparing more than two
	  entries.
	+ correct check in infocmp for number of terminal names when more than
	  two are given.
	+ correct typo in curs_threads.3x (report by Yanhui Shen on
	  freebsd-hackers mailing list).

20120512
	+ corrected 'op' for bterm (report by Samuel Thibault) -TD
	+ modify test/background.c to demonstrate a background character
	  holding a colored ACS_HLINE.  The behavior differs from SVr4 due to
	  the thick- and double-line extension (cf: 20091003).
	+ modify handling of acs characters in PutAttrChar to avoid mapping an
	  unmapped character to a space with A_ALTCHARSET set.
	+ rewrite vt520 entry based on vt420 -TD

20120505
	+ remove p6 (bold) from opus3n1+ for consistency -TD
	+ remove acs stuff from env230 per clues in Ingres termcap -TD
	+ modify env230 sgr/sgr0 to match other capabilities -TD
	+ modify smacs/rmacs in bq300-8 to match sgr/sgr0 -TD
	+ make sgr for dku7202 agree with other caps -TD
	+ make sgr for ibmpc agree with other caps -TD
	+ make sgr for tek4107 agree with other caps -TD
	+ make sgr for ndr9500 agree with other caps -TD
	+ make sgr for sco-ansi agree with other caps -TD
	+ make sgr for d410 agree with other caps -TD
	+ make sgr for d210 agree with other caps -TD
	+ make sgr for d470c, d470c-7b agree with other caps -TD
	+ remove redundant AC_DEFINE for NDEBUG versus Makefile definition.
	+ fix a back-link in _nc_delink_entry(), which is needed if ncurses is
	  configured with --enable-termcap and --disable-getcap.

20120428
	+ fix some inconsistencies between vt320/vt420, e.g., cnorm/civis -TD
	+ add eslok flag to dec+sl -TD
	+ dec+sl applies to vt320 and up -TD
	+ drop wsl width from xterm+sl -TD
	+ reuse xterm+sl in putty and nsca-m -TD
	+ add ansi+tabs to vt520 -TD
	+ add ansi+enq to vt220-vt520 -TD
	+ fix a compiler warning in example in ncurses-intro.doc (Paul Waring).
	+ added paragraph in keyname manpage telling how extended capabilities
	  are interpreted as key definitions.
	+ modify tic's check of conflicting key definitions to include extended
	  capability strings in addition to the existing check on predefined
	  keys.

20120421
	+ improve cleanup of temporary files in tic using atexit().
	+ add msgr to vt420, similar DEC vtXXX entries -TD
	+ add several missing vt420 capabilities from vt220 -TD
	+ factor out ansi+pp from several entries -TD
	+ change xterm+sl and xterm+sl-twm to include only the status-line
	  capabilities and not "use=xterm", making them more generally useful
	  as building-blocks -TD
	+ add dec+sl building block, as example -TD

20120414
	+ add XT to some terminfo entries to improve usefulness for other
	  applications than screen, which would like to pretend that xterm's
	  title is a status-line.  -TD
	+ change use-clauses in ansi-mtabs, hp2626, and hp2622 based on review
	  of ordering and overrides -TD
	+ add consistency check in tic for screen's "XT" capability.
	+ add section in terminfo.src summarizing the user-defined capabilities
	  used in that file -TD

20120407
	+ fix an inconsistency between tic/infocmp "-x" option; tic omits all
	  non-standard capabilities, while infocmp was ignoring only the user
	  definable capabilities.
	+ improve special case in tic parsing of description to allow it to be
	  followed by terminfo capabilities.  Previously the description had to
	  be the last field on an input line to allow tic to distinguish
	  between termcap and terminfo format while still allowing commas to be
	  embedded in the description.
	+ correct variable name in gen_edit.sh which broke configurability of
	  the --with-xterm-kbs option.
	+ revert 2011-07-16 change to "linux" alias, return to "linux2.2" -TD
	+ further amend 20110910 change, providing for configure-script
	  override of the "linux" terminfo entry to install and changing the
	  default for that to "linux2.2" (Debian #665959).

20120331
	+ update Ada95/configure to use CF_DISABLE_ECHO (cf: 20120317).
	+ correct order of use-clauses in st-256color -TD
	+ modify configure script to look for gnatgcc if the Ada95 binding
	  is built, in preference to the default gcc/cc (suggested by
	  Nicolas Boulenguez).
	+ modify configure script to ensure that the same -On option used for
	  the C compiler in CFLAGS is used for ADAFLAGS rather than simply
	  using "-O3" (suggested by Nicolas Boulenguez)

20120324
	+ amend an old fix so that next_char() exits properly for empty files,
	  e.g., from reading /dev/null (cf: 20080804).
	+ modify tic so that it can read from the standard input, or from
	  a character device.  Because tic uses seek's, this requires writing
	  the data to a temporary file first (prompted by remark by Sven
	  Joachim) (cf: 20000923).

20120317
	+ correct a check made in lib_napms.c, so that terminfo applications
	  can again use napms() (cf: 20110604).
	+ add a note in tic.h regarding required casts for ABSENT_BOOLEAN
	  (cf: 20040327).
	+ correct scripting for --disable-echo option in test/configure.
	+ amend check for missing c++ compiler to work when no error is
	  reported, and no variables set (cf: 20021206).
	+ add/use configure macro CF_DISABLE_ECHO.

20120310
	+ fix some strict compiler warnings for abi6 and 64-bits.
	+ use begin_va_copy/end_va_copy macros in lib_printw.c (cf: 20120303).
	+ improve a limit-check in infocmp.c (Werner Fink):

20120303
	+ minor tidying of terminfo.tail, clarify reason for limitation
	  regarding mapping of \0 to \200
	+ minor improvement to _nc_copy_termtype(), using memcpy to replace
	  loops.
	+ fix no-leaks checking in test/demo_termcap.c to account for multiple
	  calls to setupterm().
	+ modified the libgpm change to show previous load as a problem in the
	  debug-trace.
	> merge some patches from OpenSUSE rpm (Werner Fink):
	+ ncurses-5.7-printw.dif, fixes for varargs handling in lib_printw.c
	+ ncurses-5.7-gpm.dif, do not dlopen libgpm if already loaded by
	  runtime linker
	+ ncurses-5.6-fallback.dif, do not free arrays and strings from static
	  fallback entries

20120228
	+ fix breakage in tic/infocmp from 20120225 (report by Werner Fink).

20120225
	+ modify configure script to allow creating dll's for MinGW when
	  cross-compiling.
	+ add --enable-string-hacks option to control whether strlcat and
	  strlcpy may be used.  The same issue applies to OpenBSD's warnings
	  about snprintf, noting that this function is weakly standardized.
	+ add configure checks for strlcat, strlcpy and snprintf, to help
	  reduce bogus warnings with OpenBSD builds.
	+ build-fix for OpenBSD 4.9 to supply consistent intptr_t declaration
	  (cf:20111231)
	+ update config.guess, config.sub

20120218
	+ correct CF_ETIP_DEFINES configure macro, making it exit properly on
	  the first success (patch by Pierre Labastie).
	+ improve configure macro CF_MKSTEMP by moving existence-check for
	  mkstemp out of the AC_TRY_RUN, to help with cross-compiles.
	+ improve configure macro CF_FUNC_POLL from luit changes to detect
	  broken implementations, e.g., with Mac OS X.
	+ add configure option --with-tparm-arg
	+ build-fix for MinGW cross-compiling, so that make_hash does not
	  depend on TTY definition (cf: 20111008).

20120211
	+ make sgr for xterm-pcolor agree with other caps -TD
	+ make sgr for att5425 agree with other caps -TD
	+ make sgr for att630 agree with other caps -TD
	+ make sgr for linux entries agree with other caps -TD
	+ make sgr for tvi9065 agree with other caps -TD
	+ make sgr for ncr260vt200an agree with other caps -TD
	+ make sgr for ncr160vt100pp agree with other caps -TD
	+ make sgr for ncr260vt300an agree with other caps -TD
	+ make sgr for aaa-60-dec-rv, aaa+dec agree with other caps -TD
	+ make sgr for cygwin, cygwinDBG agree with other caps -TD
	+ add configure option --with-xterm-kbs to simplify configuration for
	  Linux versus most other systems.

20120204
	+ improved tic -D option, avoid making target directory and provide
	  better diagnostics.

20120128
	+ add mach-gnu (Debian #614316, patch by Samuel Thibault)
	+ add mach-gnu-color, tweaks to mach-gnu terminfo -TD
	+ make sgr for sun-color agree with smso -TD
	+ make sgr for prism9 agree with other caps -TD
	+ make sgr for icl6404 agree with other caps -TD
	+ make sgr for ofcons agree with other caps -TD
	+ make sgr for att5410v1, att4415, att620 agree with other caps -TD
	+ make sgr for aaa-unk, aaa-rv agree with other caps -TD
	+ make sgr for avt-ns agree with other caps -TD
	+ amend fix intended to separate fixups for acsc to allow "tic -cv" to
	  give verbose warnings (cf:  20110730).
	+ modify misc/gen-edit.sh to make the location of the tabset directory
	  consistent with misc/Makefile.in, i.e., using ${datadir}/tabset
	  (Debian #653435, patch by Sven Joachim).

20120121
	+ add --with-lib-prefix option to allow configuring for old/new flavors
	  of OS/2 EMX.
	+ modify check for gnat version to allow for year, as used in FreeBSD
	  port.
	+ modify check_existence() in db_iterator.c to simply check if the
	  path is a directory or file, according to the need.  Checking for
	  directory size also gives no usable result with OS/2 (cf: 20120107).
	+ support OS/2 kLIBC (patch by KO Myung-Hun).

20120114
	+ several improvements to test/movewindow.c (prompted by discussion on
	  Linux Mint forum):
	  + modify movement commands to make them continuous
	  + rewrote the test for mvderwin
	  + rewrote the test for recursive mvwin
	+ split-out reusable CF_WITH_NCURSES_ETC macro in test/configure.in
	+ updated configure macro CF_XOPEN_SOURCE, build-fixes for Mac OS X
	  and OpenBSD.
	+ regenerated html manpages.

20120107
	+ various improvements for MinGW (Juergen Pfeifer):
	  + modify stat() calls to ignore the st_size member
	  + drop mk-dlls.sh script.
	  + change recommended regular expression library.
	  + modify rain.c to allow for threaded configuration.
	  + modify tset.c to allow for case when size-change logic is not used.

20111231
	+ modify toe's report when -a and -s options are combined, to add
	  a column showing which entries belong to a given database.
	+ add -s option to toe, to sort its output.
	+ modify progs/toe.c, simplifying use of db-iterator results to use
	  caching improvements from 20111001 and 20111126.
	+ correct generation of pc-files when ticlib or termlib options are
	  given to rename the corresponding tic- or tinfo-libraries (report
	  by Sven Joachim).

20111224
	+ document a portability issue with tput, i.e., that scripts which work
	  with ncurses may fail in other implementations that do no parameter
	  analysis.
	+ add putty-sco entry -TD

20111217
	+ review/fix places in manpages where --program-prefix configure option
	  was not being used.
	+ add -D option to infocmp, to show the database locations that it
	  could use.
	+ fix build for the special case where term-driver, ticlib and termlib
	  are all enabled.  The terminal driver depends on a few features in
	  the base ncurses library, so tic's dependencies include both ncurses
	  and termlib.
	+ fix build work for term-driver when --enable-wgetch-events option is
	  enabled.
	+ use <stdint.h> types to fix some questionable casts to void*.

20111210
	+ modify configure script to check if thread library provides
	  pthread_mutexattr_settype(), e.g., not provided by Solaris 2.6
	+ modify configure script to suppress check to define _XOPEN_SOURCE
	  for IRIX64, since its header files have a conflict versus
	  _SGI_SOURCE.
	+ modify configure script to add ".pc" files for tic- and
	  tinfo-libraries, which were omitted in recent change (cf: 20111126).
	+ fix inconsistent checks on $PKG_CONFIG variable in configure script.

20111203
	+ modify configure-check for etip.h dependencies, supplying a temporary
	  copy of ncurses_dll.h since it is a generated file (prompted by
	  Debian #646977).
	+ modify CF_CPP_PARAM_INIT "main" function to work with current C++.

20111126
	+ correct database iterator's check for duplicate entries
	  (cf: 20111001).
	+ modify database iterator to ignore $TERMCAP when it is not an
	  absolute pathname.
	+ add -D option to tic, to show the database locations that it could
	  use.
	+ improve description of database locations in tic manpage.
	+ modify the configure script to generate a list of the ".pc" files to
	  generate, rather than deriving the list from the libraries which have
	  been built (patch by Mike Frysinger).
	+ use AC_CHECK_TOOLS in preference to AC_PATH_PROGS when searching for
	  ncurses*-config, e.g., in Ada95/configure and test/configure (adapted
	  from patch by Mike Frysinger).

20111119
	+ remove obsolete/conflicting fallback definition for _POSIX_SOURCE
	  from curses.priv.h, fixing a regression with IRIX64 and Tru64
	  (cf: 20110416)
	+ modify _nc_tic_dir() to ensure that its return-value is nonnull,
	  i.e., the database iterator was not initialized.  This case is needed
	  to when tic is translating to termcap, rather than loading the
	  database (cf:  20111001).

20111112
	+ add pccon entries for OpenBSD console (Alexei Malinin).
	+ build-fix for OpenBSD 4.9 with gcc 4.2.1, setting _XOPEN_SOURCE to
	  600 to work around inconsistent ifdef'ing of wcstof between C and
	  C++ header files.
	+ modify capconvert script to accept more than exact match on "xterm",
	  e.g., the "xterm-*" variants, to exclude from the conversion (patch
	  by Robert Millan).
	+ add -lc_r as alternative for -lpthread, allows build of threaded code
	  in older FreeBSD machines.
	+ build-fix for MirBSD, which fails when either _XOPEN_SOURCE or
	  _POSIX_SOURCE are defined.
	+ fix a typo misc/Makefile.in, used in uninstalling pc-files.

20111030
	+ modify make_db_path() to allow creating "terminfo.db" in the same
	  directory as an existing "terminfo" directory.  This fixes a case
	  where switching between hashed/filesystem databases would cause the
	  new hashed database to be installed in the next best location -
	  root's home directory.
	+ add variable cf_cv_prog_gnat_correct to those passed to
	  config.status, fixing a problem with Ada95 builds (cf: 20111022).
	+ change feature test from _XPG5 to _XOPEN_SOURCE in two places, to
	  accommodate broken implementations for _XPG6.
	+ eliminate usage of NULL symbol from etip.h, to reduce header
	  interdependencies.
	+ add configure check to decide when to add _XOPEN_SOURCE define to
	  compiler options, i.e., for Solaris 10 and later (cf: 20100403).
	  This is a workaround for gcc 4.6, which fails to build the c++
	  binding if that symbol is defined by the application, due to
	  incorrectly combining the corresponding feature test macros
	  (report by Peter Kruse).

20111022
	+ correct logic for discarding mouse events, retaining the partial
	  events used to build up click, double-click, etc, until needed
	  (cf: 20110917).
	+ fix configure script to avoid creating unused Ada95 makefile when
	  gnat does not work.
	+ cleanup width-related gcc 3.4.3 warnings for 64-bit platform, for the
	  internal functions of libncurses.  The external interface of courses
	  uses bool, which still produces these warnings.

20111015
	+ improve description of --disable-tic-depends option to make it
	  clear that it may be useful whether or not the --with-termlib
	  option is also given (report by Sven Joachim).
	+ amend termcap equivalent for set_pglen_inch to use the X/Open
	  "YI" rather than the obsolete Solaris 2.5 "sL" (cf: 990109).
	+ improve manpage for tgetent differences from termcap library.

20111008
	+ moved static data from db_iterator.c to lib_data.c
	+ modify db_iterator.c for memory-leak checking, fix one leak.
	+ modify misc/gen-pkgconfig.in to use Requires.private for the parts
	  of ncurses rather than Requires, as well as Libs.private for the
	  other library dependencies (prompted by Debian #644728).

20111001
	+ modify tic "-K" option to only set the strict-flag rather than force
	  source-output.  That allows the same flag to control the parser for
	  input and output of termcap source.
	+ modify _nc_getent() to ignore backslash at the end of a comment line,
	  making it consistent with ncurses' parser.
	+ restore a special-case check for directory needed to make termcap
	  text files load as if they were databases (cf: 20110924).
	+ modify tic's resolution/collision checking to attempt to remove the
	  conflicting alias from the second entry in the pair, which is
	  normally following in the source file.  Also improved the warning
	  message to make it simpler to see which alias is the problem.
	+ improve performance of the database iterator by caching search-list.

20110925
	+ add a missing "else" in changes to _nc_read_tic_entry().

20110924
	+ modify _nc_read_tic_entry() so that hashed-database is checked before
	  filesystem.
	+ updated CF_CURSES_LIBS check in test/configure script.
	+ modify configure script and makefiles to split TIC_ARGS and
	  TINFO_ARGS into pieces corresponding to LDFLAGS and LIBS variables,
	  to help separate searches for tic- and tinfo-libraries (patch by Nick
	  Alcock aka "Nix").
	+ build-fix for lib_mouse.c changes (cf: 20110917).

20110917
	+ fix compiler warning for clang 2.9
	+ improve merging of mouse events (integrated patch by Damien
	  Guibouret).
	+ correct mask-check used in lib_mouse for wheel mouse buttons 4/5
	  (patch by Damien Guibouret).

20110910
	+ modify misc/gen_edit.sh to select a "linux" entry which works with
	  the current kernel rather than assuming it is always "linux3.0"
	  (cf: 20110716).
	+ revert a change to getmouse() which had the undesirable side-effect
	  of suppressing button-release events (report by Damien Guibouret,
	  cf: 20100102).
	+ add xterm+kbs fragment from xterm #272 -TD
	+ add configure option --with-pkg-config-libdir to provide control over
	  the actual directory into which pc-files are installed, do not use
	  the pkg-config environment variables (discussion with Frederic L W
	  Meunier).
	+ add link to mailing-list archive in announce.html.in, as done in
	  FAQ (prompted by question by Andrius Bentkus).
	+ improve manpage install by adjusting the "#include" examples to
	  show the ncurses-subdirectory used when --disable-overwrite option
	  is used.
	+ install an alias for "curses" to the ncurses manpage, tied to the
	  --with-curses-h configure option (suggested by Reuben Thomas).

20110903
	+ propagate error-returns from wresize, i.e., the internal
	  increase_size and decrease_size functions through resize_term (report
	  by Tim van der Molen, cf:  20020713).
	+ fix typo in tset manpage (patch by Sven Joachim).

20110820
	+ add a check to ensure that termcap files which might have "^?" do
	  not use the terminfo interpretation as "\177".
	+ minor cleanup of X-terminal emulator section of terminfo.src -TD
	+ add terminator entry -TD
	+ add simpleterm entry -TD
	+ improve wattr_get macros by ensuring that if the window pointer is
	  null, then the attribute and color values returned will be zero
	  (cf: 20110528).

20110813
	+ add substitution for $RPATH_LIST to misc/ncurses-config.in
	+ improve performance of tic with hashed-database by caching the
	  database connection, using atexit() to cleanup.
	+ modify treatment of 2-character aliases at the beginning of termcap
	  entries so they are not counted in use-resolution, since these are
	  guaranteed to be unique.  Also ignore these aliases when reporting
	  the primary name of the entry (cf: 20040501)
	+ double-check gn (generic) flag in terminal descriptions to
	  accommodate old/buggy termcap databases which misused that feature.
	+ minor fixes to _nc_tgetent(), ensure buffer is initialized even on
	  error-return.

20110807
	+ improve rpath fix from 20110730 by ensuring that the new $RPATH_LIST
	  variable is defined in the makefiles which use it.
	+ build-fix for DragonFlyBSD's pkgsrc in test/configure script.
	+ build-fixes for NetBSD 5.1 with termcap support enabled.
	+ corrected k9 in dg460-ansi, add other features based on manuals -TD
	+ improve trimming of whitespace at the end of terminfo/termcap output
	  from tic/infocmp.
	+ when writing termcap source, ensure that colons in the description
	  field are translated to a non-delimiter, i.e., "=".
	+ add "-0" option to tic/infocmp, to make the termcap/terminfo source
	  use a single line.
	+ add a null-pointer check when handling the $CC variable.

20110730
	+ modify configure script and makefiles in c++ and progs to allow the
	  directory used for rpath option to be overridden, e.g., to work
	  around updates to the variables used by tic during an install.
	+ add -K option to tic/infocmp, to provide stricter BSD-compatibility
	  for termcap output.
	+ add _nc_strict_bsd variable in tic library which controls the
	  "strict" BSD termcap compatibility from 20110723, plus these
	  features:
	  + allow escapes such as "\8" and "\9" when reading termcap
	  + disallow "\a", "\e", "\l", "\s" and "\:" escapes when reading
	    termcap files, passing through "a", "e", etc.
	  + expand "\:" as "\072" on output.
	+ modify _nc_get_token() to reset the token's string value in case
	  there is a string-typed token lacking the "=" marker.
	+ fix a few memory leaks in _nc_tgetent.
	+ fix a few places where reading from a termcap file could refer to
	  freed memory.
	+ add an overflow check when converting terminfo/termcap numeric
	  values, since terminfo stores those in a short, and they must be
	  positive.
	+ correct internal variables used for translating to termcap "%>"
	  feature, and translating from termcap %B to terminfo, needed by
	  tctest (cf: 19991211).
	+ amend a minor fix to acsc when loading a termcap file to separate it
	  from warnings needed for tic (cf: 20040710)
	+ modify logic in _nc_read_entry() and _nc_read_tic_entry() to allow
	  a termcap file to be handled via TERMINFO_DIRS.
	+ modify _nc_infotocap() to include non-mandatory padding when
	  translating to termcap.
	+ modify _nc_read_termcap_entry(), passing a flag in the case where
	  getcap is used, to reduce interactive warning messages.

20110723
	+ add a check in start_color() to limit color-pairs to 256 when
	  extended colors are not supported (patch by David Benjamin).
	+ modify setcchar to omit no-longer-needed OR'ing of color pair in
	  the SetAttr() macro (patch by David Benjamin).
	+ add kich1 to sun terminfo entry (Yuri Pankov)
	+ use bold rather than reverse for smso in sun-color terminfo entry
	  (Yuri Pankov).
	+ improve generation of termcap using tic/infocmp -C option, e.g.,
	  to correspond with 4.2BSD (prompted by discussion with Yuri Pankov
	  regarding Schilling's test program):
	  + translate %02 and %03 to %2 and %3 respectively.
	  + suppress string capabilities which use %s, not supported by tgoto
	  + use \040 rather than \s
	  + expand null characters as \200 rather than \0
	+ modify configure script to support shared libraries for DragonFlyBSD.

20110716
	+ replace an assert() in _nc_Free_Argument() with a regular null
	  pointer check (report/analysis by Franjo Ivancic).
	+ modify configure --enable-pc-files option to take into account the
	  PKG_CONFIG_PATH variable (report by Frederic L W Meunier).
	+ add/use xterm+tmux chunk from xterm #271 -TD
	+ resync xterm-new entry from xterm #271 -TD
	+ add E3 extended capability to linux-basic (Miroslav Lichvar)
	+ add linux2.2, linux2.6, linux3.0 entries to give context for E3 -TD
	+ add SI/SO change to linux2.6 entry (Debian #515609) -TD
	+ fix inconsistent tabset path in pcmw (Todd C. Miller).
	+ remove a backslash which continued comment, obscuring altos3
	  definition with OpenBSD toolset (Nicholas Marriott).

20110702
	+ add workaround from xterm #271 changes to ensure that compiler flags
	  are not used in the $CC variable.
	+ improve support for shared libraries, tested with AIX 5.3, 6.1 and
	  7.1 with both gcc 4.2.4 and cc.
	+ modify configure checks for AIX to include release 7.x
	+ add loader flags/libraries to libtool options so that dynamic loading
	  works properly, adapted from ncurses-5.7-ldflags-with-libtool.patch
	  at gentoo prefix repository (patch by Michael Haubenwallner).

20110626
	+ move include of nc_termios.h out of term_entry.h, since the latter
	  is installed, e.g., for tack while the former is not (report by
	  Sven Joachim).

20110625
	+ improve cleanup() function in lib_tstp.c, using _exit() rather than
	  exit() and checking for SIGTERM rather than SIGQUIT (prompted by
	  comments forwarded by Nicholas Marriott).
	+ reduce name pollution from term.h, moving fallback #define's for
	  tcgetattr(), etc., to new private header nc_termios.h (report by
	  Sergio NNX).
	+ two minor fixes for tracing (patch by Vassili Courzakis).
	+ improve trace initialization by starting it in use_env() and
	  ripoffline().
	+ review old email, add details for some changelog entries.

20110611
	+ update minix entry to minix 3.2 (Thomas Cort).
	+ fix a strict compiler warning in change to wattr_get (cf: 20110528).

20110604
	+ fixes for MirBSD port:
	  + set default prefix to /usr.
	  + add support for shared libraries in configure script.
	  + use S_ISREG and S_ISDIR consistently, with fallback definitions.
	+ add a few more checks based on ncurses/link_test.
	+ modify MKlib_gen.sh to handle sp-funcs renaming of NCURSES_OUTC type.

20110528
	+ add case to CF_SHARED_OPTS for Interix (patch by Markus Duft).
	+ used ncurses/link_test to check for behavior when the terminal has
	  not been initialized and when an application passes null pointers
	  to the library.  Added checks to cover this (prompted by Redhat
	  #707344).
	+ modify MKlib_gen.sh to make its main() function call each function
	  with zero parameters, to help find inconsistent checking for null
	  pointers, etc.

20110521
	+ fix warnings from clang 2.7 "--analyze"

20110514
	+ compiler-warning fixes in panel and progs.
	+ modify CF_PKG_CONFIG macro, from changes to tin -TD
	+ modify CF_CURSES_FUNCS configure macro, used in test directory
	  configure script:
	  + work around (non-optimizer) bug in gcc 4.2.1 which caused
	    test-expression to be omitted from executable.
	  + force the linker to see a link-time expression of a symbol, to
	    help work around weak-symbol issues.

20110507
	+ update discussion of MKfallback.sh script in INSTALL; normally the
	  script is used automatically via the configured makefiles.  However
	  there are still occasions when it might be used directly by packagers
	  (report by Gunter Schaffler).
	+ modify misc/ncurses-config.in to omit the "-L" option from the
	  "--libs" output if the library directory is /usr/lib.
	+ change order of tests for curses.h versus ncurses.h headers in the
	  configure scripts for Ada95 and test-directories, to look for
	  ncurses.h, from fixes to tin -TD
	+ modify ncurses/tinfo/access.c to account for Tandem's root uid
	  (report by Joachim Schmitz).

20110430
	+ modify rules in Ada95/src/Makefile.in to ensure that the PIC option
	  is not used when building a static library (report by Nicolas
	  Boulenguez):
	+ Ada95 build-fix for big-endian architectures such as sparc.  This
	  undoes one of the fixes from 20110319, which added an "Unused" member
	  to representation clauses, replacing that with pragmas to suppress
	  warnings about unused bits (patch by Nicolas Boulenguez).

20110423
	+ add check in test/configure for use_window, use_screen.
	+ add configure-checks for getopt's variables, which may be declared
	  as different types on some Unix systems.
	+ add check in test/configure for some legacy curses types of the
	  function pointer passed to tputs().
	+ modify init_pair() to accept -1's for color value after
	  assume_default_colors() has been called (Debian #337095).
	+ modify test/background.c, adding command-line options to demonstrate
	  assume_default_colors() and use_default_colors().

20110416
	+ modify configure script/source-code to only define _POSIX_SOURCE if
	  the checks for sigaction and/or termios fail, and if _POSIX_C_SOURCE
	  and _XOPEN_SOURCE are undefined (report by Valentin Ochs).
	+ update config.guess, config.sub

20110409
	+ fixes to build c++ binding with clang 3.0 (patch by Alexander
	  Kolesen).
	+ add check for unctrl.h in test/configure, to work around breakage in
	  some ncurses packages.
	+ add "--disable-widec" option to test/configure script.
	+ add "--with-curses-colr" and "--with-curses-5lib" options to the
	  test/configure script to address testing with very old machines.

20110404 5.9 release for upload to ftp.gnu.org

20110402
	+ various build-fixes for the rpm/dpkg scripts.
	+ add "--enable-rpath-link" option to Ada95/configure, to allow
	  packages to suppress the rpath feature which is normally used for
	  the in-tree build of sample programs.
	+ corrected definition of libdir variable in Ada95/src/Makefile.in,
	  needed for rpm script.
	+ add "--with-shared" option to Ada95/configure script, to allow
	  making the C-language parts of the binding use appropriate compiler
	  options if building a shared library with gnat.

20110329
	> portability fixes for Ada95 binding:
	+ add configure check to ensure that SIGINT works with gnat.  This is
	  needed for the "rain" sample program.  If SIGINT does not work, omit
	  that sample program.
	+ correct typo in check of $PKG_CONFIG variable in Ada95/configure
	+ add ncurses_compat.c, to supply functions used in the Ada95 binding
	  which were added in 5.7 and later.
	+ modify sed expression in CF_NCURSES_ADDON to eliminate a dependency
	  upon GNU sed.

20110326
	+ add special check in Ada95/configure script for ncurses6 reentrant
	  code.
	+ regen Ada html documentation.
	+ build-fix for Ada shared libraries versus the varargs workaround.
	+ add rpm and dpkg scripts for Ada95 and test directories, for test
	  builds.
	+ update test/configure macros CF_CURSES_LIBS, CF_XOPEN_SOURCE and
	  CF_X_ATHENA_LIBS.
	+ add configure check to determine if gnat's project feature supports
	  libraries, i.e., collections of .ali files.
	+ make all dereferences in Ada95 samples explicit.
	+ fix typo in comment in lib_add_wch.c (patch by Petr Pavlu).
	+ add configure check for, ifdef's for math.h which is in a separate
	  package on Solaris and potentially not installed (report by Petr
	  Pavlu).
	> fixes for Ada95 binding (Nicolas Boulenguez):
	+ improve type-checking in Ada95 by eliminating a few warning-suppress
	  pragmas.
	+ suppress unreferenced warnings.
	+ make all dereferences in binding explicit.

20110319
	+ regen Ada html documentation.
	+ change order of -I options from ncurses*-config script when the
	  --disable-overwrite option was used, so that the subdirectory include
	  is listed first.
	+ modify the make-tar.sh scripts to add a MANIFEST and NEWS file.
	+ modify configure script to provide value for HTML_DIR in
	  Ada95/gen/Makefile.in, which depends on whether the Ada95 binding is
	  distributed separately (report by Nicolas Boulenguez).
	+ modify configure script to add "-g" and/or "-O3" to ADAFLAGS if the
	  CFLAGS for the build has these options.
	+ amend change from 20070324, to not add 1 to the result of getmaxx
	  and getmaxy in the Ada binding (report by Nicolas Boulenguez for
	  thread in comp.lang.ada).
	+ build-fix Ada95/samples for gnat 4.5
	+ spelling fixes for Ada95/samples/explain.txt
	> fixes for Ada95 binding (Nicolas Boulenguez):
	+ add item in Trace_Attribute_Set corresponding to TRACE_ATTRS.
	+ add workaround for binding to set_field_type(), which uses varargs.
	  The original binding from 990220 relied on the prevalent
	  implementation of varargs which did not support or need va_copy().
	+ add dependency on gen/Makefile.in needed for *-panels.ads
	+ add Library_Options to library.gpr
	+ add Languages to library.gpr, for gprbuild

20110307
	+ revert changes to limit-checks from 20110122 (Debian #616711).
	> minor type-cleanup of Ada95 binding (Nicolas Boulenguez):
	+ corrected a minor sign error in a field of Low_Level_Field_Type, to
	  conform to form.h.
	+ replaced C_Int by Curses_Bool as return type for some callbacks, see
	  fieldtype(3FORM).
	+ modify samples/sample-explain.adb to provide explicit message when
	  explain.txt is not found.

20110305
	+ improve makefiles for Ada95 tree (patch by Nicolas Boulenguez).
	+ fix an off-by-one error in _nc_slk_initialize() from 20100605 fixes
	  for compiler warnings (report by Nicolas Boulenguez).
	+ modify Ada95/gen/gen.c to declare unused bits in generated layouts,
	  needed to compile when chtype is 64-bits using gnat 4.4.5

20110226 5.8 release for upload to ftp.gnu.org

20110226
	+ update release notes, for 5.8.
	+ regenerated html manpages.
	+ change open() in _nc_read_file_entry() to fopen() for consistency
	  with write_file().
	+ modify misc/run_tic.in to create parent directory, in case this is
	  a new install of hashed database.
	+ fix typo in Ada95/mk-1st.awk which causes error with original awk.

20110220
	+ configure script rpath fixes from xterm #269.
	+ workaround for cygwin's non-functional features.h, to force ncurses'
	  configure script to define _XOPEN_SOURCE_EXTENDED when building
	  wide-character configuration.
	+ build-fix in run_tic.sh for OS/2 EMX install
	+ add cons25-debian entry (patch by Brian M Carlson, Debian #607662).

20110212
	+ regenerated html manpages.
	+ use _tracef() in show_where() function of tic, to work correctly with
	  special case of trace configuration.

20110205
	+ add xterm-utf8 entry as a demo of the U8 feature -TD
	+ add U8 feature to denote entries for terminal emulators which do not
	  support VT100 SI/SO when processing UTF-8 encoding -TD
	+ improve the NCURSES_NO_UTF8_ACS feature by adding a check for an
	  extended terminfo capability U8 (prompted by mailing list
	  discussion).

20110122
	+ start documenting interface changes for upcoming 5.8 release.
	+ correct limit-checks in derwin().
	+ correct limit-checks in newwin(), to ensure that windows have nonzero
	  size (report by Garrett Cooper).
	+ fix a missing "weak" declaration for pthread_kill (patch by Nicholas
	  Alcock).
	+ improve documentation of KEY_ENTER in curs_getch.3x manpage (prompted
	  by discussion with Kevin Martin).

20110115
	+ modify Ada95/configure script to make the --with-curses-dir option
	  work without requiring the --with-ncurses option.
	+ modify test programs to allow them to be built with NetBSD curses.
	+ document thick- and double-line symbols in curs_add_wch.3x manpage.
	+ document WACS_xxx constants in curs_add_wch.3x manpage.
	+ fix some warnings for clang 2.6 "--analyze"
	+ modify Ada95 makefiles to make html-documentation with the project
	  file configuration if that is used.
	+ update config.guess, config.sub

20110108
	+ regenerated html manpages.
	+ minor fixes to enable lint when trace is not enabled, e.g., with
	  clang --analyze.
	+ fix typo in man/default_colors.3x (patch by Tim van der Molen).
	+ update ncurses/llib-lncurses*

20110101
	+ fix remaining strict compiler warnings in ncurses library ABI=5,
	  except those dealing with function pointers, etc.

20101225
	+ modify nc_tparm.h, adding guards against repeated inclusion, and
	  allowing TPARM_ARG to be overridden.
	+ fix some strict compiler warnings in ncurses library.

20101211
	+ suppress ncv in screen entry, allowing underline (patch by Alejandro
	  R Sedeno).
	+ also suppress ncv in konsole-base -TD
	+ fixes in wins_nwstr() and related functions to ensure that special
	  characters, i.e., control characters are handled properly with the
	  wide-character configuration.
	+ correct a comparison in wins_nwstr() (Redhat #661506).
	+ correct help-messages in some of the test-programs, which still
	  referred to quitting with 'q'.

20101204
	+ add special case to _nc_infotocap() to recognize the setaf/setab
	  strings from xterm+256color and xterm+88color, and provide a reduced
	  version which works with termcap.
	+ remove obsolete emacs "Local Variables" section from documentation
	  (request by Sven Joachim).
	+ update doc/html/index.html to include NCURSES-Programming-HOWTO.html
	  (report by Sven Joachim).

20101128
	+ modify test/configure and test/Makefile.in to handle this special
	  case of building within a build-tree (Debian #34182):
		mkdir -p build && cd build && ../test/configure && make

20101127
	+ miscellaneous build-fixes for Ada95 and test-directories when built
	  out-of-tree.
	+ use VPATH in makefiles to simplify out-of-tree builds (Debian #34182).
	+ fix typo in rmso for tek4106 entry -Goran Weinholt

20101120
	+ improve checks in test/configure for X libraries, from xterm #267
	  changes.
	+ modify test/configure to allow it to use the build-tree's libraries
	  e.g., when using that to configure the test-programs without the
	  rpath feature (request by Sven Joachim).
	+ repurpose "gnome" terminfo entries as "vte", retaining "gnome" items
	  for compatibility, but generally deprecating those since the VTE
	  library is what actually defines the behavior of "gnome", etc.,
	  since 2003 -TD

20101113
	+ compiler warning fixes for test programs.
	+ various build-fixes for test-programs with pdcurses.
	+ updated configure checks for X packages in test/configure from xterm
	  #267 changes.
	+ add configure check to gnatmake, to accommodate cygwin.

20101106
	+ correct list of sub-directories needed in Ada95 tree for building as
	  a separate package.
	+ modify scripts in test-directory to improve builds as a separate
	  package.

20101023
	+ correct parsing of relative tab-stops in tabs program (report by
	  Philip Ganchev).
	+ adjust configure script so that "t" is not added to library suffix
	  when weak-symbols are used, allowing the pthread configuration to
	  more closely match the non-thread naming (report by Werner Fink).
	+ modify configure check for tic program, used for fallbacks, to a
	  warning if not found.  This makes it simpler to use additional
	  scripts to bootstrap the fallbacks code using tic from the build
	  tree (report by Werner Fink).
	+ fix several places in configure script using ${variable-value} form.
	+ modify configure macro CF_LDFLAGS_STATIC to accommodate some loaders
	  which do not support selectively linking against static libraries
	  (report by John P. Hartmann)
	+ fix an unescaped dash in man/tset.1 (report by Sven Joachim).

20101009
	+ correct comparison used for setting 16-colors in linux-16color
	  entry (Novell #644831) -TD
	+ improve linux-16color entry, using "dim" for color-8 which makes it
	  gray rather than black like color-0 -TD
	+ drop misc/ncu-indent and misc/jpf-indent; they are provided by an
	  external package "cindent".

20101002
	+ improve linkages in html manpages, adding references to the newer
	  pages, e.g., *_variables, curs_sp_funcs, curs_threads.
	+ add checks in tic for inconsistent cursor-movement controls, and for
	  inconsistent printer-controls.
	+ fill in no-parameter forms of cursor-movement where a parameterized
	  form is available -TD
	+ fill in missing cursor controls where the form of the controls is
	  ANSI -TD
	+ fix inconsistent punctuation in form_variables manpage (patch by
	  Sven Joachim).
	+ add parameterized cursor-controls to linux-basic (report by Dae) -TD
	> patch by Juergen Pfeifer:
	+ document how to build 32-bit libraries in README.MinGW
	+ fixes to filename computation in mk-dlls.sh.in
	+ use POSIX locale in mk-dlls.sh.in rather than en_US (report by Sven
	  Joachim).
	+ add a check in mk-dlls.sh.in to obtain the size of a pointer to
	  distinguish between 32-bit and 64-bit hosts.  The result is stored
	  in mingw_arch

20100925
	+ add "XT" capability to entries for terminals that support both
	  xterm-style mouse- and title-controls, for "screen" which
	  special-cases TERM beginning with "xterm" or "rxvt" -TD
	> patch by Juergen Pfeifer:
	+ use 64-Bit MinGW toolchain (recommended package from TDM, see
	  README.MinGW).
	+ support pthreads when using the TDM MinGW toolchain

20100918
	+ regenerated html manpages.
	+ minor fixes for symlinks to curs_legacy.3x and curs_slk.3x manpages.
	+ add manpage for sp-funcs.
	+ add sp-funcs to test/listused.sh, for documentation aids.

20100911
	+ add manpages for summarizing public variables of curses-, terminfo-
	  and form-libraries.
	+ minor fixes to manpages for consistency (patch by Jason McIntyre).
	+ modify tic's -I/-C dump to reformat acsc strings into canonical form
	  (sorted, unique mapping) (cf: 971004).
	+ add configure check for pthread_kill(), needed for some old
	  platforms.

20100904
	+ add configure option --without-tests, to suppress building test
	  programs (request by Frederic L W Meunier).

20100828
	+ modify nsterm, xnuppc and tek4115 to make sgr/sgr0 consistent -TD
	+ add check in terminfo source-reader to provide more informative
	  message when someone attempts to run tic on a compiled terminal
	  description (prompted by Debian #593920).
	+ note in infotocap and captoinfo manpages that they read terminal
	  descriptions from text-files (Debian #593920).
	+ improve acsc string for vt52, show arrow keys (patch by Benjamin
	  Sittler).

20100814
	+ document in manpages that "mv" functions first use wmove() to check
	  the window pointer and whether the position lies within the window
	  (suggested by Poul-Henning Kamp).
	+ fixes to curs_color.3x, curs_kernel.3x and wresize.3x manpages (patch
	  by Tim van der Molen).
	+ modify configure script to transform library names for tic- and
	  tinfo-libraries so that those build properly with Mac OS X shared
	  library configuration.
	+ modify configure script to ensure that it removes conftest.dSYM
	  directory leftover on checks with Mac OS X.
	+ modify configure script to cleanup after check for symbolic links.

20100807
	+ correct a typo in mk-1st.awk (patch by Gabriele Balducci)
	  (cf: 20100724)
	+ improve configure checks for location of tic and infocmp programs
	  used for installing database and for generating fallback data,
	  e.g., for cross-compiling.
	+ add Markus Kuhn's wcwidth function for compiling MinGW
	+ add special case to CF_REGEX for cross-compiling to MinGW target.

20100731
	+ modify initialization check for win32con driver to eliminate need for
	  special case for TERM "unknown", using terminal database if available
	  (prompted by discussion with Roumen Petrov).
	+ for MinGW port, ensure that terminal driver is setup if tgetent()
	  is called (patch by Roumen Petrov).
	+ document tabs "-0" and "-8" options in manpage.
	+ fix Debian "lintian" issues with manpages reported in
	  http://lintian.debian.org/full/csmall@debian.org.html#ncurses

20100724
	+ add a check in tic for missing set_tab if clear_all_tabs given.
	+ improve use of symbolic links in makefiles by using "-f" option if
	  it is supported, to eliminate temporary removal of the target
	  (prompted by http://www.t2-project.org/packages/ncurses.html)
	+ minor improvement to test/ncurses.c, reset color pairs in 'd' test
	  after exit from 'm' main-menu command.
	+ improved ncu-indent, from mawk changes, allows more than one of
	  GCC_NORETURN, GCC_PRINTFLIKE and GCC_SCANFLIKE on a single line.

20100717
	+ add hard-reset for rs2 to wsvt25 to help ensure that reset ends
	  the alternate character set (patch by Nicholas Marriott)
	+ remove tar-copy.sh and related configure/Makefile chunks, since the
	  Ada95 binding is now installed using rules in Ada95/src.

20100703
	+ continue integrating changes to use gnatmake project files in Ada95
	  + add/use configure check to turn on project rules for Ada95/src.
	+ revert the vfork change from 20100130, since it does not work.

20100626
	+ continue integrating changes to use gnatmake project files in Ada95
	  + old gnatmake (3.15) does not produce libraries using project-file;
	    work around by adding script to generate alternate makefile.

20100619
	+ continue integrating changes to use gnatmake project files in Ada95
	  + add configure --with-ada-sharedlib option, for the test_make rule.
	  + move Ada95-related logic into aclocal.m4, since additional checks
	    will be needed to distinguish old/new implementations of gnat.

20100612
	+ start integrating changes to use gnatmake project files in Ada95 tree
	  + add test_make / test_clean / test_install rules in Ada95/src
	  + change install-path for adainclude directory to /usr/share/ada (was
	    /usr/lib/ada).
	+ update Ada95/configure.
	+ add mlterm+256color entry, for mlterm 3.0.0 -TD
	+ modify test/configure to use macros to ensure consistent order
	  of updating LIBS variable.

20100605
	+ change search order of options for Solaris in CF_SHARED_OPTS, to
	  work with 64-bit compiles.
	+ correct quoting of assignment in CF_SHARED_OPTS case for aix
	  (cf: 20081227)

20100529
	+ regenerated html documentation.
	+ modify test/configure to support pkg-config for checking X libraries
	  used by PDCurses.
	+ add/use configure macro CF_ADD_LIB to force consistency of
	  assignments to $LIBS, etc.
	+ fix configure script for combining --with-pthread
	  and --enable-weak-symbols options.

20100522
	+ correct cross-compiling configure check for CF_MKSTEMP macro, by
	  adding a check cache variable set by AC_CHECK_FUNC (report by
	  Pierre Labastie).
	+ simplify include-dependencies of make_hash and make_keys, to reduce
	  the need for setting BUILD_CPPFLAGS in cross-compiling when the
	  build- and target-machines differ.
	+ repair broken-linker configuration by restoring a definition of SP
	  variable to curses.priv.h, and adjusting for cases where sp-funcs
	  are used.
	+ improve configure macro CF_AR_FLAGS, allowing ARFLAGS environment
	  variable to override (prompted by report by Pablo Cazallas).

20100515
	+ add configure option --enable-pthreads-eintr to control whether the
	  new EINTR feature is enabled.
	+ modify logic in pthread configuration to allow EINTR to interrupt
	  a read operation in wgetch() (Novell #540571, patch by Werner Fink).
	+ drop mkdirs.sh, use "mkdir -p".
	+ add configure option --disable-libtool-version, to use the
	  "-version-number" feature which was added in libtool 1.5 (report by
	  Peter Haering).  The default value for the option uses the newer
	  feature, which makes libraries generated using libtool compatible
	  with the standard builds of ncurses.
	+ updated test/configure to match configure script macros.
	+ fixes for configure script from lynx changes:
	  + improve CF_FIND_LINKAGE logic for the case where a function is
	    found in predefined libraries.
	  + revert part of change to CF_HEADER (cf: 20100424)

20100501
	+ correct limit-check in wredrawln, accounting for begy/begx values
	  (patch by David Benjamin).
	+ fix most compiler warnings from clang.
	+ amend build-fix for OpenSolaris, to ensure that a system header is
	  included in curses.h before testing feature symbols, since they
	  may be defined by that route.

20100424
	+ fix some strict compiler warnings in ncurses library.
	+ modify configure macro CF_HEADER_PATH to not look for variations in
	  the predefined include directories.
	+ improve configure macros CF_GCC_VERSION and CF_GCC_WARNINGS to work
	  with gcc 4.x's c89 alias, which gives warning messages for cases
	  where older versions would produce an error.

20100417
	+ modify _nc_capcmp() to work with cancelled strings.
	+ correct translation of "^" in _nc_infotocap(), used to transform
	  terminfo to termcap strings
	+ add configure --disable-rpath-hack, to allow disabling the feature
	  which adds rpath options for libraries in unusual places.
	+ improve CF_RPATH_HACK_2 by checking if the rpath option for a given
	  directory was already added.
	+ improve CF_RPATH_HACK_2 by using ldd to provide a standard list of
	  directories (which will be ignored).

20100410
	+ improve win_driver.c handling of mouse:
	  + discard motion events
	  + avoid calling _nc_timed_wait when there is a mouse event
	  + handle 4th and "rightmost" buttons.
	+ quote substitutions in CF_RPATH_HACK_2 configure macro, needed for
	  cases where there are embedded blanks in the rpath option.

20100403
	+ add configure check for exctags vs ctags, to work around pkgsrc.
	+ simplify logic in _nc_get_screensize() to make it easier to see how
	  environment variables may override system- and terminfo-values
	  (prompted by discussion with Igor Bujna).
	+ make debug-traces for COLOR_PAIR and PAIR_NUMBER less verbose.
	+ improve handling of color-pairs embedded in attributes for the
	  extended-colors configuration.
	+ modify MKlib_gen.sh to build link_test with sp-funcs.
	+ build-fixes for OpenSolaris aka Solaris 11, for wide-character
	  configuration as well as for rpath feature in *-config scripts.

20100327
	+ refactor CF_SHARED_OPTS configure macro, making CF_RPATH_HACK more
	  reusable.
	+ improve configure CF_REGEX, similar fixes.
	+ improve configure CF_FIND_LINKAGE, adding add check between system
	  (default) and explicit paths, where we can find the entrypoint in the
	  given library.
	+ add check if Gpm_Open() returns a -2, e.g., for "xterm".  This is
	  normally suppressed but can be overridden using $NCURSES_GPM_TERMS.
	  Ensure that Gpm_Close() is called in this case.

20100320
	+ rename atari and st52 terminfo entries to atari-old, st52-old, use
	  newer entries from FreeMiNT by Guido Flohr (from patch/report by Alan
	  Hourihane).

20100313
	+ modify install-rule for manpages so that *-config manpages will
	  install when building with --srcdir (report by Sven Joachim).
	+ modify CF_DISABLE_LEAKS configure macro so that the --enable-leaks
	  option is not the same as --disable-leaks (GenToo #305889).
	+ modify #define's for build-compiler to suppress cchar_t symbol from
	  compile of make_hash and make_keys, improving cross-compilation of
	  ncursesw (report by Bernhard Rosenkraenzer).
	+ modify CF_MAN_PAGES configure macro to replace all occurrences of
	  TPUT in tput.1's manpage (Debian #573597, report/analysis by Anders
	  Kaseorg).

20100306
	+ generate manpages for the *-config scripts, adapted from help2man
	  (suggested by Sven Joachim).
	+ use va_copy() in _nc_printf_string() to avoid conflicting use of
	  va_list value in _nc_printf_length() (report by Wim Lewis).

20100227
	+ add Ada95/configure script, to use in tar-file created by
	  Ada95/make-tar.sh
	+ fix typo in wresize.3x (patch by Tim van der Molen).
	+ modify screen-bce.XXX entries to exclude ech, since screen's color
	  model does not clear with color for that feature -TD

20100220
	+ add make-tar.sh scripts to Ada95 and test subdirectories to help with
	  making those separately distributable.
	+ build-fix for static libraries without dlsym (Debian #556378).
	+ fix a syntax error in man/form_field_opts.3x (patch by Ingo
	  Schwarze).

20100213
	+ add several screen-bce.XXX entries -TD

20100206
	+ update mrxvt terminfo entry -TD
	+ modify win_driver.c to support mouse single-clicks.
	+ correct name for termlib in ncurses*-config, e.g., if it is renamed
	  to provide a single file for ncurses/ncursesw libraries (patch by
	  Miroslav Lichvar).

20100130
	+ use vfork in test/ditto.c if available (request by Mike Frysinger).
	+ miscellaneous cleanup of manpages.
	+ fix typo in curs_bkgd.3x (patch by Tim van der Molen).
	+ build-fix for --srcdir (patch by Miroslav Lichvar).

20100123
	+ for term-driver configuration, ensure that the driver pointer is
	  initialized in setupterm so that terminfo/termcap programs work.
	+ amend fix for Debian #542031 to ensure that wattrset() returns only
	  OK or ERR, rather than the attribute value (report by Miroslav
	  Lichvar).
	+ reorder WINDOWLIST to put WINDOW data after SCREEN pointer, making
	  _nc_screen_of() compatible between normal/wide libraries again (patch
	  by Miroslav Lichvar)
	+ review/fix include-dependencies in modules files (report by Miroslav
	  Lichvar).

20100116
	+ modify win_driver.c to initialize acs_map for win32 console, so
	  that line-drawing works.
	+ modify win_driver.c to initialize TERMINAL struct so that programs
	  such as test/lrtest.c and test/ncurses.c which test string
	  capabilities can run.
	+ modify term-driver modules to eliminate forward-reference
	  declarations.

20100109
	+ modify configure macro CF_XOPEN_SOURCE, etc., to use CF_ADD_CFLAGS
	  consistently to add new -D's while removing duplicates.
	+ modify a few configure macros to consistently put new options
	  before older in the list.
	+ add tiparm(), based on review of X/Open Curses Issue 7.
	+ minor documentation cleanup.
	+ update config.guess, config.sub from
		http://savannah.gnu.org/projects/config
	  (caveat - its maintainer put 2010 copyright date on files dated 2009)

20100102
	+ minor improvement to tic's checking of similar SGR's to allow for the
	  most common case of SGR 0.
	+ modify getmouse() to act as its documentation implied, returning on
	  each call the preceding event until none are left.  When no more
	  events remain, it will return ERR.

20091227
	+ change order of lookup in progs/tput.c, looking for terminfo data
	  first.  This fixes a confusion between termcap "sg" and terminfo
	  "sgr" or "sgr0", originally from 990123 changes, but exposed by
	  20091114 fixes for hashing.  With this change, only "dl" and "ed" are
	  ambiguous (Mandriva #56272).

20091226
	+ add bterm terminfo entry, based on bogl 0.1.18 -TD
	+ minor fix to rxvt+pcfkeys terminfo entry -TD
	+ build-fixes for Ada95 tree for gnat 4.4 "style".

20091219
	+ remove old check in mvderwin() which prevented moving a derived
	  window whose origin happened to coincide with its parent's origin
	  (report by Katarina Machalkova).
	+ improve test/ncurses.c to put mouse droppings in the proper window.
	+ update minix terminfo entry -TD
	+ add bw (auto-left-margin) to nsterm* entries (Benjamin Sittler)

20091212
	+ correct transfer of multicolumn characters in multirow
	  field_buffer(), which stopped at the end of the first row due to
	  filling of unused entries in a cchar_t array with nulls.
	+ updated nsterm* entries (Benjamin Sittler, Emanuele Giaquinta)
	+ modify _nc_viscbuf2() and _tracecchar_t2() to show wide-character
	  nulls.
	+ use strdup() in set_menu_mark(), restore .marklen struct member on
	  failure.
	+ eliminate clause 3 from the UCB copyrights in read_termcap.c and
	  tset.c per
		ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
	  (patch by Nicholas Marriott).
	+ replace a malloc in tic.c with strdup, checking for failure (patch by
	  Nicholas Marriott).
	+ update config.guess, config.sub from
		http://savannah.gnu.org/projects/config

20091205
	+ correct layout of working window used to extract data in
	  wide-character configured by set_field_buffer (patch by Rafael
	  Garrido Fernandez)
	+ improve some limit-checks related to filename length in reading and
	  writing terminfo entries.
	+ ensure that filename is always filled in when attempting to read
	  a terminfo entry, so that infocmp can report the filename (patch
	  by Nicholas Marriott).

20091128
	+ modify mk-1st.awk to allow tinfo library to be built when term-driver
	  is enabled.
	+ add error-check to configure script to ensure that sp-funcs is
	  enabled if term-driver is, since some internal interfaces rely upon
	  this.

20091121
	+ fix case where progs/tput is used while sp-funcs is configure; this
	  requires save/restore of out-character function from _nc_prescreen
	  rather than the SCREEN structure (report by Charles Wilson).
	+ fix typo in man/curs_trace.3x which caused incorrect symbolic links
	+ improved configure macros CF_GCC_ATTRIBUTES, CF_PROG_LINT.

20091114
	+ updated man/curs_trace.3x
	+ limit hashing for termcap-names to 2-characters (Ubuntu #481740).
	+ change a variable name in lib_newwin.c to make it clearer which
	  value is being freed on error (patch by Nicholas Marriott).

20091107
	+ improve test/ncurses.c color-cycling test by reusing attribute-
	  and color-cycling logic from the video-attributes screen.
	+ add ifdef'd with NCURSES_INTEROP_FUNCS experimental bindings in form
	  library which help make it compatible with interop applications
	  (patch by Juergen Pfeifer).
	+ add configure option --enable-interop, for integrating changes
	  for generic/interop support to form-library by Juergen Pfeifer

20091031
	+ modify use of $CC environment variable which is defined by X/Open
	  as a curses feature, to ignore it if it is not a single character
	  (prompted by discussion with Benjamin C W Sittler).
	+ add START_TRACE in slk_init
	+ fix a regression in _nc_ripoffline which made test/ncurses.c not show
	  soft-keys, broken in 20090927 merging.
	+ change initialization of "hidden" flag for soft-keys from true to
	  false, broken in 20090704 merging (Ubuntu #464274).
	+ update nsterm entries (patch by Benjamin C W Sittler, prompted by
	  discussion with Fabian Groffen in GenToo #206201).
	+ add test/xterm-256color.dat

20091024
	+ quiet some pedantic gcc warnings.
	+ modify _nc_wgetch() to check for a -1 in the fifo, e.g., after a
	  SIGWINCH, and discard that value, to avoid confusing application
	  (patch by Eygene Ryabinkin, FreeBSD #136223).

20091017
	+ modify handling of $PKG_CONFIG_LIBDIR to use only the first item in
	  a possibly colon-separated list (Debian #550716).

20091010
	+ supply a null-terminator to buffer in _nc_viswibuf().
	+ fix a sign-extension bug in unget_wch() (report by Mike Gran).
	+ minor fixes to error-returns in default function for tputs, as well
	  as in lib_screen.c

20091003
	+ add WACS_xxx definitions to wide-character configuration for thick-
	  and double-lines (discussion with Slava Zanko).
	+ remove unnecessary kcan assignment to ^C from putty (Sven Joachim)
	+ add ccc and initc capabilities to xterm-16color -TD
	> patch by Benjamin C W Sittler:
	+ add linux-16color
	+ correct initc capability of linux-c-nc end-of-range
	+ similar change for dg+ccc and dgunix+ccc

20090927
	+ move leak-checking for comp_captab.c into _nc_leaks_tinfo() since
	  that module since 20090711 is in libtinfo.
	+ add configure option --enable-term-driver, to allow compiling with
	  terminal-driver.  That is used in MinGW port, and (being somewhat
	  more complicated) is an experimental alternative to the conventional
	  termlib internals.  Currently, it requires the sp-funcs feature to
	  be enabled.
	+ completed integrating "sp-funcs" by Juergen Pfeifer in ncurses
	  library (some work remains for forms library).

20090919
	+ document return code from define_key (report by Mike Gran).
	+ make some symbolic links in the terminfo directory-tree shorter
	  (patch by Daniel Jacobowitz, forwarded by Sven Joachim).).
	+ fix some groff warnings in terminfo.5, etc., from recent Debian
	  changes.
	+ change ncv and op capabilities in sun-color terminfo entry to match
	  Sun's entry for this (report by Laszlo Peter).
	+ improve interix smso terminfo capability by using reverse rather than
	  bold (report by Kristof Zelechovski).

20090912
	+ add some test programs (and make these use the same special keys
	  by sharing linedata.h functions):
	  test/test_addstr.c
	  test/test_addwstr.c
	  test/test_addchstr.c
	  test/test_add_wchstr.c
	+ correct internal _nc_insert_ch() to use _nc_insert_wch() when
	  inserting wide characters, since the wins_wch() function that it used
	  did not update the cursor position (report by Ciprian Craciun).

20090906
	+ fix typo s/is_timeout/is_notimeout/ which made "man is_notimeout" not
	  work.
	+ add null-pointer checks to other opaque-functions.
	+ add is_pad() and is_subwin() functions for opaque access to WINDOW
	  (discussion with Mark Dickinson).
	+ correct merge to lib_newterm.c, which broke when sp-funcs was
	  enabled.

20090905
	+ build-fix for building outside source-tree (report by Sven Joachim).
	+ fix Debian lintian warning for man/tabs.1 by making section number
	  agree with file-suffix (report by Sven Joachim).
	+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).

20090829
	+ workaround for bug in g++ 4.1-4.4 warnings for wattrset() macro on
	  amd64 (Debian #542031).
	+ fix typo in curs_mouse.3x (Debian #429198).

20090822
	+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).

20090815
	+ correct use of terminfo capabilities for initializing soft-keys,
	  broken in 20090510 merging.
	+ modify wgetch() to ensure it checks SIGWINCH when it gets an error
	  in non-blocking mode (patch by Clemens Ladisch).
	+ use PATH_SEPARATOR symbol when substituting into run_tic.sh, to
	  help with builds on non-Unix platforms such as OS/2 EMX.
	+ modify scripting for misc/run_tic.sh to test configure script's
	  $cross_compiling variable directly rather than comparing host/build
	  compiler names (prompted by comment in GenToo #249363).
	+ fix configure script option --with-database, which was coded as an
	  enable-type switch.
	+ build-fixes for --srcdir (report by Frederic L W Meunier).

20090808
	+ separate _nc_find_entry() and _nc_find_type_entry() from
	  implementation details of hash function.

20090803
	+ add tabs.1 to man/man_db.renames
	+ modify lib_addch.c to compensate for removal of wide-character test
	  from unctrl() in 20090704 (Debian #539735).

20090801
	+ improve discussion in INSTALL for use of system's tic/infocmp for
	  cross-compiling and building fallbacks.
	+ modify test/demo_termcap.c to correspond better to options in
	  test/demo_terminfo.c
	+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).
	+ fix logic for 'V' in test/ncurses.c tests f/F.

20090728
	+ correct logic in tigetnum(), which caused tput program to treat all
	  string capabilities as numeric (report by Rajeev V Pillai,
	  cf: 20090711).

20090725
	+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).

20090718
	+ fix a null-pointer check in _nc_format_slks() in lib_slk.c, from
	  20090704 changes.
	+ modify _nc_find_type_entry() to use hashing.
	+ make CCHARW_MAX value configurable, noting that changing this would
	  change the size of cchar_t, and would be ABI-incompatible.
	+ modify test-programs, e.g,.  test/view.c, to address subtle
	  differences between Tru64/Solaris and HPUX/AIX getcchar() return
	  values.
	+ modify length returned by getcchar() to count the trailing null
	  which is documented in X/Open (cf: 20020427).
	+ fixes for test programs to build/work on HPUX and AIX, etc.

20090711
	+ improve performance of tigetstr, etc., by using hashing code from tic.
	+ minor fixes for memory-leak checking.
	+ add test/demo_terminfo, for comparison with demo_termcap

20090704
	+ remove wide-character checks from unctrl() (patch by Clemens Ladisch).
	+ revise wadd_wch() and wecho_wchar() to eliminate dependency on
	  unctrl().
	+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).

20090627
	+ update llib-lncurses[wt] to use sp-funcs.
	+ various code-fixes to build/work with --disable-macros configure
	  option.
	+ add several new files from Juergen Pfeifer which will be used when
	  integration of "sp-funcs" is complete.  This includes a port to
	  MinGW.

20090613
	+ move definition for NCURSES_WRAPPED_VAR back to ncurses_dll.h, to
	  make includes of term.h without curses.h work (report by "Nix").
	+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).

20090607
	+ fix a regression in lib_tputs.c, from ongoing merges.

20090606
	+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).

20090530
	+ fix an infinite recursion when adding a legacy-coding 8-bit value
	  using insch() (report by Clemens Ladisch).
	+ free home-terminfo string in del_curterm() (patch by Dan Weber).
	+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).

20090523
	+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).

20090516
	+ work around antique BSD game's manipulation of stdscr, etc., versus
	  SCREEN's copy of the pointer (Debian #528411).
	+ add a cast to wattrset macro to avoid compiler warning when comparing
	  its result against ERR (adapted from patch by Matt Kraii, Debian
	  #528374).

20090510
	+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).

20090502
	+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).
	+ add vwmterm terminfo entry (patch by Bryan Christ).

20090425
	+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).

20090419
	+ build fix for _nc_free_and_exit() change in 20090418 (report by
	  Christian Ebert).

20090418
	+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).

20090411
	+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).
	  This change finishes merging for menu and panel libraries, does
	  part of the form library.

20090404
	+ suppress configure check for static/dynamic linker flags for gcc on
	  Darwin (report by Nelson Beebe).

20090328
	+ extend ansi.sys pfkey capability from kf1-kf10 to kf1-kf48, moving
	  function key definitions from emx-base for consistency -TD
	+ correct missing final 'p' in pfkey capability of ansi.sys-old (report
	  by Kalle Olavi Niemitalo).
	+ improve test/ncurses.c 'F' test, show combining characters in color.
	+ quiet a false report by cppcheck in c++/cursesw.cc by eliminating
	  a temporary variable.
	+ use _nc_doalloc() rather than realloc() in a few places in ncurses
	  library to avoid leak in out-of-memory condition (reports by William
	  Egert and Martin Ettl based on cppcheck tool).
	+ add --with-ncurses-wrap-prefix option to test/configure (discussion
	  with Charles Wilson).
	+ use ncurses*-config scripts if available for test/configure.
	+ update test/aclocal.m4 and test/configure
	> patches by Charles Wilson:
	+ modify CF_WITH_LIBTOOL configure check to allow unreleased libtool
	  version numbers (e.g.  which include alphabetic chars, as well as
	  digits, after the final '.').
	+ improve use of -no-undefined option for libtool by setting an
	  intermediate variable LT_UNDEF in the configure script, and then
	  using that in the libtool link-commands.
	+ fix an missing use of NCURSES_PUBLIC_VAR() in tinfo/MKcodes.awk
	  from 20090321 changes.
	+ improve mk-1st.awk script by writing separate cases for the
	  LIBTOOL_LINK command, depending on which library (ncurses, ticlib,
	  termlib) is to be linked.
	+ modify configure.in to allow broken-linker configurations, not just
	  enable-reentrant, to set public wrap prefix.

20090321
	+ add TICS_LIST and SHLIB_LIST to allow libtool 2.2.6 on Cygwin to
	  build with tic and term libraries (patch by Charles Wilson).
	+ add -no-undefined option to libtool for Cygwin, MinGW, U/Win and AIX
	  (report by Charles Wilson).
	+ fix definition for c++/Makefile.in's SHLIB_LIST, which did not list
	  the form, menu or panel libraries (patch by Charles Wilson).
	+ add configure option --with-wrap-prefix to allow setting the prefix
	  for functions used to wrap global variables to something other than
	  "_nc_" (discussion with Charles Wilson).

20090314
	+ modify scripts to generate ncurses*-config and pc-files to add
	  dependency for tinfo library (patch by Charles Wilson).
	+ improve comparison of program-names when checking for linked flavors
	  such as "reset" by ignoring the executable suffix (reports by Charles
	  Wilson, Samuel Thibault and Cedric Bretaudeau on Cygwin mailing
	  list).
	+ suppress configure check for static/dynamic linker flags for gcc on
	  Solaris 10, since gcc is confused by absence of static libc, and
	  does not switch back to dynamic mode before finishing the libraries
	  (reports by Joel Bertrand, Alan Pae).
	+ minor fixes to Intel compiler warning checks in configure script.
	+ modify _nc_leaks_tinfo() so leak-checking in test/railroad.c works.
	+ modify set_curterm() to make broken-linker configuration work with
	  changes from 20090228 (report by Charles Wilson).

20090228
	+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).
	+ modify declaration of cur_term when broken-linker is used, but
	  enable-reentrant is not, to match pre-5.7 (report by Charles Wilson).

20090221
	+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).

20090214
	+ add configure script --enable-sp-funcs to enable the new set of
	  extended functions.
	+ start integrating patches by Juergen Pfeifer:
	  + add extended functions which specify the SCREEN pointer for several
	    curses functions which use the global SP (these are incomplete;
	    some internals work is needed to complete these).
	  + add special cases to configure script for MinGW port.

20090207
	+ update several configure macros from lynx changes
	  + append (not prepend) to CFLAGS/CPPFLAGS
	  + change variable from PATHSEP to PATH_SEPARATOR
	+ improve install-rules for pc-files (patch by Miroslav Lichvar).
	  + make it work with $DESTDIR
	  + create the pkg-config library directory if needed.

20090124
	+ modify init_pair() to allow caller to create extra color pairs beyond
	  the color_pairs limit, which use default colors (request by Emanuele
	  Giaquinta).
	+ add misc/terminfo.tmp and misc/*.pc to "sources" rule.
	+ fix typo "==" where "=" is needed in ncurses-config.in and
	  gen-pkgconfig.in files (Debian #512161).

20090117
	+ add -shared option to MK_SHARED_LIB when -Bsharable is used, for
	  *BSD's, without which "main" might be one of the shared library's
	  dependencies (report/analysis by Ken Dickey).
	+ modify waddch_literal(), updating line-pointer after a multicolumn
	  character is found to not fit on the current row, and wrapping is
	  done.  Since the line-pointer was not updated, the wrapped
	  multicolumn character was written to the beginning of the current row
	  (cf: 20041023, reported by "Nick" regarding problem with ncmpc
	  http://musicpd.org/mantis/bug_view_page.php?bug_id=1930).

20090110
	+ add screen.Eterm terminfo entry (GenToo #124887) -TD
	+ modify adacurses-config to look for ".ali" files in the adalib
	  directory.
	+ correct install for Ada95, which omitted libAdaCurses.a used in
	  adacurses-config
	+ change install for adacurses-config to provide additional flavors
	  such as adacursesw-config, for ncursesw (GenToo #167849).

20090105
	+ remove undeveloped feature in ncurses-config.in for setting
	  prefix variable.
	+ recent change to ncurses-config.in did not take into account the
	  --disable-overwrite option, which sets $includedir to the
	  subdirectory and using just that for a -I option does not work - fix
	  (report by Frederic L W Meunier).

20090104
	+ modify gen-pkgconfig.in to eliminate a dependency on rpath when
	  deciding whether to add $LIBS to --libs output; that should be shown
	  for the ncurses and tinfo libraries without taking rpath into
	  account.
	+ fix an overlooked change from $AR_OPTS to $ARFLAGS in mk-1st.awk,
	  used in static libraries (report by Marty Jack).

20090103
	+ add a configure-time check to pick a suitable value for
	  CC_SHARED_OPTS for Solaris (report by Dagobert Michelsen).
	+ add configure --with-pkg-config and --enable-pc-files options, along
	  with misc/gen-pkgconfig.in which can be used to generate ".pc" files
	  for pkg-config (request by Jan Engelhardt).
	+ use $includedir symbol in misc/ncurses-config.in, add --includedir
	  option.
	+ change makefiles to use $ARFLAGS rather than $AR_OPTS, provide a
	  configure check to detect whether a "-" is needed before "ar"
	  options.
	+ update config.guess, config.sub from
		http://savannah.gnu.org/projects/config

20081227
	+ modify mk-1st.awk to work with extra categories for tinfo library.
	+ modify configure script to allow building shared libraries with gcc
	  on AIX 5 or 6 (adapted from patch by Lital Natan).

20081220
	+ modify to omit the opaque-functions from lib_gen.o when
	  --disable-ext-funcs is used.
	+ add test/clip_printw.c to illustrate how to use printw without
	  wrapping.
	+ modify ncurses 'F' test to demo wborder_set() with colored lines.
	+ modify ncurses 'f' test to demo wborder() with colored lines.

20081213
	+ add check for failure to open hashed-database needed for db4.6
	  (GenToo #245370).
	+ corrected --without-manpages option; previous change only suppressed
	  the auxiliary rules install.man and uninstall.man
	+ add case for FreeMINT to configure macro CF_XOPEN_SOURCE (patch from
	  GenToo #250454).
	+ fixes from NetBSD port at
	  http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/devel/ncurses/patches
	  patch-ac (build-fix for DragonFly)
	  patch-ae (use INSTALL_SCRIPT for installing misc/ncurses*-config).
	+ improve configure script macros CF_HEADER_PATH and CF_LIBRARY_PATH
	  by adding CFLAGS, CPPFLAGS and LDFLAGS, LIBS values to the
	  search-lists.
	+ correct title string for keybound manpage (patch by Frederic Culot,
	  OpenBSD documentation/6019),

20081206
	+ move del_curterm() call from _nc_freeall() to _nc_leaks_tinfo() to
	  work for progs/clear, progs/tabs, etc.
	+ correct buffer-size after internal resizing of wide-character
	  set_field_buffer(), broken in 20081018 changes (report by Mike Gran).
	+ add "-i" option to test/filter.c to tell it to use initscr() rather
	  than newterm(), to investigate report on comp.unix.programmer that
	  ncurses would clear the screen in that case (it does not - the issue
	  was xterm's alternate screen feature).
	+ add check in mouse-driver to disable connection if GPM returns a
	  zero, indicating that the connection is closed (Debian #506717,
	  adapted from patch by Samuel Thibault).

20081129
	+ improve a workaround in adding wide-characters, when a control
	  character is found.  The library (cf: 20040207) uses unctrl() to
	  obtain a printable version of the control character, but was not
	  passing color or video attributes.
	+ improve test/ncurses.c 'a' test, using unctrl() more consistently to
	  display meta-characters.
	+ turn on _XOPEN_CURSES definition in curses.h
	+ add eterm-color entry (report by Vincent Lefevre) -TD
	+ correct use of key_name() in test/ncurses.c 'A' test, which only
	  displays wide-characters, not key-codes since 20070612 (report by
	  Ricardo Cantu).

20081122
	+ change _nc_has_mouse() to has_mouse(), reflect its use in C++ and
	  Ada95 (patch by Juergen Pfeifer).
	+ document in TO-DO an issue with Cygwin's package for GNAT (report
	  by Mike Dennison).
	+ improve error-checking of command-line options in "tabs" program.

20081115
	+ change several terminfo entries to make consistent use of ANSI
	  clear-all-tabs -TD
	+ add "tabs" program (prompted by Debian #502260).
	+ add configure --without-manpages option (request by Mike Frysinger).

20081102 5.7 release for upload to ftp.gnu.org

20081025
	+ add a manpage to discuss memory leaks.
	+ add support for shared libraries for QNX (other than libtool, which
	  does not work well on that platform).
	+ build-fix for QNX C++ binding.

20081018
	+ build-fixes for OS/2 EMX.
	+ modify form library to accept control characters such as newline
	  in set_field_buffer(), which is compatible with Solaris (report by
	  Nit Khair).
	+ modify configure script to assume --without-hashed-db when
	  --disable-database is used.
	+ add "-e" option in ncurses/Makefile.in when generating source-files
	  to force earlier exit if the build environment fails unexpectedly
	  (prompted by patch by Adrian Bunk).
	+ change configure script to use CF_UTF8_LIB, improved variant of
	  CF_LIBUTF8.

20081012
	+ add teraterm4.59 terminfo entry, use that as primary teraterm entry, rename
	  original to teraterm2.3 -TD
	+ update "gnome" terminfo to 2.22.3 -TD
	+ update "konsole" terminfo to 1.6.6, needs today's fix for tic -TD
	+ add "aterm" terminfo -TD
	+ add "linux2.6.26" terminfo -TD
	+ add logic to tic for cancelling strings in user-defined capabilities,
	  overlooked til now.

20081011
	+ regenerated html documentation.
	+ add -m and -s options to test/keynames.c and test/key_names.c to test
	  the meta() function with keyname() or key_name(), respectively.
	+ correct return value of key_name() on error; it is null.
	+ document some unresolved issues for rpath and pthreads in TO-DO.
	+ fix a missing prototype for ioctl() on OpenBSD in tset.c
	+ add configure option --disable-tic-depends to make explicit whether
	  tic library depends on ncurses/ncursesw library, amends change from
	  20080823 (prompted by Debian #501421).

20081004
	+ some build-fixes for configure --disable-ext-funcs (incomplete, but
	  works for C/C++ parts).
	+ improve configure-check for awks unable to handle large strings, e.g.
	  AIX 5.1 whose awk silently gives up on large printf's.

20080927
	+ fix build for --with-dmalloc by workaround for redefinition of
	  strndup between string.h and dmalloc.h
	+ fix build for --disable-sigwinch
	+ add environment variable NCURSES_GPM_TERMS to allow override to use
	  GPM on terminals other than "linux", etc.
	+ disable GPM mouse support when $TERM does not happen to contain
	  "linux", since Gpm_Open() no longer limits its assertion to terminals
	  that it might handle, e.g., within "screen" in xterm.
	+ reset mouse file-descriptor when unloading GPM library (report by
	  Miroslav Lichvar).
	+ fix build for --disable-leaks --enable-widec --with-termlib
	> patch by Juergen Pfeifer:
	+ use improved initialization for soft-label keys in Ada95 sample code.
	+ discard internal symbol _nc_slk_format (unused since 20080112).
	+ move call of slk_paint_info() from _nc_slk_initialize() to
	  slk_intern_refresh(), improving initialization.

20080925
	+ fix bug in mouse code for GPM from 20080920 changes (reported in
	  Debian #500103, also Miroslav Lichvar).

20080920
	+ fix shared-library rules for cygwin with tic- and tinfo-libraries.
	+ fix a memory leak when failure to connect to GPM.
	+ correct check for notimeout() in wgetch() (report on linux.redhat
	  newsgroup by FurtiveBertie).
	+ add an example warning-suppression file for valgrind,
	  misc/ncurses.supp (based on example from Reuben Thomas)

20080913
	+ change shared-library configuration for OpenBSD, make rpath work.
	+ build-fixes for using libutf8, e.g., on OpenBSD 3.7

20080907
	+ corrected fix for --enable-weak-symbols (report by Frederic L W
	  Meunier).

20080906
	+ corrected gcc options for building shared libraries on IRIX64.
	+ add configure check for awk programs unable to handle big-strings,
	  use that to improve the default for --enable-big-strings option.
	+ makefile-fixes for --enable-weak-symbols (report by Frederic L W
	  Meunier).
	+ update test/configure script.
	+ adapt ifdef's from library to make test/view.c build when mbrtowc()
	  is unavailable, e.g., with HPUX 10.20.
	+ add configure check for wcsrtombs, mbsrtowcs, which are used in
	  test/ncurses.c, and use wcstombs, mbstowcs instead if available,
	  fixing build of ncursew for HPUX 11.00

20080830
	+ fixes to make Ada95 demo_panels() example work.
	+ modify Ada95 'rain' test program to accept keyboard commands like the
	  C-version.
	+ modify BeOS-specific ifdef's to build on Haiku (patch by Scott
	  Mccreary).
	+ add configure-check to see if the std namespace is legal for cerr
	  and endl, to fix a build issue with Tru64.
	+ consistently use NCURSES_BOOL in lib_gen.c
	+ filter #line's from lib_gen.c
	+ change delimiter in MKlib_gen.sh from '%' to '@', to avoid
	  substitution by IBM xlc to '#' as part of its extensions to digraphs.
	+ update config.guess, config.sub from
		http://savannah.gnu.org/projects/config
	  (caveat - its maintainer removed support for older Linux systems).

20080823
	+ modify configure check for pthread library to work with OSF/1 5.1,
	  which uses #define's to associate its header and library.
	+ use pthread_mutexattr_init() for initializing pthread_mutexattr_t,
	  makes threaded code work on HPUX 11.23
	+ fix a bug in demo_menus in freeing menus (cf: 20080804).
	+ modify configure script for the case where tic library is used (and
	  possibly renamed) to remove its dependency upon ncurses/ncursew
	  library (patch by Dr Werner Fink).
	+ correct manpage for menu_fore() which gave wrong default for
	  the attribute used to display a selected entry (report by Mike Gran).
	+ add Eterm-256color, Eterm-88color and rxvt-88color (prompted by
	  Debian #495815) -TD

20080816
	+ add configure option --enable-weak-symbols to turn on new feature.
	+ add configure-check for availability of weak symbols.
	+ modify linkage with pthread library to use weak symbols so that
	  applications not linked to that library will not use the mutexes,
	  etc.  This relies on gcc, and may be platform-specific (patch by Dr
	  Werner Fink).
	+ add note to INSTALL to document limitation of renaming of tic library
	  using the --with-ticlib configure option (report by Dr Werner Fink).
	+ document (in manpage) why tputs does not detect I/O errors (prompted
	  by comments by Samuel Thibault).
	+ fix remaining warnings from Klocwork report.

20080804
	+ modify _nc_panelhook() data to account for a permanent memory leak.
	+ fix memory leaks in test/demo_menus
	+ fix most warnings from Klocwork tool (report by Larry Zhou).
	+ modify configure script CF_XOPEN_SOURCE macro to add case for
	  "dragonfly" from xterm #236 changes.
	+ modify configure script --with-hashed-db to let $LIBS override the
	  search for the db library (prompted by report by Samson Pierre).

20080726
	+ build-fixes for gcc 4.3.1 (changes to gnat "warnings", and C inlining
	  thresholds).

20080713
	+ build-fix (reports by Christian Ebert, Funda Wang).

20080712
	+ compiler-warning fixes for Solaris.

20080705
	+ use NCURSES_MOUSE_MASK() in definition of BUTTON_RELEASE(), etc., to
	  make those work properly with the "--enable-ext-mouse" configuration
	  (cf: 20050205).
	+ improve documentation of build-cc options in INSTALL.
	+ work-around a bug in gcc 4.2.4 on AIX, which does not pass the
	  -static/-dynamic flags properly to linker, causing test/bs to
	  not link.

20080628
	+ correct some ifdef's needed for the broken-linker configuration.
	+ make debugging library's $BAUDRATE feature work for termcap
	  interface.
	+ make $NCURSES_NO_PADDING feature work for termcap interface (prompted
	  by comment on FreeBSD mailing list).
	+ add screen.mlterm terminfo entry -TD
	+ improve mlterm and mlterm+pcfkeys terminfo entries -TD

20080621
	+ regenerated html documentation.
	+ expand manpage description of parameters for form_driver() and
	  menu_driver() (prompted by discussion with Adam Spragg).
	+ add null-pointer checks for cur_term in baudrate() and
	  def_shell_mode(), def_prog_mode()
	+ fix some memory leaks in delscreen() and wide acs.

20080614
	+ modify test/ditto.c to illustrate multi-threaded use_screen().
	+ change CC_SHARED_OPTS from -KPIC to -xcode=pic32 for Solaris.
	+ add "-shared" option to MK_SHARED_LIB for gcc on Solaris (report
	  by Poor Yorick).

20080607
	+ finish changes to wgetch(), making it switch as needed to the
	  window's actual screen when calling wrefresh() and wgetnstr().  That
	  allows wgetch() to get used concurrently in different threads with
	  some minor restrictions, e.g., the application should not delete a
	  window which is being used in a wgetch().
	+ simplify mutex's, combining the window- and screen-mutex's.

20080531
	+ modify wgetch() to use the screen which corresponds to its window
	  parameter rather than relying on SP; some dependent functions still
	  use SP internally.
	+ factor out most use of SP in lib_mouse.c, using parameter.
	+ add internal _nc_keyname(), replacing keyname() to associate with a
	  particular SCREEN rather than the global SP.
	+ add internal _nc_unctrl(), replacing unctrl() to associate with a
	  particular SCREEN rather than the global SP.
	+ add internal _nc_tracemouse(), replacing _tracemouse() to eliminate
	  its associated global buffer _nc_globals.tracemse_buf now in SCREEN.
	+ add internal _nc_tracechar(), replacing _tracechar() to use SCREEN in
	  preference to the global _nc_globals.tracechr_buf buffer.

20080524
	+ modify _nc_keypad() to make it switch temporarily as needed to the
	  screen which must be updated.
	+ wrap cur_term variable to help make _nc_keymap() thread-safe, and
	  always set the screen's copy of this variable in set_curterm().
	+ restore curs_set() state after endwin()/refresh() (report/patch
	  Miroslav Lichvar)

20080517
	+ modify configure script to note that --enable-ext-colors and
	  --enable-ext-mouse are not experimental, but extensions from
	  the ncurses ABI 5.
	+ corrected manpage description of setcchar() (discussion with
	  Emanuele Giaquinta).
	+ fix for adding a non-spacing character at the beginning of a line
	  (report/patch by Miroslav Lichvar).

20080503
	+ modify screen.* terminfo entries using new screen+fkeys to fix
	  overridden keys in screen.rxvt (Debian #478094) -TD
	+ modify internal interfaces to reduce wgetch()'s dependency on the
	  global SP.
	+ simplify some loops with macros each_screen(), each_window() and
	  each_ripoff().

20080426
	+ continue modifying test/ditto.c toward making it demonstrate
	  multithreaded use_screen(), using fifos to pass data between screens.
	+ fix typo in form.3x (report by Mike Gran).

20080419
	+ add screen.rxvt terminfo entry -TD
	+ modify tic -f option to format spaces as \s to prevent them from
	  being lost when that is read back in unformatted strings.
	+ improve test/ditto.c, using a "talk"-style layout.

20080412
	+ change test/ditto.c to use openpty() and xterm.
	+ add locks for copywin(), dupwin(), overlap(), overlay() on their
	  window parameters.
	+ add locks for initscr() and newterm() on updates to the SCREEN
	  pointer.
	+ finish table in curs_thread.3x manpage.

20080405
	+ begin table in curs_thread.3x manpage describing the scope of data
	  used by each function (or symbol) for threading analysis.
	+ add null-pointer checks to setsyx() and getsyx() (prompted by
	  discussion by Martin v. Lowis and Jeroen Ruigrok van der Werven on
	  python-dev2 mailing list).

20080329
	+ add null-pointer checks in set_term() and delscreen().
	+ move _nc_windows into _nc_globals, since windows can be pads, which
	  are not associated with a particular screen.
	+ change use_screen() to pass the SCREEN* parameter rather than
	  stdscr to the callback function.
	+ force libtool to use tag for 'CC' in case it does not detect this,
	  e.g., on aix when using CC=powerpc-ibm-aix5.3.0.0-gcc
	  (report/patch by Michael Haubenwallner).
	+ override OBJEXT to "lo" when building with libtool, to work on
	  platforms such as AIX where libtool may use a different suffix for
	  the object files than ".o" (report/patch by Michael Haubenwallner).
	+ add configure --with-pthread option, for building with the POSIX
	  thread library.

20080322
	+ fill in extended-color pair two more places in wbkgrndset() and
	  waddch_nosync() (prompted by Sedeno's patch).
	+ fill in extended-color pair in _nc_build_wch() to make colors work
	  for wide-characters using extended-colors (patch by Alejandro R
	  Sedeno).
	+ add x/X toggles to ncurses.c C color test to test/demo
	  wide-characters with extended-colors.
	+ add a/A toggles to ncurses.c c/C color tests.
	+ modify test/ditto.c to use use_screen().
	+ finish modifying test/rain.c to demonstrate threads.

20080308
	+ start modifying test/rain.c for threading demo.
	+ modify test/ncurses.c to make 'f' test accept the f/F/b/F/</> toggles
	  that the 'F' accepts.
	+ modify test/worm.c to show trail in reverse-video when other threads
	  are working concurrently.
	+ fix a deadlock from improper nesting of mutexes for windowlist and
	  window.

20080301
	+ fixes from 20080223 resolved issue with mutexes; change to use
	  recursive mutexes to fix memory leak in delwin() as called from
	  _nc_free_and_exit().

20080223
	+ fix a size-difference in _nc_globals which caused hanging of mutex
	  lock/unlock when termlib was built separately.

20080216
	+ avoid using nanosleep() in threaded configuration since that often
	  is implemented to suspend the entire process.

20080209
	+ update test programs to build/work with various UNIX curses for
	  comparisons.  This was to reinvestigate statement in X/Open Curses
	  that insnstr and winsnstr perform wrapping.  None of the Unix-branded
	  implementations do this, as noted in manpage (cf: 20040228).

20080203
	+ modify _nc_setupscreen() to set the legacy-coding value the same
	  for both narrow/wide models.  It had been set only for wide model,
	  but is needed to make unctrl() work with locale in the narrow model.
	+ improve waddch() and winsch() handling of EILSEQ from mbrtowc() by
	  using unctrl() to display illegal bytes rather than trying to append
	  further bytes to make up a valid sequence (reported by Andrey A
	  Chernov).
	+ modify unctrl() to check codes in 128-255 range versus isprint().
	  If they are not printable, and locale was set, use a "M-" or "~"
	  sequence.

20080126
	+ improve threading in test/worm.c (wrap refresh calls, and KEY_RESIZE
	  handling).  Now it hangs in napms(), no matter whether nanosleep()
	  or poll() or select() are used on Linux.

20080119
	+ fixes to build with --disable-ext-funcs
	+ add manpage for use_window and use_screen.
	+ add set_tabsize() and set_escdelay() functions.

20080112
	+ remove recursive-mutex definitions, finish threading demo for worm.c
	+ remove a redundant adjustment of lines in resizeterm.c's
	  adjust_window() which caused occasional misadjustment of stdscr when
	  softkeys were used.

20080105
	+ several improvements to terminfo entries based on xterm #230 -TD
	+ modify MKlib_gen.sh to handle keyname/key_name prototypes, so the
	  "link_test" builds properly.
	+ fix for toe command-line options -u/-U to ensure filename is given.
	+ fix allocation-size for command-line parsing in infocmp from 20070728
	  (report by Miroslav Lichvar)
	+ improve resizeterm() by moving ripped-off lines, and repainting the
	  soft-keys (report by Katarina Machalkova)
	+ add clarification in wclear's manpage noting that the screen will be
	  cleared even if a subwindow is cleared (prompted by Christer Enfors
	  question).
	+ change test/ncurses.c soft-key tests to work with KEY_RESIZE.

20071222
	+ continue implementing support for threading demo by adding mutex
	  for delwin().

20071215
	+ add several functions to C++ binding which wrap C functions that
	  pass a WINDOW* parameter (request by Chris Lee).

20071201
	+ add note about configure options needed for Berkeley database to the
	  INSTALL file.
	+ improve checks for version of Berkeley database libraries.
	+ amend fix for rpath to not modify LDFLAGS if the platform has no
	  applicable transformation (report by Christian Ebert, cf: 20071124).

20071124
	+ modify configure option --with-hashed-db to accept a parameter which
	  is the install-prefix of a given Berkeley Database (prompted by
	  pierre4d2 comments).
	+ rewrite wrapper for wcrtomb(), making it work on Solaris.  This is
	  used in the form library to determine the length of the buffer needed
	  by field_buffer (report by Alfred Fung).
	+ remove unneeded window-parameter from C++ binding for wresize (report
	  by Chris Lee).

20071117
	+ modify the support for filesystems which do not support mixed-case to
	  generate 2-character (hexadecimal) codes for the lower-level of the
	  filesystem terminfo database (request by Michail Vidiassov).
	+ add configure option --enable-mixed-case, to allow overriding the
	  configure script's check if the filesystem supports mixed-case
	  filenames.
	+ add wresize() to C++ binding (request by Chris Lee).
	+ define NCURSES_EXT_FUNCS and NCURSES_EXT_COLORS in curses.h to make
	  it simpler to tell if the extended functions and/or colors are
	  declared.

20071103
	+ update memory-leak checks for changes to names.c and codes.c
	+ correct acsc strings in h19, z100 (patch by Benjamin C W Sittler).

20071020
	+ continue implementing support for threading demo by adding mutex
	  for use_window().
	+ add mrxvt terminfo entry, add/fix xterm building blocks for modified
	  cursor keys -TD
	+ compile with FreeBSD "contemporary" TTY interface (patch by
	  Rong-En Fan).

20071013
	+ modify makefile rules to allow clear, tput and tset to be built
	  without libtic.  The other programs (infocmp, tic and toe) rely on
	  that library.
	+ add/modify null-pointer checks in several functions for SP and/or
	  the WINDOW* parameter (report by Thorben Krueger).
	+ fixes for field_buffer() in formw library (see Redhat #310071,
	  patches by Miroslav Lichvar).
	+ improve performance of NCURSES_CHAR_EQ code (patch by Miroslav
	  Lichvar).
	+ update/improve mlterm and rxvt terminfo entries, e.g., for
	  the modified cursor- and keypad-keys -TD

20071006
	+ add code to curses.priv.h ifdef'd with NCURSES_CHAR_EQ, which
	  changes the CharEq() macro to an inline function to allow comparing
	  cchar_t struct's without comparing gaps in a possibly unpacked
	  memory layout (report by Miroslav Lichvar).

20070929
	+ add new functions to lib_trace.c to setup mutex's for the _tracef()
	  calls within the ncurses library.
	+ for the reentrant model, move _nc_tputs_trace and _nc_outchars into
	  the SCREEN.
	+ start modifying test/worm.c to provide threading demo (incomplete).
	+ separated ifdef's for some BSD-related symbols in tset.c, to make
	  it compile on LynxOS (report by Greg Gemmer).
20070915
	+ modify Ada95/gen/Makefile to use shlib script, to simplify building
	  shared-library configuration on platforms lacking rpath support.
	+ build-fix for Ada95/src/Makefile to reflect changed dependency for
	  the terminal-interface-curses-aux.adb file which is now generated.
	+ restructuring test/worm.c, for use_window() example.

20070908
	+ add use_window() and use_screen() functions, to develop into support
	  for threaded library (incomplete).
	+ fix typos in man/curs_opaque.3x which kept the install script from
	  creating symbolic links to two aliases created in 20070818 (report by
	  Rong-En Fan).

20070901
	+ remove a spurious newline from output of html.m4, which caused links
	  for Ada95 html to be incorrect for the files generated using m4.
	+ start investigating mutex's for SCREEN manipulation (incomplete).
	+ minor cleanup of codes.c/names.c for --enable-const
	+ expand/revise "Routine and Argument Names" section of ncurses manpage
	  to address report by David Givens in newsgroup discussion.
	+ fix interaction between --without-progs/--with-termcap configure
	  options (report by Michail Vidiassov).
	+ fix typo in "--disable-relink" option (report by Michail Vidiassov).

20070825
	+ fix a sign-extension bug in infocmp's repair_acsc() function
	  (cf: 971004).
	+ fix old configure script bug which prevented "--disable-warnings"
	  option from working (patch by Mike Frysinger).

20070818
	+ add 9term terminal description (request by Juhapekka Tolvanen) -TD
	+ modify comp_hash.c's string output to avoid misinterpreting a null
	  "\0" followed by a digit.
	+ modify MKnames.awk and MKcodes.awk to support big-strings.
	  This only applies to the cases (broken linker, reentrant) where
	  the corresponding arrays are accessed via wrapper functions.
	+ split MKnames.awk into two scripts, eliminating the shell redirection
	  which complicated the make process and also the bogus timestamp file
	  which was introduced to fix "make -j".
	+ add test/test_opaque.c, test/test_arrays.c
	+ add wgetscrreg() and wgetparent() for applications that may need it
	  when NCURSES_OPAQUE is defined (prompted by Bryan Christ).

20070812
	+ amend treatment of infocmp "-r" option to retain the 1023-byte limit
	  unless "-T" is given (cf: 981017).
	+ modify comp_captab.c generation to use big-strings.
	+ make _nc_capalias_table and _nc_infoalias_table private accessed via
	  _nc_get_alias_table() since the tables are used only within the tic
	  library.
	+ modify configure script to skip Intel compiler in CF_C_INLINE.
	+ make _nc_info_hash_table and _nc_cap_hash_table private accessed via
	  _nc_get_hash_table() since the tables are used only within the tic
	  library.

20070728
	+ make _nc_capalias_table and _nc_infoalias_table private, accessed via
	  _nc_get_alias_table() since they are used only by parse_entry.c
	+ make _nc_key_names private since it is used only by lib_keyname.c
	+ add --disable-big-strings configure option to control whether
	  unctrl.c is generated using the big-string optimization - which may
	  use strings longer than supported by a given compiler.
	+ reduce relocation tables for tic, infocmp by changing type of
	  internal hash tables to short, and make those private symbols.
	+ eliminate large fixed arrays from progs/infocmp.c

20070721
	+ change winnstr() to stop at the end of the line (cf: 970315).
	+ add test/test_get_wstr.c
	+ add test/test_getstr.c
	+ add test/test_inwstr.c
	+ add test/test_instr.c

20070716
	+ restore a call to obtain screen-size in _nc_setupterm(), which
	  is used in tput and other non-screen applications via setupterm()
	  (Debian #433357, reported by Florent Bayle, Christian Ohm,
	  cf: 20070310).

20070714
	+ add test/savescreen.c test-program
	+ add check to trace-file open, if the given name is a directory, add
	  ".log" to the name and try again.
	+ add konsole-256color entry -TD
	+ add extra gcc warning options from xterm.
	+ minor fixes for ncurses/hashmap test-program.
	+ modify configure script to quiet c++ build with libtool when the
	  --disable-echo option is used.
	+ modify configure script to disable ada95 if libtool is selected,
	  writing a warning message (addresses FreeBSD #114493).
	+ update config.guess, config.sub

20070707
	+ add continuous-move "M" to demo_panels to help test refresh changes.
	+ improve fix for refresh of window on top of multi-column characters,
	  taking into account some split characters on left/right window
	  boundaries.

20070630
	+ add "widec" row to _tracedump() output to help diagnose remaining
	  problems with multi-column characters.
	+ partial fix for refresh of window on top of multi-column characters
	  which are partly overwritten (report by Sadrul H Chowdhury).
	+ ignore A_CHARTEXT bits in vidattr() and vid_attr(), in case
	  multi-column extension bits are passed there.
	+ add setlocale() call to demo_panels.c, needed for wide-characters.
	+ add some output flags to _nc_trace_ttymode to help diagnose a bug
	  report by Larry Virden, i.e., ONLCR, OCRNL, ONOCR and ONLRET,

20070623
	+ add test/demo_panels.c
	+ implement opaque version of setsyx() and getsyx().

20070612
	+ corrected xterm+pcf2 terminfo modifiers for F1-F4, to match xterm
	  #226 -TD
	+ split-out key_name() from MKkeyname.awk since it now depends upon
	  wunctrl() which is not in libtinfo (report by Rong-En Fan).

20070609
	+ add test/key_name.c
	+ add stdscr cases to test/inchs.c and test/inch_wide.c
	+ update test/configure
	+ correct formatting of DEL (0x7f) in _nc_vischar().
	+ null-terminate result of wunctrl().
	+ add null-pointer check in key_name() (report by Andreas Krennmair,
	  cf: 20020901).

20070602
	+ adapt mouse-handling code from menu library in form-library
	  (discussion with Clive Nicolson).
	+ add a modification of test/dots.c, i.e., test/dots_mvcur.c to
	  illustrate how to use mvcur().
	+ modify wide-character flavor of SetAttr() to preserve the
	  WidecExt() value stored in the .attr field, e.g., in case it
	  is overwritten by chgat (report by Aleksi Torhamo).
	+ correct buffer-size for _nc_viswbuf2n() (report by Aleksi Torhamo).
	+ build-fixes for Solaris 2.6 and 2.7 (patch by Peter O'Gorman).

20070526
	+ modify keyname() to use "^X" form only if meta() has been called, or
	  if keyname() is called without initializing curses, e.g., via
	  initscr() or newterm() (prompted by LinuxBase #1604).
	+ document some portability issues in man/curs_util.3x
	+ add a shadow copy of TTY buffer to _nc_prescreen to fix applications
	  broken by moving that data into SCREEN (cf: 20061230).

20070512
	+ add 'O' (wide-character panel test) in ncurses.c to demonstrate a
	  problem reported by Sadrul H Chowdhury with repainting parts of
	  a fullwidth cell.
	+ modify slk_init() so that if there are preceding calls to
	  ripoffline(), those affect the available lines for soft-keys (adapted
	  from patch by Clive Nicolson).
	+ document some portability issues in man/curs_getyx.3x

20070505
	+ fix a bug in Ada95/samples/ncurses which caused a variable to
	  become uninitialized in the "b" test.
	+ fix Ada95/gen/Makefile.in adahtml rule to account for recent
	  movement of files, fix a few incorrect manpage references in the
	  generated html.
	+ add Ada95 binding to _nc_freeall() as Curses_Free_All to help with
	  memory-checking.
	+ correct some functions in Ada95 binding which were using return value
	  from C where none was returned:  idcok(), immedok() and wtimeout().
	+ amend recent changes for Ada95 binding to make it build with
	  Cygwin's linker, e.g., with configure options
		--enable-broken-linker --with-ticlib

20070428
	+ add a configure check for gcc's options for inlining, use that to
	  quiet a warning message where gcc's default behavior changed from
	  3.x to 4.x.
	+ improve warning message when checking if GPM is linked to curses
	  library by not warning if its use of "wgetch" is via a weak symbol.
	+ add loader options when building with static libraries to ensure that
	  an installed shared library for ncurses does not conflict.  This is
	  reported as problem with Tru64, but could affect other platforms
	  (report Martin Mokrejs, analysis by Tim Mooney).
	+ fix build on cygwin after recent ticlib/termlib changes, i.e.,
	  + adjust TINFO_SUFFIX value to work with cygwin's dll naming
	  + revert a change from 20070303 which commented out dependency of
	    SHLIB_LIST in form/menu/panel/c++ libraries.
	+ fix initialization of ripoff stack pointer (cf: 20070421).

20070421
	+ move most static variables into structures _nc_globals and
	  _nc_prescreen, to simplify storage.
	+ add/use configure script macro CF_SIG_ATOMIC_T, use the corresponding
	  type for data manipulated by signal handlers (prompted by comments
	  in mailing.openbsd.bugs newsgroup).
	+ modify CF_WITH_LIBTOOL to allow one to pass options such as -static
	  to the libtool create- and link-operations.

20070414
	+ fix whitespace in curs_opaque.3x which caused a spurious ';' in
	  the installed aliases (report by Peter Santoro).
	+ fix configure script to not try to generate adacurses-config when
	  Ada95 tree is not built.

20070407
	+ add man/curs_legacy.3x, man/curs_opaque.3x
	+ fix acs_map binding for Ada95 when --enable-reentrant is used.
	+ add adacurses-config to the Ada95 install, based on version from
	  FreeBSD port, in turn by Juergen Pfeifer in 2000 (prompted by
	  comment on comp.lang.ada newsgroup).
	+ fix includes in c++ binding to build with Intel compiler
	  (cf: 20061209).
	+ update install rule in Ada95 to use mkdirs.sh
	> other fixes prompted by inspection for Coverity report:
	+ modify ifdef's for c++ binding to use try/catch/throw statements
	+ add a null-pointer check in tack/ansi.c request_cfss()
	+ fix a memory leak in ncurses/base/wresize.c
	+ corrected check for valid memu/meml capabilities in
	  progs/dump_entry.c when handling V_HPUX case.
	> fixes based on Coverity report:
	+ remove dead code in test/bs.c
	+ remove dead code in test/demo_defkey.c
	+ remove an unused assignment in progs/infocmp.c
	+ fix a limit check in tack/ansi.c tools_charset()
	+ fix tack/ansi.c tools_status() to perform the VT320/VT420
	  tests in request_cfss().  The function had exited too soon.
	+ fix a memory leak in tic.c's make_namelist()
	+ fix a couple of places in tack/output.c which did not check for EOF.
	+ fix a loop-condition in test/bs.c
	+ add index checks in lib_color.c for color palettes
	+ add index checks in progs/dump_entry.c for version_filter() handling
	  of V_BSD case.
	+ fix a possible null-pointer dereference in copywin()
	+ fix a possible null-pointer dereference in waddchnstr()
	+ add a null-pointer check in _nc_expand_try()
	+ add a null-pointer check in tic.c's make_namelist()
	+ add a null-pointer check in _nc_expand_try()
	+ add null-pointer checks in test/cardfile.c
	+ fix a double-free in ncurses/tinfo/trim_sgr0.c
	+ fix a double-free in ncurses/base/wresize.c
	+ add try/catch block to c++/cursesmain.cc

20070331
	+ modify Ada95 binding to build with --enable-reentrant by wrapping
	  global variables (bug: acs_map does not yet work).
	+ modify Ada95 binding to use the new access-functions, allowing it
	  to build/run when NCURSES_OPAQUE is set.
	+ add access-functions and macros to return properties of the WINDOW
	  structure, e.g., when NCURSES_OPAQUE is set.
	+ improved install-sh's quoting.
	+ use mkdirs.sh rather than mkinstalldirs, e.g., to use fixes from
	  other programs.

20070324
	+ eliminate part of the direct use of WINDOW data from Ada95 interface.
	+ fix substitutions for termlib filename to make configure option
	  --enable-reentrant work with --with-termlib.
	+ change a constructor for NCursesWindow to allow compiling with
	  NCURSES_OPAQUE set, since we cannot pass a reference to
	  an opaque pointer.

20070317
	+ ignore --with-chtype=unsigned since unsigned is always added to
	  the type in curses.h; do the same for --with-mmask-t.
	+ change warning regarding --enable-ext-colors and wide-character
	  in the configure script to an error.
	+ tweak error message in CF_WITH_LIBTOOL to distinguish other programs
	  such as Darwin's libtool program (report by Michail Vidiassov)
	+ modify edit_man.sh to allow for multiple substitutions per line.
	+ set locale in misc/ncurses-config.in since it uses a range
	+ change permissions libncurses++.a install (report by Michail
	  Vidiassov).
	+ corrected length of temporary buffer in wide-character version
	  of set_field_buffer() (related to report by Bryan Christ).

20070311
	+ fix mk-1st.awk script install_shlib() function, broken in 20070224
	  changes for cygwin (report by  Michail Vidiassov).

20070310
	+ increase size of array in _nc_visbuf2n() to make "tic -v" work
	  properly in its similar_sgr() function (report/analysis by Peter
	  Santoro).
	+ add --enable-reentrant configure option for ongoing changes to
	  implement a reentrant version of ncurses:
	  + libraries are suffixed with "t"
	  + wrap several global variables (curscr, newscr, stdscr, ttytype,
	    COLORS, COLOR_PAIRS, COLS, ESCDELAY, LINES and TABSIZE) as
	    functions returning values stored in SCREEN or cur_term.
	  + move some initialization (LINES, COLS) from lib_setup.c,
	    i.e., setupterm() to _nc_setupscreen(), i.e., newterm().

20070303
	+ regenerated html documentation.
	+ add NCURSES_OPAQUE symbol to curses.h, will use to make structs
	  opaque in selected configurations.
	+ move the chunk in lib_acs.c which resets acs capabilities when
	  running on a terminal whose locale interferes with those into
	  _nc_setupscreen(), so the libtinfo/libtinfow files can be made
	  identical (requested by Miroslav Lichvar).
	+ do not use configure variable SHLIB_LIBS for building libraries
	  outside the ncurses directory, since that symbol is customized
	  only for that directory, and using it introduces an unneeded
	  dependency on libdl (requested by Miroslav Lichvar).
	+ modify mk-1st.awk so the generated makefile rules for linking or
	  installing shared libraries do not first remove the library, in
	  case it is in use, e.g., libncurses.so by /bin/sh (report by Jeff
	  Chua).
	+ revised section "Using NCURSES under XTERM" in ncurses-intro.html
	  (prompted by newsgroup comment by Nick Guenther).

20070224
	+ change internal return codes of _nc_wgetch() to check for cases
	  where KEY_CODE_YES should be returned, e.g., if a KEY_RESIZE was
	  ungetch'd, and read by wget_wch().
	+ fix static-library build broken in 20070217 changes to remove "-ldl"
	  (report by Miroslav Lichvar).
	+ change makefile/scripts for cygwin to allow building termlib.
	+ use Form_Hook in manpages to match form.h
	+ use Menu_Hook in manpages, as well as a few places in menu.h
	+ correct form- and menu-manpages to use specific Field_Options,
	  Menu_Options and Item_Options types.
	+ correct prototype for _tracechar() in manpage (cf: 20011229).
	+ correct prototype for wunctrl() in manpage.

20070217
	+ fixes for $(TICS_LIST) in ncurses/Makefile (report by Miroslav
	  Lichvar).
	+ modify relinking of shared libraries to apply only when rpath is
	  enabled, and add --disable-relink option which can be used to
	  disable the feature altogether (reports by Michail Vidiassov,
	  Adam J Richter).
	+ fix --with-termlib option for wide-character configuration, stripping
	  the "w" suffix in one place (report by Miroslav Lichvar).
	+ remove "-ldl" from some library lists to reduce dependencies in
	  programs (report by Miroslav Lichvar).
	+ correct description of --enable-signed-char in configure --help
	  (report by Michail Vidiassov).
	+ add pattern for GNU/kFreeBSD configuration to CF_XOPEN_SOURCE,
	  which matches an earlier change to CF_SHARED_OPTS, from xterm #224
	  fixes.
	+ remove "${DESTDIR}" from -install_name option used for linking
	  shared libraries on Darwin (report by Michail Vidiassov).

20070210
	+ add test/inchs.c, test/inch_wide.c, to test win_wchnstr().
	+ remove libdl from library list for termlib (report by Miroslav
	  Lichvar).
	+ fix configure.in to allow --without-progs --with-termlib (patch by
	  Miroslav Lichvar).
	+ modify win_wchnstr() to ensure that only a base cell is returned
	  for each multi-column character (prompted by report by Wei Kong
	  regarding change in mvwin_wch() cf: 20041023).

20070203
	+ modify fix_wchnstr() in form library to strip attributes (and color)
	  from the cchar_t array (field cells) read from a field's window.
	  Otherwise, when copying the field cells back to the window, the
	  associated color overrides the field's background color (report by
	  Ricardo Cantu).
	+ improve tracing for form library, showing created forms, fields, etc.
	+ ignore --enable-rpath configure option if --with-shared was omitted.
	+ add _nc_leaks_tinfo(), _nc_free_tic(), _nc_free_tinfo() entrypoints
	  to allow leak-checking when both tic- and tinfo-libraries are built.
	+ drop CF_CPP_VSCAN_FUNC macro from configure script, since C++ binding
	  no longer relies on it.
	+ disallow combining configure script options --with-ticlib and
	  --enable-termcap (report by Rong-En Fan).
	+ remove tack from ncurses tree.

20070128
	+ fix typo in configure script that broke --with-termlib option
	  (report by Rong-En Fan).

20070127
	+ improve fix for FreeBSD gnu/98975, to allow for null pointer passed
	  to tgetent() (report by Rong-en Fan).
	+ update tack/HISTORY and tack/README to tell how to build it after
	  it is removed from the ncurses tree.
	+ fix configure check for libtool's version to trim blank lines
	  (report by sci-fi@hush.ai).
	+ review/eliminate other original-file artifacts in cursesw.cc, making
	  its license consistent with ncurses.
	+ use ncurses vw_scanw() rather than reading into a fixed buffer in
	  the c++ binding for scanw() methods (prompted by report by Nuno Dias).
	+ eliminate fixed-buffer vsprintf() calls in c++ binding.

20070120
	+ add _nc_leaks_tic() to separate leak-checking of tic library from
	  term/ncurses libraries, and thereby eliminate a library dependency.
	+ fix test/mk-test.awk to ignore blank lines.
	+ correct paths in include/headers, for --srcdir (patch by Miroslav
	  Lichvar).

20070113
	+ add a break-statement in misc/shlib to ensure that it exits on the
	  _first_ matched directory (report by Paul Novak).
	+ add tack/configure, which can be used to build tack outside the
	  ncurses build-tree.
	+ add --with-ticlib option, to build/install the tic-support functions
	  in a separate library (suggested by Miroslav Lichvar).

20070106
	+ change MKunctrl.awk to reduce relocation table for unctrl.o
	+ change MKkeyname.awk to reduce relocation table for keyname.o
	  (patch by Miroslav Lichvar).

20061230
	+ modify configure check for libtool's version to trim blank lines
	  (report by sci-fi@hush.ai).
	+ modify some modules to allow them to be reentrant if _REENTRANT is
	  defined: lib_baudrate.c, resizeterm.c (local data only)
	+ eliminate static data from some modules: add_tries.c, hardscroll.c,
	  lib_ttyflags.c, lib_twait.c
	+ improve manpage install to add aliases for the transformed program
	  names, e.g., from --program-prefix.
	+ used linklint to verify links in the HTML documentation, made fixes
	  to manpages as needed.
	+ fix a typo in curs_mouse.3x (report by William McBrine).
	+ fix install-rule for ncurses5-config to make the bin-directory.

20061223
	+ modify configure script to omit the tic (terminfo compiler) support
	  from ncurses library if --without-progs option is given.
	+ modify install rule for ncurses5-config to do this via "install.libs"
	+ modify shared-library rules to allow FreeBSD 3.x to use rpath.
	+ update config.guess, config.sub

20061217 5.6 release for upload to ftp.gnu.org

20061217
	+ add ifdef's for <wctype.h> for HPUX, which has the corresponding
	  definitions in <wchar.h>.
	+ revert the va_copy() change from 20061202, since it was neither
	  correct nor portable.
	+ add $(LOCAL_LIBS) definition to progs/Makefile.in, needed for
	  rpath on Solaris.
	+ ignore wide-acs line-drawing characters that wcwidth() claims are
	  not one-column.  This is a workaround for Solaris' broken locale
	  support.

20061216
	+ modify configure --with-gpm option to allow it to accept a parameter,
	  i.e., the name of the dynamic GPM library to load via dlopen()
	  (requested by Bryan Henderson).
	+ add configure option --with-valgrind, changes from vile.
	+ modify configure script AC_TRY_RUN and AC_TRY_LINK checks to use
	  'return' in preference to 'exit()'.

20061209
	+ change default for --with-develop back to "no".
	+ add XTABS to tracing of TTY bits.
	+ updated autoconf patch to ifdef-out the misfeature which declares
	  exit() for configure tests.  This fixes a redefinition warning on
	  Solaris.
	+ use ${CC} rather than ${LD} in shared library rules for IRIX64,
	  Solaris to help ensure that initialization sections are provided for
	  extra linkage requirements, e.g., of C++ applications (prompted by
	  comment by Casper Dik in newsgroup).
	+ rename "$target" in CF_MAN_PAGES to make it easier to distinguish
	  from the autoconf predefined symbol.  There was no conflict,
	  since "$target" was used only in the generated edit_man.sh file,
	  but SuSE's rpm package contains a patch.

20061202
	+ update man/term.5 to reflect extended terminfo support and hashed
	  database configuration.
	+ updates for test/configure script.
	+ adapted from SuSE rpm package:
	  + remove long-obsolete workaround for broken-linker which declared
	    cur_term in tic.c
	  + improve error recovery in PUTC() macro when wcrtomb() does not
	    return usable results for an 8-bit character.
	+ patches from rpm package (SuSE):
	  + use va_copy() in extra varargs manipulation for tracing version
	    of printw, etc.
	  + use a va_list rather than a null in _nc_freeall()'s call to
	    _nc_printf_string().
	+ add some see-also references in manpages to show related
	  wide-character functions (suggested by Claus Fischer).

20061125
	+ add a check in lib_color.c to ensure caller does not increase COLORS
	  above max_colors, which is used as an array index (discussion with
	  Simon Sasburg).
	+ add ifdef's allowing ncurses to be built with tparm() using either
	  varargs (the existing status), or using a fixed-parameter list (to
	  match X/Open).

20061104
	+ fix redrawing of windows other than stdscr using wredrawln() by
	  touching the corresponding rows in curscr (discussion with Dan
	  Gookin).
	+ add test/redraw.c
	+ add test/echochar.c
	+ review/cleanup manpage descriptions of error-returns for form- and
	  menu-libraries (prompted by FreeBSD docs/46196).

20061028
	+ add AUTHORS file -TD
	+ omit the -D options from output of the new config script --cflags
	  option (suggested by Ralf S Engelschall).
	+ make NCURSES_INLINE unconditionally defined in curses.h

20061021
	+ revert change to accommodate bash 3.2, since that breaks other
	  platforms, e.g., Solaris.
	+ minor fixes to NEWS file to simplify scripting to obtain list of
	  contributors.
	+ improve some shared-library configure scripting for Linux, FreeBSD
	  and NetBSD to make "--with-shlib-version" work.
	+ change configure-script rules for FreeBSD shared libraries to allow
	  for rpath support in versions past 3.
	+ use $(DESTDIR) in makefile rules for installing/uninstalling the
	  package config script (reports/patches by Christian Wiese,
	  Ralf S Engelschall).
	+ fix a warning in the configure script for NetBSD 2.0, working around
	  spurious blanks embedded in its ${MAKEFLAGS} symbol.
	+ change test/Makefile to simplify installing test programs in a
	  different directory when --enable-rpath is used.

20061014
	+ work around bug in bash 3.2 by adding extra quotes (Jim Gifford).
	+ add/install a package config script, e.g., "ncurses5-config" or
	  "ncursesw5-config", according to configuration options.

20061007
	+ add several GNU Screen terminfo variations with 16- and 256-colors,
	  and status line (Alain Bench).
	+ change the way shared libraries (other than libtool) are installed.
	  Rather than copying the build-tree's libraries, link the shared
	  objects into the install directory.  This makes the --with-rpath
	  option work except with $(DESTDIR) (cf: 20000930).

20060930
	+ fix ifdef in c++/internal.h for QNX 6.1
	+ test-compiled with (old) egcs-1.1.2, modified configure script to
	  not unset the $CXX and related variables which would prevent this.
	+ fix a few terminfo.src typos exposed by improvements to "-f" option.
	+ improve infocmp/tic "-f" option formatting.

20060923
	+ make --disable-largefile option work (report by Thomas M Ott).
	+ updated html documentation.
	+ add ka2, kb1, kb3, kc2 to vt220-keypad as an extension -TD
	+ minor improvements to rxvt+pcfkeys -TD

20060916
	+ move static data from lib_mouse.c into SCREEN struct.
	+ improve ifdef's for _POSIX_VDISABLE in tset to work with Mac OS X
	  (report by Michail Vidiassov).
	+ modify CF_PATH_SYNTAX to ensure it uses the result from --prefix
	  option (from lynx changes) -TD
	+ adapt AC_PROG_EGREP check, noting that this is likely to be another
	  place aggravated by POSIXLY_CORRECT.
	+ modify configure check for awk to ensure that it is found (prompted
	  by report by Christopher Parker).
	+ update config.sub

20060909
	+ add kon, kon2 and jfbterm terminfo entry (request by Till Maas) -TD
	+ remove invis capability from klone+sgr, mainly used by linux entry,
	  since it does not really do this -TD

20060903
	+ correct logic in wadd_wch() and wecho_wch(), which did not guard
	  against passing the multi-column attribute into a call on waddch(),
	  e.g., using data returned by win_wch() (cf: 20041023)
	  (report by Sadrul H Chowdhury).

20060902
	+ fix kterm's acsc string -TD
	+ fix for change to tic/infocmp in 20060819 to ensure no blank is
	  embedded into a termcap description.
	+ workaround for 20050806 ifdef's change to allow visbuf.c to compile
	  when using --with-termlib --with-trace options.
	+ improve tgetstr() by making the return value point into the user's
	  buffer, if provided (patch by Miroslav Lichvar (see Redhat #202480)).
	+ correct libraries needed for foldkeys (report by Stanislav Ievlev)

20060826
	+ add terminfo entries for xfce terminal (xfce) and multi gnome
	  terminal (mgt) -TD
	+ add test/foldkeys.c

20060819
	+ modify tic and infocmp to avoid writing trailing blanks on terminfo
	  source output (Debian #378783).
	+ modify configure script to ensure that if the C compiler is used
	  rather than the loader in making shared libraries, the $(CFLAGS)
	  variable is also used (Redhat #199369).
	+ port hashed-db code to db2 and db3.
	+ fix a bug in tgetent() from 20060625 and 20060715 changes
	  (patch/analysis by Miroslav Lichvar (see Redhat #202480)).

20060805
	+ updated xterm function-keys terminfo to match xterm #216 -TD
	+ add configure --with-hashed-db option (tested only with FreeBSD 6.0,
	  e.g., the db 1.8.5 interface).

20060729
	+ modify toe to access termcap data, e.g., via cgetent() functions,
	  or as a text file if those are not available.
	+ use _nc_basename() in tset to improve $SHELL check for csh/sh.
	+ modify _nc_read_entry() and _nc_read_termcap_entry() so infocmp,
	  can access termcap data when the terminfo database is disabled.

20060722
	+ widen the test for xterm kmous a little to allow for other strings
	  than \E[M, e.g., for xterm-sco functionality in xterm.
	+ update xterm-related terminfo entries to match xterm patch #216 -TD
	+ update config.guess, config.sub

20060715
	+ fix for install-rule in Ada95 to add terminal_interface.ads
	  and terminal_interface.ali (anonymous posting in comp.lang.ada).
	+ correction to manpage for getcchar() (report by William McBrine).
	+ add test/chgat.c
	+ modify wchgat() to mark updated cells as changed so a refresh will
	  repaint those cells (comments by Sadrul H Chowdhury and William
	  McBrine).
	+ split up dependency of names.c and codes.c in ncurses/Makefile to
	  work with parallel make (report/analysis by Joseph S Myers).
	+ suppress a warning message (which is ignored) for systems without
	  an ldconfig program (patch by Justin Hibbits).
	+ modify configure script --disable-symlinks option to allow one to
	  disable symlink() in tic even when link() does not work (report by
	  Nigel Horne).
	+ modify MKfallback.sh to use tic -x when constructing fallback tables
	  to allow extended capabilities to be retrieved from a fallback entry.
	+ improve leak-checking logic in tgetent() from 20060625 to ensure that
	  it does not free the current screen (report by Miroslav Lichvar).

20060708
	+ add a check for _POSIX_VDISABLE in tset (NetBSD #33916).
	+ correct _nc_free_entries() and related functions used for memory leak
	  checking of tic.

20060701
	+ revert a minor change for magic-cookie support from 20060513, which
	  caused unexpected reset of attributes, e.g., when resizing test/view
	  in color mode.
	+ note in clear manpage that the program ignores command-line
	  parameters (prompted by Debian #371855).
	+ fixes to make lib_gen.c build properly with changes to the configure
	  --disable-macros option and NCURSES_NOMACROS (cf:  20060527)
	+ update/correct several terminfo entries -TD
	+ add some notes regarding copyright to terminfo.src -TD

20060625
	+ fixes to build Ada95 binding with gnat-4.1.0
	+ modify read_termtype() so the term_names data is always allocated as
	  part of the str_table, a better fix for a memory leak (cf: 20030809).
	+ reduce memory leaks in repeated calls to tgetent() by remembering the
	  last TERMINAL* value allocated to hold the corresponding data and
	  freeing that if the tgetent() result buffer is the same as the
	  previous call (report by "Matt" for FreeBSD gnu/98975).
	+ modify tack to test extended capability function-key strings.
	+ improved gnome terminfo entry (GenToo #122566).
	+ improved xterm-256color terminfo entry (patch by Alain Bench).

20060617
	+ fix two small memory leaks related to repeated tgetent() calls
	  with TERM=screen (report by "Matt" for FreeBSD gnu/98975).
	+ add --enable-signed-char to simplify Debian package.
	+ reduce name-pollution in term.h by removing #define's for HAVE_xxx
	  symbols.
	+ correct typo in curs_terminfo.3x (Debian #369168).

20060603
	+ enable the mouse in test/movewindow.c
	+ improve a limit-check in frm_def.c (John Heasley).
	+ minor copyright fixes.
	+ change configure script to produce test/Makefile from data file.

20060527
	+ add a configure option --enable-wgetch-events to enable
	  NCURSES_WGETCH_EVENTS, and correct the associated loop-logic in
	  lib_twait.c (report by Bernd Jendrissek).
	+ remove include/nomacros.h from build, since the ifdef for
	  NCURSES_NOMACROS makes that obsolete.
	+ add entrypoints for some functions which were only provided as macros
	  to make NCURSES_NOMACROS ifdef work properly:  getcurx(), getcury(),
	  getbegx(), getbegy(), getmaxx(), getmaxy(), getparx() and getpary(),
	  wgetbkgrnd().
	+ provide ifdef for NCURSES_NOMACROS which suppresses most macro
	  definitions from curses.h, i.e., where a macro is defined to override
	  a function to improve performance.  Allowing a developer to suppress
	  these definitions can simplify some application (discussion with
	  Stanislav Ievlev).
	+ improve description of memu/meml in terminfo manpage.

20060520
	+ if msgr is false, reset video attributes when doing an automargin
	  wrap to the next line.  This makes the ncurses 'k' test work properly
	  for hpterm.
	+ correct caching of keyname(), which was using only half of its table.
	+ minor fixes to memory-leak checking.
	+ make SCREEN._acs_map and SCREEN._screen_acs_map pointers rather than
	  arrays, making ACS_LEN less visible to applications (suggested by
	  Stanislav Ievlev).
	+ move chunk in SCREEN ifdef'd for USE_WIDEC_SUPPORT to the end, so
	  _screen_acs_map will have the same offset in both ncurses/ncursesw,
	  making the corresponding tinfo/tinfow libraries binary-compatible
	  (cf: 20041016, report by Stanislav Ievlev).

20060513
	+ improve debug-tracing for EmitRange().
	+ change default for --with-develop to "yes".  Add NCURSES_NO_HARD_TABS
	  and NCURSES_NO_MAGIC_COOKIE environment variables to allow runtime
	  suppression of the related hard-tabs and xmc-glitch features.
	+ add ncurses version number to top-level manpages, e.g., ncurses, tic,
	  infocmp, terminfo as well as form, menu, panel.
	+ update config.guess, config.sub
	+ modify ncurses.c to work around a bug in NetBSD 3.0 curses
	  (field_buffer returning null for a valid field).  The 'r' test
	  appears to not work with that configuration since the new_fieldtype()
	  function is broken in that implementation.

20060506
	+ add hpterm-color terminfo entry -TD
	+ fixes to compile test-programs with HPUX 11.23

20060422
	+ add copyright notices to files other than those that are generated,
	  data or adapted from pdcurses (reports by William McBrine, David
	  Taylor).
	+ improve rendering on hpterm by not resetting attributes at the end
	  of doupdate() if the terminal has the magic-cookie feature (report
	  by Bernd Rieke).
	+ add 256color variants of terminfo entries for programs which are
	  reported to implement this feature -TD

20060416
	+ fix typo in change to NewChar() macro from 20060311 changes, which
	  broke tab-expansion (report by Frederic L W Meunier).

20060415
	+ document -U option of tic and infocmp.
	+ modify tic/infocmp to suppress smacs/rmacs when acsc is suppressed
	  due to size limit, e.g., converting to termcap format.  Also
	  suppress them if the output format does not contain acsc and it
	  was not VT100-like, i.e., a one-one mapping (Novell #163715).
	+ add configure check to ensure that SIGWINCH is defined on platforms
	  such as OS X which exclude that when _XOPEN_SOURCE, etc., are
	  defined (report by Nicholas Cole)

20060408
	+ modify write_object() to not write coincidental extensions of an
	  entry made due to it being referenced in a use= clause (report by
	  Alain Bench).
	+ another fix for infocmp -i option, which did not ensure that some
	  escape sequences had comparable prefixes (report by Alain Bench).

20060401
	+ improve discussion of init/reset in terminfo and tput manpages
	  (report by Alain Bench).
	+ use is3 string for a fallback of rs3 in the reset program; it was
	  using is2 (report by Alain Bench).
	+ correct logic for infocmp -i option, which did not account for
	  multiple digits in a parameter (cf: 20040828) (report by Alain
	  Bench).
	+ move _nc_handle_sigwinch() to lib_setup.c to make --with-termlib
	  option work after 20060114 changes (report by Arkadiusz Miskiewicz).
	+ add copyright notices to test-programs as needed (report by William
	  McBrine).

20060318
	+ modify ncurses.c 'F' test to combine the wide-characters with color
	  and/or video attributes.
	+ modify test/ncurses to use CTL/Q or ESC consistently for exiting
	  a test-screen (some commands used 'x' or 'q').

20060312
	+ fix an off-by-one in the scrolling-region change (cf_ 20060311).

20060311
	+ add checks in waddchnstr() and wadd_wchnstr() to stop copying when
	  a null character is found (report by Igor Bogomazov).
	+ modify progs/Makefile.in to make "tput init" work properly with
	  cygwin, i.e., do not pass a ".exe" in the reference string used
	  in check_aliases (report by Samuel Thibault).
	+ add some checks to ensure current position is within scrolling
	  region before scrolling on a new line (report by Dan Gookin).
	+ change some NewChar() usage to static variables to work around
	  stack garbage introduced when cchar_t is not packed (Redhat #182024).

20060225
	+ workarounds to build test/movewindow with PDcurses 2.7.
	+ fix for nsterm-16color entry (patch by Alain Bench).
	+ correct a typo in infocmp manpage (Debian #354281).

20060218
	+ add nsterm-16color entry -TD
	+ updated mlterm terminfo entry -TD
	+ remove 970913 feature for copying subwindows as they are moved in
	  mvwin() (discussion with Bryan Christ).
	+ modify test/demo_menus.c to demonstrate moving a menu (both the
	  window and subwindow) using shifted cursor-keys.
	+ start implementing recursive mvwin() in movewindow.c (incomplete).
	+ add a fallback definition for GCC_PRINTFLIKE() in test.priv.h,
	  for movewindow.c (report by William McBrine).
	+ add help-message to test/movewindow.c

20060211
	+ add test/movewindow.c, to test mvderwin().
	+ fix ncurses soft-key test so color changes are shown immediately
	  rather than delayed.
	+ modify ncurses soft-key test to hide the keys when exiting the test
	  screen.
	+ fixes to build test programs with PDCurses 2.7, e.g., its headers
	  rely on autoconf symbols, and it declares stubs for nonfunctional
	  terminfo and termcap entrypoints.

20060204
	+ improved test/configure to build test/ncurses on HPUX 11 using the
	  vendor curses.
	+ documented ALTERNATE CONFIGURATIONS in the ncurses manpage, for the
	  benefit of developers who do not read INSTALL.

20060128
	+ correct form library Window_To_Buffer() change (cf:  20040516), which
	  should ignore the video attributes (report by Ricardo Cantu).

20060121
	+ minor fixes to xmc-glitch experimental code:
	  + suppress line-drawing
	  + implement max_attributes
	  tested with xterm.
	+ minor fixes for the database iterator.
	+ fix some buffer limits in c++ demo (comment by Falk Hueffner in
	  Debian #348117).

20060114
	+ add toe -a option, to show all databases.  This uses new private
	  interfaces in the ncurses library for iterating through the list of
	  databases.
	+ fix toe from 20000909 changes which made it not look at
	  $HOME/.terminfo
	+ make toe's -v option parameter optional as per manpage.
	+ improve SIGWINCH handling by postponing its effect during newterm(),
	  etc., when allocating screens.

20060111
	+ modify wgetnstr() to return KEY_RESIZE if a sigwinch occurs.  Use
	  this in test/filter.c
	+ fix an error in filter() modification which caused some applications
	  to fail.

20060107
	+ check if filter() was called when getting the screensize.  Keep it
	  at 1 if so (based on Redhat #174498).
	+ add extension nofilter().
	+ refined the workaround for ACS mapping.
	+ make ifdef's consistent in curses.h for the extended colors so the
	  header file can be used for the normal curses library.  The header
	  file installed for extended colors is a variation of the
	  wide-character configuration (report by Frederic L W Meunier).

20051231
	+ add a workaround to ACS mapping to allow applications such as
	  test/blue.c to use the "PC ROM" characters by masking them with
	  A_ALTCHARSET.  This worked up til 5.5, but was lost in the revision
	  of legacy coding (report by Michael Deutschmann).
	+ add a null-pointer check in the wide-character version of
	  calculate_actual_width() (report by Victor Julien).
	+ improve test/ncurses 'd' (color-edit) test by allowing the RGB
	  values to be set independently (patch by William McBrine).
	+ modify test/configure script to allow building test programs with
	  PDCurses/X11.
	+ modified test programs to allow some to work with NetBSD curses.
	  Several do not because NetBSD curses implements a subset of X/Open
	  curses, and also lacks much of SVr4 additions.  But it's enough for
	  comparison.
	+ update config.guess and config.sub

20051224
	+ use BSD-specific fix for return-value from cgetent() from CVS where
	  an unknown terminal type would be reportd as "database not found".
	+ make tgetent() return code more readable using new symbols
	  TGETENT_YES, etc.
	+ remove references to non-existent "tctest" program.
	+ remove TESTPROGS from progs/Makefile.in (it was referring to code
	  that was never built in that directory).
	+ typos in curs_addchstr.3x, some doc files (noticed in OpenBSD CVS).

20051217
	+ add use_legacy_coding() function to support lynx's font-switching
	  feature.
	+ fix formatting in curs_termcap.3x (report by Mike Frysinger).
	+ modify MKlib_gen.sh to change preprocessor-expanded _Bool back to
	  bool.

20051210
	+ extend test/ncurses.c 's' (overlay window) test to exercise overlay(),
	  overwrite() and copywin() with different combinations of colors and
	  attributes (including background color) to make it easy to see the
	  effect of the different functions.
	+ corrections to menu/m_global.c for wide-characters (report by
	  Victor Julien).

20051203
	+ add configure option --without-dlsym, allowing developers to
	  configure GPM support without using dlsym() (discussion with Michael
	  Setzer).
	+ fix wins_nwstr(), which did not handle single-column non-8bit codes
	  (Debian #341661).

20051126
	+ move prototypes for wide-character trace functions from curses.tail
	  to curses.wide to avoid accidental reference to those if
	  _XOPEN_SOURCE_EXTENDED is defined without ensuring that <wchar.h> is
	  included.
	+ add/use NCURSES_INLINE definition.
	+ change some internal functions to use int/unsigned rather than the
	  short equivalents.

20051119
	+ remove a redundant check in lib_color.c (Debian #335655).
	+ use ld's -search_paths_first option on Darwin to work around odd
	  search rules on that platform (report by Christian Gennerat, analysis
	  by Andrea Govoni).
	+ remove special case for Darwin in CF_XOPEN_SOURCE configure macro.
	+ ignore EINTR in tcgetattr/tcsetattr calls (Debian #339518).
	+ fix several bugs in test/bs.c (patch by Stephen Lindholm).

20051112
	+ other minor fixes to cygwin based on tack -TD
	+ correct smacs in cygwin (Debian #338234, report by Baurzhan
	  Ismagulov, who noted that it was fixed in Cygwin).

20051029
	+ add shifted up/down arrow codes to xterm-new as kind/kri strings -TD
	+ modify wbkgrnd() to avoid clearing the A_CHARTEXT attribute bits
	  since those record the state of multicolumn characters (Debian
	  #316663).
	+ modify werase to clear multicolumn characters that extend into
	  a derived window (Debian #316663).

20051022
	+ move assignment from environment variable ESCDELAY from initscr()
	  down to newterm() so the environment variable affects timeouts for
	  terminals opened with newterm() as well.
	+ fix a memory leak in keyname().
	+ add test/demo_altkeys.c
	+ modify test/demo_defkey.c to exit from loop via 'q' to allow
	  leak-checking, as well as fix a buffer size in winnstr() call.

20051015
	+ correct order of use-clauses in rxvt-basic entry which made codes for
	  f1-f4 vt100-style rather than vt220-style (report by Gabor Z Papp).
	+ suppress configure check for gnatmake if Ada95/Makefile.in is not
	  found.
	+ correct a typo in configure --with-bool option for the case where
	  --without-cxx is used (report by Daniel Jacobowitz).
	+ add a note to INSTALL's discussion of --with-normal, pointing out
	  that one may wish to use --without-gpm to ensure a completely
	  static link (prompted by report by Felix von Leitner).

20051010 5.5 release for upload to ftp.gnu.org

20051008
	+ document in demo_forms.c some portability issues.

20051001
	+ document side-effect of werase() which sets the cursor position.
	+ save/restore the current position in form field editing to make
	  overlay mode work.

20050924
	+ correct header dependencies in progs, allowing parallel make (report
	  by Daniel Jacobowitz).
	+ modify CF_BUILD_CC to ensure that pre-setting $BUILD_CC overrides
	  the configure check for --with-build-cc (report by Daniel Jacobowitz).
	+ modify CF_CFG_DEFAULTS to not use /usr as the default prefix for
	  NetBSD.
	+ update config.guess and config.sub from
		http://subversions.gnu.org/cgi-bin/viewcvs/config/config/

20050917
	+ modify sed expression which computes path for /usr/lib/terminfo
	  symbolic link in install to ensure that it does not change unexpected
	  levels of the path (Gentoo #42336).
	+ modify default for --disable-lp64 configure option to reduce impact
	  on existing 64-bit builds.  Enabling the _LP64 option may change the
	  size of chtype and mmask_t.  However, for ABI 6, it is enabled by
	  default (report by Mike Frysinger).
	+ add configure script check for --enable-ext-mouse, bump ABI to 6 by
	  default if it is used.
	+ improve configure script logic for bumping ABI to omit this if the
	  --with-abi-version option was used.
	+ update address for Free Software Foundation in tack's source.
	+ correct wins_wch(), which was not marking the filler-cells of
	  multi-column characters (cf:  20041023).

20050910
	+ modify mouse initialization to ensure that Gpm_Open() is called only
	  once.  Otherwise GPM gets confused in its initialization of signal
	  handlers (Debian #326709).

20050903
	+ modify logic for backspacing in a multiline form field to ensure that
	  it works even when the preceding line is full (report by Frank van
	  Vugt).
	+ remove comment about BUGS section of ncurses manpage (Debian #325481)

20050827
	+ document some workarounds for shared and libtool library
	  configurations in INSTALL (see --with-shared and --with-libtool).
	+ modify CF_GCC_VERSION and CF_GXX_VERSION macros to accommodate
	  cross-compilers which emit the platform name in their version
	  message, e.g.,
		arm-sa1100-linux-gnu-g++ (GCC) 4.0.1
	  (report by Frank van Vugt).

20050820
	+ start updating documentation for upcoming 5.5 release.
	+ fix to make libtool  and libtinfo work together again (cf: 20050122).
	+ fixes to allow building traces into libtinfo
	+ add debug trace to tic that shows if/how ncurses will write to the
	  lower corner of a terminal's screen.
	+ update llib-l* files.

20050813
	+ modify initializers in c++ binding to build with old versions of g++.
	+ improve special case for 20050115 repainting fix, ensuring that if
	  the first changed cell is not a character that the range to be
	  repainted is adjusted to start at a character's beginning (Debian
	  #316663).

20050806
	+ fixes to build on QNX 6.1
	+ improve configure script checks for Intel 9.0 compiler.
	+ remove #include's for libc.h (obsolete).
	+ adjust ifdef's in curses.priv.h so that when cross-compiling to
	  produce comp_hash and make_keys, no dependency on wchar.h is needed.
	  That simplifies the build-cppflags (report by Frank van Vugt).
	+ move modules related to key-binding into libtinfo to fix linkage
	  problem caused by 20050430 changes to MKkeyname.sh (report by
	  Konstantin Andreev).

20050723
	+ updates/fixes for configure script macros from vile -TD
	+ make prism9's sgr string agree with the rest of the terminfo -TD
	+ make vt220's sgr0 string consistent with sgr string, do this for
	  several related cases -TD
	+ improve translation to termcap by filtering the 'me' (sgr0) strings
	  as in the runtime call to tgetent() (prompted by a discussion with
	  Thomas Klausner).
	+ improve tic check for sgr0 versus sgr(0), to help ensure that sgr0
	  resets line-drawing.

20050716
	+ fix special cases for trimming sgr0 for hurd and vt220 (Debian
	  #318621).
	+ split-out _nc_trim_sgr0() from modifications made to tgetent(), to
	  allow it to be used by tic to provide information about the runtime
	  changes that would be made to sgr0 for termcap applications.
	+ modify make_sed.sh to make the group-name in the NAME section of
	  form/menu library manpage agree with the TITLE string when renaming
	  is done for Debian (Debian #78866).

20050702
	+ modify parameter type in c++ binding for insch() and mvwinsch() to
	  be consistent with underlying ncurses library (was char, is chtype).
	+ modify treatment of Intel compiler to allow _GNU_SOURCE to be defined
	  on Linux.
	+ improve configure check for nanosleep(), checking that it works since
	  some older systems such as AIX 4.3 have a nonworking version.

20050625
	+ update config.guess and config.sub from
		http://subversions.gnu.org/cgi-bin/viewcvs/config/config/
	+ modify misc/shlib to work in test-directory.
	+ suppress $suffix in misc/run_tic.sh when cross-compiling.  This
	  allows cross-compiles to use the host's tic program to handle the
	  "make install.data" step.
	+ improve description of $LINES and $COLUMNS variables in manpages
	  (prompted by report by Dave Ulrick).
	+ improve description of cross-compiling in INSTALL
	+ add NCURSES-Programming-HOWTO.html by Pradeep Padala
	  (see http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/).
	+ modify configure script to obtain soname for GPM library (discussion
	  with Daniel Jacobowitz).
	+ modify configure script so that --with-chtype option will still
	  compute the unsigned literals suffix for constants in curses.h
	  (report by Daniel Jacobowitz:
	+ patches from Daniel Jacobowitz:
	  + the man_db.renames entry for tack.1 was backwards.
	  + tack.1 had some 1m's that should have been 1M's.
	  + the section for curs_inwstr.3 was wrong.

20050619
	+ correction to --with-chtype option (report by Daniel Jacobowitz).

20050618
	+ move build-time edit_man.sh and edit_man.sed scripts to top directory
	  to simplify reusing them for renaming tack's manpage (prompted by a
	  review of Debian package).
	+ revert minor optimization from 20041030 (Debian #313609).
	+ libtool-specific fixes, tested with libtool 1.4.3, 1.5.0, 1.5.6,
	  1.5.10 and 1.5.18 (all work except as noted previously for the c++
	  install using libtool 1.5.0):
	  + modify the clean-rule in c++/Makefile.in to work with IRIX64 make
	    program.
	  + use $(LIBTOOL_UNINSTALL) symbol, overlooked in 20030830
	+ add configure options --with-chtype and --with-mmask-t, to allow
	  overriding of the non-LP64 model's use of the corresponding types.
	+ revise test for size of chtype (and mmask_t), which always returned
	  "long" due to an uninitialized variable (report by Daniel Jacobowitz).

20050611
	+ change _tracef's that used "%p" format for va_list values to ignore
	  that, since on some platforms those are not pointers.
	+ fixes for long-formats in printf's due to largefile support.

20050604
	+ fixes for termcap support:
	  + reset pointer to _nc_curr_token.tk_name when the input stream is
	    closed, which could point to free memory (cf: 20030215).
	  + delink TERMTYPE data which is used by the termcap reader, so that
	    extended names data will be freed consistently.
	  + free pointer to TERMTYPE data in _nc_free_termtype() rather than
	    its callers.
	  + add some entrypoints for freeing permanently allocated data via
	    _nc_freeall() when NO_LEAKS is defined.
	+ amend 20041030 change to _nc_do_color to ensure that optimization is
	  applied only when the terminal supports back_color_erase (bce).

20050528
	+ add sun-color terminfo entry -TD
	+ correct a missing assignment in c++ binding's method
	  NCursesPanel::UserPointer() from 20050409 changes.
	+ improve configure check for large-files, adding check for dirent64
	  from vile -TD
	+ minor change to configure script to improve linker options for the
	  Ada95 tree.

20050515
	+ document error conditions for ncurses library functions (report by
	  Stanislav Ievlev).
	+ regenerated html documentation for ada binding.
	  see ftp://ftp.invisible-island.net/ncurses/patches/gnathtml

20050507
	+ regenerated html documentation for manpages.
	+ add $(BUILD_EXEEXT) suffix to invocation of make_keys in
	  ncurses/Makefile (Gentoo #89772).
	+ modify c++/demo.cc to build with g++ -fno-implicit-templates option
	  (patch by Mike Frysinger).
	+ modify tic to filter out long extended names when translating to
	  termcap format.  Only two characters are permissible for termcap
	  capability names.

20050430
	+ modify terminfo entries xterm-new and rxvt to add strings for
	  shift-, control-cursor keys.
	+ workaround to allow c++ binding to compile with g++ 2.95.3, which
	  has a broken implementation of static_cast<> (patch by Jeff Chua).
	+ modify initialization of key lookup table so that if an extended
	  capability (tic -x) string is defined, and its name begins with 'k',
	  it will automatically be treated as a key.
	+ modify test/keynames.c to allow for the possibility of extended
	  key names, e.g., via define_key(), or via "tic -x".
	+ add test/demo_termcap.c to show the contents of given entry via the
	  termcap interface.

20050423
	+ minor fixes for vt100/vt52 entries -TD
	+ add configure option --enable-largefile
	+ corrected libraries used to build Ada95/gen/gen, found in testing
	  gcc 4.0.0.

20050416
	+ update config.guess, config.sub
	+ modify configure script check for _XOPEN_SOURCE, disable that on
	  Darwin whose header files have problems (patch by Chris Zubrzycki).
	+ modify form library Is_Printable_String() to use iswprint() rather
	  than wcwidth() for determining if a character is printable.  The
	  latter caused it to reject menu items containing non-spacing
	  characters.
	+ modify ncurses test program's F-test to handle non-spacing characters
	  by combining them with a reverse-video blank.
	+ review/fix several gcc -Wconversion warnings.

20050409
	+ correct an off-by-one error in m_driver() for mouse-clicks used to
	  position the mouse to a particular item.
	+ implement test/demo_menus.c
	+ add some checks in lib_mouse to ensure SP is set.
	+ modify C++ binding to make 20050403 changes work with the configure
	  --enable-const option.

20050403
	+ modify start_color() to return ERR if it cannot allocate memory.
	+ address g++ compiler warnings in C++ binding by adding explicit
	  member initialization, assignment operators and copy constructors.
	  Most of the changes simply preserve the existing semantics of the
	  binding, which can leak memory, etc., but by making these features
	  visible, it provides a framework for improving the binding.
	+ improve C++ binding using static_cast, etc.
	+ modify configure script --enable-warnings to add options to g++ to
	  correspond to the gcc --enable-warnings.
	+ modify C++ binding to use some C internal functions to make it
	  compile properly on Solaris (and other platforms).

20050327
	+ amend change from 20050320 to limit it to configurations with a
	  valid locale.
	+ fix a bug introduced in 20050320 which broke the translation of
	  nonprinting characters to uparrow form (report by Takahashi Tamotsu).

20050326
	+ add ifdef's for _LP64 in curses.h to avoid using wasteful 64-bits for
	  chtype and mmask_t, but add configure option --disable-lp64 in case
	  anyone used that configuration.
	+ update misc/shlib script to account for Mac OS X (report by Michail
	  Vidiassov).
	+ correct comparison for wrapping multibyte characters in
	  waddch_literal() (report by Takahashi Tamotsu).

20050320
	+ add -c and -w options to tset to allow user to suppress ncurses'
	  resizing of the terminal emulator window in the special case where it
	  is not able to detect the true size (report by Win Delvaux, Debian
	  #300419).
	+ modify waddch_nosync() to account for locale zn_CH.GBK, which uses
	  codes 128-159 as part of multibyte characters (report by Wang
	  WenRui, Debian #300512).

20050319
	+ modify ncurses.c 'd' test to make it work with 88-color
	  configuration, i.e., by implementing scrolling.
	+ improve scrolling in ncurses.c 'c' and 'C' tests, e.g., for 88-color
	  configuration.

20050312
	+ change tracemunch to use strict checking.
	+ modify ncurses.c 'p' test to test line-drawing within a pad.
	+ implement environment variable NCURSES_NO_UTF8_ACS to support
	  miscellaneous terminal emulators which ignore alternate character
	  set escape sequences when in UTF-8 mode.

20050305
	+ change NCursesWindow::err_handler() to a virtual function (request by
	  Steve Beal).
	+ modify fty_int.c and fty_num.c to handle wide characters (report by
	  Wolfgang Gutjahr).
	+ adapt fix for fty_alpha.c to fty_alnum.c, which also handled normal
	  and wide characters inconsistently (report by Wolfgang Gutjahr).
	+ update llib-* files to reflect internal interface additions/changes.

20050226
	+ improve test/configure script, adding tests for _XOPEN_SOURCE, etc.,
	  from lynx.
	+ add aixterm-16color terminfo entry -TD
	+ modified xterm-new terminfo entry to work with tgetent() changes -TD
	+ extended changes in tgetent() from 20040710 to allow the substring of
	  sgr0 which matches rmacs to be at the beginning of the sgr0 string
	  (request by Thomas Wolff).  Wolff says the visual effect in
	  combination with pre-20040710 ncurses is improved.
	+ fix off-by-one in winnstr() call which caused form field validation
	  of multibyte characters to ignore the last character in a field.
	+ correct logic in winsch() for inserting multibyte strings; the code
	  would clear cells after the insertion rather than push them to the
	  right (cf: 20040228).
	+ fix an inconsistency in Check_Alpha_Field() between normal and wide
	  character logic (report by Wolfgang Gutjahr).

20050219
	+ fix a bug in editing wide-characters in form library: deleting a
	  nonwide character modified the previous wide-character.
	+ update manpage to describe NCURSES_MOUSE_VERSION 2.
	+ correct manpage description of mouseinterval() (Debian #280687).
	+ add a note to default_colors.3x explaining why this extension was
	  added (Debian #295083).
	+ add traces to panel library.

20050212
	+ improve editing of wide-characters in form library:  left/right
	  cursor movement, and single-character deletions work properly.
	+ disable GPM mouse support when $TERM happens to be prefixed with
	  "xterm".  Gpm_Open() would otherwise assert that it can deal with
	  mouse events in this case.
	+ modify GPM mouse support so it closes the server connection when
	  the caller disables the mouse (report by Stanislav Ievlev).

20050205
	+ add traces for callback functions in form library.
	+ add experimental configure option --enable-ext-mouse, which defines
	  NCURSES_MOUSE_VERSION 2, and modifies the encoding of mouse events to
	  support wheel mice, which may transmit buttons 4 and 5.  This works
	  with xterm and similar X terminal emulators (prompted by question by
	  Andreas Henningsson, this is also related to Debian #230990).
	+ improve configure macros CF_XOPEN_SOURCE and CF_POSIX_C_SOURCE to
	  avoid redefinition warnings on cygwin.

20050129
	+ merge remaining development changes for extended colors (mostly
	  complete, does not appear to break other configurations).
	+ add xterm-88color.dat (part of extended colors testing).
	+ improve _tracedump() handling of color pairs past 96.
	+ modify return-value from start_color() to return OK if colors have
	  already been started.
	+ modify curs_color.3x list error conditions for init_pair(),
	  pair_content() and color_content().
	+ modify pair_content() to return -1 for consistency with init_pair()
	  if it corresponds to the default-color.
	+ change internal representation of default-color to allow application
	  to use color number 255.  This does not affect the total number of
	  color pairs which are allowed.
	+ add a top-level tags rule.

20050122
	+ add a null-pointer check in wgetch() in case it is called without
	  first calling initscr().
	+ add some null-pointer checks for SP, which is not set by libtinfo.
	+ modify misc/shlib to ensure that absolute pathnames are used.
	+ modify test/Makefile.in, etc., to link test programs only against the
	  libraries needed, e.g., omit form/menu/panel library for the ones
	  that are curses-specific.
	+ change SP->_current_attr to a pointer, adjust ifdef's to ensure that
	  libtinfo.so and libtinfow.so have the same ABI.  The reason for this
	  is that the corresponding data which belongs to the upper-level
	  ncurses library has a different size in each model (report by
	  Stanislav Ievlev).

20050115
	+ minor fixes to allow test-compiles with g++.
	+ correct column value shown in tic's warnings, which did not account
	  for leading whitespace.
	+ add a check in _nc_trans_string() for improperly ended strings, i.e.,
	  where a following line begins in column 1.
	+ modify _nc_save_str() to return a null pointer on buffer overflow.
	+ improve repainting while scrolling wide-character data (Eungkyu Song).

20050108
	+ merge some development changes to extend color capabilities.

20050101
	+ merge some development changes to extend color capabilities.
	+ fix manpage typo (FreeBSD report docs/75544).
	+ update config.guess, config.sub
	> patches for configure script (Albert Chin-A-Young):
	+ improved fix to make mbstate_t recognized on HPUX 11i (cf:
	  20030705), making vsscanf() prototype visible on IRIX64.  Tested for
	  on HP-UX 11i, Solaris 7, 8, 9, AIX 4.3.3, 5.2, Tru64 UNIX 4.0D, 5.1,
	  IRIX64 6.5, Redhat Linux 7.1, 9, and RHEL 2.1, 3.0.
	+ print the result of the --disable-home-terminfo option.
	+ use -rpath when compiling with SGI C compiler.

20041225
	+ add trace calls to remaining public functions in form and menu
	  libraries.
	+ fix check for numeric digits in test/ncurses.c 'b' and 'B' tests.
	+ fix typo in test/ncurses.c 'c' test from 20041218.

20041218
	+ revise test/ncurses.c 'c' color test to improve use for xterm-88color
	  and xterm-256color, added 'C' test using the wide-character color_set
	  and attr_set functions.

20041211
	+ modify configure script to work with Intel compiler.
	+ fix an limit-check in wadd_wchnstr() which caused labels in the
	  forms-demo to be one character short.
	+ fix typo in curs_addchstr.3x (Jared Yanovich).
	+ add trace calls to most functions in form and menu libraries.
	+ update working-position for adding wide-characters when window is
	  scrolled (prompted by related report by Eungkyu Song).

20041204
	+ replace some references on Linux to wcrtomb() which use it to obtain
	  the length of a multibyte string with _nc_wcrtomb, since wcrtomb() is
	  broken in glibc (see Debian #284260).
	+ corrected length-computation in wide-character support for
	  field_buffer().
	+ some fixes to frm_driver.c to allow it to accept multibyte input.
	+ modify configure script to work with Intel 8.0 compiler.

20041127
	+ amend change to setupterm() in 20030405 which would reuse the value
	  of cur_term if the same output was selected.  This now reuses it only
	  when setupterm() is called from tgetent(), which has no notion of
	  separate SCREENs.  Note that tgetent() must be called after initscr()
	  or newterm() to use this feature (Redhat #140326).
	+ add a check in CF_BUILD_CC macro to ensure that developer has given
	  the --with-build-cc option when cross-compiling (report by Alexandre
	  Campo).
	+ improved configure script checks for _XOPEN_SOURCE and
	  _POSIX_C_SOURCE (fix for IRIX 5.3 from Georg Schwarz, _POSIX_C_SOURCE
	  updates from lynx).
	+ cosmetic fix to test/gdc.c to recolor the bottom edge of the box
	  for consistency (comment by Dan Nelson).

20041120
	+ update wsvt25 terminfo entry -TD
	+ modify test/ins_wide.c to test all flavors of ins_wstr().
	+ ignore filler-cells in wadd_wchnstr() when adding a cchar_t array
	  which consists of multi-column characters, since this function
	  constructs them (cf: 20041023).
	+ modify winnstr() to return multibyte character strings for the
	  wide-character configuration.

20041106
	+ fixes to make slk_set() and slk_wset() accept and store multibyte
	  or multicolumn characters.

20041030
	+ improve color optimization a little by making _nc_do_color() check
	  if the old/new pairs are equivalent to the default pair 0.
	+ modify assume_default_colors() to not require that
	  use_default_colors() be called first.

20041023
	+ modify term_attrs() to use termattrs(), add the extended attributes
	  such as enter_horizontal_hl_mode for WA_HORIZONTAL to term_attrs().
	+ add logic in waddch_literal() to clear orphaned cells when one
	  multi-column character partly overwrites another.
	+ improved logic for clearing cells when a multi-column character
	  must be wrapped to a new line.
	+ revise storage of cells for multi-column characters to correct a
	  problem with repainting.  In the old scheme, it was possible for
	  doupdate() to decide that only part of a multi-column character
	  should be repainted since the filler cells stored only an attribute
	  to denote them as fillers, rather than the character value and the
	  attribute.

20041016
	+ minor fixes for traces.
	+ add SP->_screen_acs_map[], used to ensure that mapping of missing
	  line-drawing characters is handled properly.  For example, ACS_DARROW
	  is absent from xterm-new, and it was coincidentally displayed the
	  same as ACS_BTEE.

20041009
	+ amend 20021221 workaround for broken acs to reset the sgr, rmacs
	  and smacs strings as well.  Also modify the check for screen's
	  limitations in that area to allow the multi-character shift-in
	  and shift-out which seem to work.
	+ change GPM initialization, using dl library to load it dynamically
	  at runtime (Debian #110586).

20041002
	+ correct logic for color pair in setcchar() and getcchar() (patch by
	  Marcin 'Qrczak' Kowalczyk).
	+ add t/T commands to ncurses b/B tests to allow a different color to
	  be tested for the attrset part of the test than is used in the
	  background color.

20040925
	+ fix to make setcchar() to work when its wchar_t* parameter is
	  pointing to a string which contains more data than can be converted.
	+ modify wget_wstr() and example in ncurses.c to work if wchar_t and
	  wint_t are different sizes (report by Marcin 'Qrczak' Kowalczyk).

20040918
	+ remove check in wget_wch() added to fix an infinite loop, appears to
	  have been working around a transitory glibc bug, and interferes
	  with normal operation (report by Marcin 'Qrczak' Kowalczyk).
	+ correct wadd_wch() and wecho_wch(), which did not pass the rendition
	  information (report by Marcin 'Qrczak' Kowalczyk).
	+ fix aclocal.m4 so that the wide-character version of ncurses gets
	  compiled as libncursesw.5.dylib, instead of libncurses.5w.dylib
	  (adapted from patch by James J Ramsey).
	+ change configure script for --with-caps option to indicate that it
	  is no longer experimental.
	+ change configure script to reflect the fact that --enable-widec has
	  not been "experimental" since 5.3 (report by Bruno Lustosa).

20040911
	+ add 'B' test to ncurses.c, to exercise some wide-character functions.

20040828
	+ modify infocmp -i option to match 8-bit controls against its table
	  entries, e.g., so it can analyze the xterm-8bit entry.
	+ add morphos terminfo entry, improve amiga-8bit entry (Pavel Fedin).
	+ correct translation of "%%" in terminfo format to termcap, e.g.,
	  using "tic -C" (Redhat #130921).
	+ modified configure script CF_XOPEN_SOURCE macro to ensure that if
	  it defines _POSIX_C_SOURCE, that it defines it to a specific value
	  (comp.os.stratus newsgroup comment).

20040821
	+ fixes to build with Ada95 binding with gnat 3.4 (all warnings are
	  fatal, and gnat does not follow the guidelines for pragmas).
	  However that did find a coding error in Assume_Default_Colors().
	+ modify several terminfo entries to ensure xterm mouse and cursor
	  visibility are reset in rs2 string:  hurd, putty, gnome,
	  konsole-base, mlterm, Eterm, screen (Debian #265784, Debian #55637).
	  The xterm entries are left alone - old ones for compatibility, and
	  the new ones do not require this change. -TD

20040814
	+ fake a SIGWINCH in newterm() to accommodate buggy terminal emulators
	  and window managers (Debian #265631).
	> terminfo updates -TD
	+ remove dch/dch1 from rxvt because they are implemented inconsistently
	  with the common usage of bce/ech
	+ remove khome from vt220 (vt220's have no home key)
	+ add rxvt+pcfkeys

20040807
	+ modify test/ncurses.c 'b' test, adding v/V toggles to cycle through
	  combinations of video attributes so that for instance bold and
	  underline can be tested.  This made the legend too crowded, added
	  a help window as well.
	+ modify test/ncurses.c 'b' test to cycle through default colors if
	  the -d option is set.
	+ update putty terminfo entry (Robert de Bath).

20040731
	+ modify test/cardfile.c to allow it to read more data than can be
	  displayed.
	+ correct logic in resizeterm.c which kept it from processing all
	  levels of window hierarchy (reports by Folkert van Heusden,
	  Chris Share).

20040724
	+ modify "tic -cv" to ignore delays when comparing strings.  Also
	  modify it to ignore a canceled sgr string, e.g., for terminals which
	  cannot properly combine attributes in one control sequence.
	+ corrections for gnome and konsole entries (Redhat #122815, patch by
	  Hans de Goede)
	> terminfo updates -TD
	+ make ncsa-m rmacs/smacs consistent with sgr
	+ add sgr, rc/sc and ech to syscons entries
	+ add function-keys to decansi
	+ add sgr to mterm-ansi
	+ add sgr, civis, cnorm to emu
	+ correct/simplify cup in addrinfo

20040717
	> terminfo updates -TD
	+ add xterm-pc-fkeys
	+ review/update gnome and gnome-rh90 entries (prompted by Redhat
	  #122815).
	+ review/update konsole entries
	+ add sgr, correct sgr0 for kterm and mlterm
	+ correct tsl string in kterm

20040711
	+ add configure option --without-xterm-new

20040710
	+ add check in wget_wch() for printable bytes that are not part of a
	  multibyte character.
	+ modify wadd_wchnstr() to render text using window's background
	  attributes.
	+ improve tic's check to compare sgr and sgr0.
	+ fix c++ directory's .cc.i rule.
	+ modify logic in tgetent() which adjusts the termcap "me" string
	  to work with ISO-2022 string used in xterm-new (cf: 20010908).
	+ modify tic's check for conflicting function keys to omit that if
	  converting termcap to termcap format.
	+ add -U option to tic and infocmp.
	+ add rmam/smam to linux terminfo entry (Trevor Van Bremen)
	> terminfo updates -TD
	+ minor fixes for emu
	+ add emu-220
	+ change wyse acsc strings to use 'i' map rather than 'I'
	+ fixes for avatar0
	+ fixes for vp3a+

20040703
	+ use tic -x to install terminfo database -TD
	+ add -x to infocmp's usage message.
	+ correct field used for comparing O_ROWMAJOR in set_menu_format()
	  (report/patch by Tony Li).
	+ fix a missing nul check in set_field_buffer() from 20040508 changes.
	> terminfo updates -TD
	  + make xterm-xf86-v43 derived from xterm-xf86-v40 rather than
	    xterm-basic -TD
	  + align with xterm patch #192's use of xterm-new -TD
	  + update xterm-new and xterm-8bit for cvvis/cnorm strings -TD
	  + make xterm-new the default "xterm" entry -TD

20040626
	+ correct BUILD_CPPFLAGS substitution in ncurses/Makefile.in, to allow
	  cross-compiling from a separate directory tree (report/patch by
	  Dan Engel).
	+ modify is_term_resized() to ensure that window sizes are nonzero,
	  as documented in the manpage (report by Ian Collier).
	+ modify CF_XOPEN_SOURCE configure macro to make Hurd port build
	  (Debian #249214, report/patch by Jeff Bailey).
	+ configure-script mods from xterm, e.g., updates to CF_ADD_CFLAGS
	+ update config.guess, config.sub
	> terminfo updates -TD
	  + add mlterm
	  + add xterm-xf86-v44
	  + modify xterm-new aka xterm-xfree86 to accommodate luit, which
	    relies on G1 being used via an ISO-2022 escape sequence (report by
	    Juliusz Chroboczek)
	  + add 'hurd' entry

20040619
	+ reconsidered winsnstr(), decided after comparing other
	  implementations that wrapping is an X/Open documentation error.
	+ modify test/inserts.c to test all flavors of insstr().

20040605
	+ add setlocale() calls to a few test programs which may require it:
	  demo_forms.c, filter.c, ins_wide.c, inserts.c
	+ correct a few misspelled function names in ncurses-intro.html (report
	  by Tony Li).
	+ correct internal name of key_defined() manpage, which conflicted with
	  define_key().

20040529
	+ correct size of internal pad used for holding wide-character
	  field_buffer() results.
	+ modify data_ahead() to work with wide-characters.

20040522
	+ improve description of terminfo if-then-else expressions (suggested
	  by Arne Thomassen).
	+ improve test/ncurses.c 'd' test, allow it to use external file for
	  initial palette (added xterm-16color.dat and linux-color.dat), and
	  reset colors to the initial palette when starting/ending the test.
	+ change limit-check in init_color() to allow r/g/b component to
	  reach 1000 (cf: 20020928).

20040516
	+ modify form library to use cchar_t's rather than char's in the
	  wide-character configuration for storing data for field buffers.
	+ correct logic of win_wchnstr(), which did not work for more than
	  one cell.

20040508
	+ replace memset/memcpy usage in form library with for-loops to
	  simplify changing the datatype of FIELD.buf, part of wide-character
	  changes.
	+ fix some inconsistent use of #if/#ifdef (report by Alain Guibert).

20040501
	+ modify menu library to account for actual number of columns used by
	  multibyte character strings, in the wide-character configuration
	  (adapted from patch by Philipp Tomsich).
	+ add "-x" option to infocmp like tic's "-x", for use in "-F"
	  comparisons.  This modifies infocmp to only report extended
	  capabilities if the -x option is given, making this more consistent
	  with tic.  Some scripts may break, since infocmp previous gave this
	  information without an option.
	+ modify termcap-parsing to retain 2-character aliases at the beginning
	  of an entry if the "-x" option is used in tic.

20040424
	+ minor compiler-warning and test-program fixes.

20040417
	+ modify tic's missing-sgr warning to apply to terminfo only.
	+ free some memory leaks in tic.
	+ remove check in post_menu() that prevented menus from extending
	  beyond the screen (request by Max J. Werner).
	+ remove check in newwin() that prevents allocating windows
	  that extend beyond the screen.  Solaris curses does this.
	+ add ifdef in test/color_set.c to allow it to compile with older
	  curses.
	+ add napms() calls to test/dots.c to make it not be a CPU hog.

20040403
	+ modify unctrl() to return null if its parameter does not correspond
	  to an unsigned char.
	+ add some limit-checks to guard isprint(), etc., from being used on
	  values that do not fit into an unsigned char (report by Sami Farin).

20040328
	+ fix a typo in the _nc_get_locale() change.

20040327
	+ modify _nc_get_locale() to use setlocale() to query the program's
	  current locale rather than using getenv().  This fixes a case in tin
	  which relies on legacy treatment of 8-bit characters when the locale
	  is not initialized (reported by Urs Jansen).
	+ add sgr string to screen's and rxvt's terminfo entries -TD.
	+ add a check in tic for terminfo entries having an sgr0 but no sgr
	  string.  This confuses Tru64 and HPUX curses when combined with
	  color, e.g., making them leave line-drawing characters in odd places.
	+ correct casts used in ABSENT_BOOLEAN, CANCELLED_BOOLEAN, matches the
	  original definitions used in Debian package to fix PowerPC bug before
	  20030802 (Debian #237629).

20040320
	+ modify PutAttrChar() and PUTC() macro to improve use of
	  A_ALTCHARSET attribute to prevent line-drawing characters from
	  being lost in situations where the locale would otherwise treat the
	  raw data as nonprintable (Debian #227879).

20040313
	+ fix a redefinition of CTRL() macro in test/view.c for AIX 5.2 (report
	  by Jim Idle).
	+ remove ".PP" after ".SH NAME" in a few manpages; this confuses
	  some apropos script (Debian #237831).

20040306
	+ modify ncurses.c 'r' test so editing commands, like inserted text,
	  set the field background, and the state of insert/overlay editing
	  mode is shown in that test.
	+ change syntax of dummy targets in Ada95 makefiles to work with pmake.
	+ correct logic in test/ncurses.c 'b' for noncolor terminals which
	  did not recognize a quit-command (cf: 20030419).

20040228
	+ modify _nc_insert_ch() to allow for its input to be part of a
	  multibyte string.
	+ split out lib_insnstr.c, to prepare to rewrite it.  X/Open states
	  that this function performs wrapping, unlike all of the other
	  insert-functions.  Currently it does not wrap.
	+ check for nl_langinfo(CODESET), use it if available (report by
	  Stanislav Ievlev).
	+ split-out CF_BUILD_CC macro, actually did this for lynx first.
	+ fixes for configure script CF_WITH_DBMALLOC and CF_WITH_DMALLOC,
	  which happened to work with bash, but not with Bourne shell (report
	  by Marco d'Itri via tin-dev).

20040221
	+ some changes to adapt the form library to wide characters, incomplete
	  (request by Mike Aubury).
	+ add symbol to curses.h which can be used to suppress include of
	  stdbool.h, e.g.,
		#define NCURSES_ENABLE_STDBOOL_H 0
		#include <curses.h>
	  (discussion on XFree86 mailing list).

20040214
	+ modify configure --with-termlib option to accept a value which sets
	  the name of the terminfo library.  This would allow a packager to
	  build libtinfow.so renamed to coincide with libtinfo.so (discussion
	  with Stanislav Ievlev).
	+ improve documentation of --with-install-prefix, --prefix and
	  $(DESTDIR) in INSTALL (prompted by discussion with Paul Lew).
	+ add configure check if the compiler can use -c -o options to rename
	  its output file, use that to omit the 'cd' command which was used to
	  ensure object files are created in a separate staging directory
	  (prompted by comments by Johnny Wezel, Martin Mokrejs).

20040208 5.4 release for upload to ftp.gnu.org
	+ update TO-DO.

20040207 pre-release
	+ minor fixes to _nc_tparm_analyze(), i.e., do not count %i as a param,
	  and do not count %d if it follows a %p.
	+ correct an inconsistency between handling of codes in the 128-255
	  range, e.g., as illustrated by test/ncurses.c f/F tests.  In POSIX
	  locale, the latter did not show printable results, while the former
	  did.
	+ modify MKlib_gen.sh to compensate for broken C preprocessor on Mac
	  OS X, which alters "%%" to "% % " (report by Robert Simms, fix
	  verified by Scott Corscadden).

20040131 pre-release
	+ modify SCREEN struct to align it between normal/wide curses flavors
	  to simplify future changes to build a single version of libtinfo
	  (patch by Stanislav Ievlev).
	+ document handling of carriage return by addch() in manpage.
	+ document special features of unctrl() in manpage.
	+ documented interface changes in INSTALL.
	+ corrected control-char test in lib_addch.c to account for locale
	  (Debian #230335, cf: 971206).
	+ updated test/configure.in to use AC_EXEEXT and AC_OBJEXT.
	+ fixes to compile Ada95 binding with Debian gnat 3.15p-4 package.
	+ minor configure-script fixes for older ports, e.g., BeOS R4.5.

20040125 pre-release
	+ amend change to PutAttrChar() from 20030614 which computed the number
	  of cells for a possibly multi-cell character.  The 20030614 change
	  forced the cell to a blank if the result from wcwidth() was not
	  greater than zero.  However, wcwidth() called for parameters in the
	  range 128-255 can give this return value.  The logic now simply
	  ensures that the number of cells is greater than zero without
	  modifying the displayed value.

20040124 pre-release
	+ looked good for 5.4 release for upload to ftp.gnu.org (but see above)
	+ modify configure script check for ranlib to use AC_CHECK_TOOL, since
	  that works better for cross-compiling.

20040117 pre-release
	+ modify lib_get_wch.c to prefer mblen/mbtowc over mbrlen/mbrtowc to
	  work around core dump in Solaris 8's locale support, e.g., for
	  zh_CN.GB18030 (report by Saravanan Bellan).
	+ add includes for <stdarg.h> and <stdio.h> in configure script macro
	  to make <wchar.h> check work with Tru64 4.0d.
	+ add terminfo entry for U/Win -TD
	+ add terminfo entries for SFU aka Interix aka OpenNT (Federico
	  Bianchi).
	+ modify tput's error messages to prefix them with the program name
	  (report by Vincent Lefevre, patch by Daniel Jacobowitz (see Debian
	  #227586)).
	+ correct a place in tack where exit_standout_mode was used instead of
	  exit_attribute_mode (patch by Jochen Voss (see Debian #224443)).
	+ modify c++/cursesf.h to use const in the Enumeration_Field method.
	+ remove an ambiguous (actually redundant) method from c++/cursesf.h
	+ make $HOME/.terminfo update optional (suggested by Stanislav Ievlev).
	+ improve sed script which extracts libtool's version in the
	  CF_WITH_LIBTOOL macro.
	+ add ifdef'd call to AC_PROG_LIBTOOL to CF_WITH_LIBTOOL macro (to
	  simplify local patch for Albert Chin-A-Young)..
	+ add $(CXXFLAGS) to link command in c++/Makefile.in (adapted from
	  patch by Albert Chin-A-Young)..
	+ fix a missing substitution in configure.in for "$target" needed for
	  HPUX .so/.sl case.
	+ resync CF_XOPEN_SOURCE configure macro with lynx; fixes IRIX64 and
	  NetBSD 1.6 conflicts with _XOPEN_SOURCE.
	+ make check for stdbool.h more specific, to ensure that including it
	  will actually define/declare bool for the configured compiler.
	+ rewrite ifdef's in curses.h relating NCURSES_BOOL and bool.  The
	  intention of that is to #define NCURSES_BOOL as bool when the
	  compiler declares bool, and to #define bool as NCURSES_BOOL when it
	  does not (reported by Jim Gifford, Sam Varshavchik, cf: 20031213).

20040110 pre-release
	+ change minor version to 4, i.e., ncurses 5.4
	+ revised/improved terminfo entries for tvi912b, tvi920b (Benjamin C W
	  Sittler).
	+ simplified ncurses/base/version.c by defining the result from the
	  configure script rather than using sprintf (suggested by Stanislav
	  Ievlev).
	+ remove obsolete casts from c++/cursesw.h (reported by Stanislav
	  Ievlev).
	+ modify configure script so that when configuring for termlib, programs
	  such as tic are not linked with the upper-level ncurses library
	  (suggested by Stanislav Ievlev).
	+ move version.c from ncurses/base to ncurses/tinfo to allow linking
	  of tic, etc., using libtinfo (suggested by Stanislav Ievlev).

20040103
	+ adjust -D's to build ncursesw on OpenBSD.
	+ modify CF_PROG_EXT to make OS/2 build with EXEEXT.
	+ add pecho_wchar().
	+ remove <wctype.h> include from lib_slk_wset.c which is not needed (or
	  available) on older platforms.

20031227
	+ add -D's to build ncursew on FreeBSD 5.1.
	+ modify shared library configuration for FreeBSD 4.x/5.x to add the
	  soname information (request by Marc Glisse).
	+ modify _nc_read_tic_entry() to not use MAX_ALIAS, but PATH_MAX only
	  for limiting the length of a filename in the terminfo database.
	+ modify termname() to return the terminal name used by setupterm()
	  rather than $TERM, without truncating to 14 characters as documented
	  by X/Open (report by Stanislav Ievlev, cf:  970719).
	+ re-add definition for _BSD_TYPES, lost in merge (cf: 20031206).

20031220
	+ add configure option --with-manpage-format=catonly to address
	  behavior of BSDI, allow install of man+cat files on NetBSD, whose
	  behavior has diverged by requiring both to be present.
	+ remove leading blanks from comment-lines in manlinks.sed script to
	  work with Tru64 4.0d.
	+ add screen.linux terminfo entry (discussion on mutt-users mailing
	  list).

20031213
	+ add a check for tic to flag missing backslashes for termcap
	  continuation lines.  ncurses reads the whole entry, but termcap
	  applications do not.
	+ add configure option "--with-manpage-aliases" extending
	  "--with-manpage-aliases" to provide the option of generating ".so"
	  files rather than symbolic links for manpage aliases.
	+ add bool definition in include/curses.h.in for configurations with no
	  usable C++ compiler (cf: 20030607).
	+ fix pathname of SigAction.h for building with --srcdir (reported by
	  Mike Castle).

20031206
	+ folded ncurses/base/sigaction.c into includes of ncurses/SigAction.h,
	  since that header is used only within ncurses/tty/lib_tstp.c, for
	  non-POSIX systems (discussion with Stanislav Ievlev).
	+ remove obsolete _nc_outstr() function (report by Stanislav Ievlev
	  <inger@altlinux.org>).
	+ add test/background.c and test/color_set.c
	+ modify color_set() function to work with color pair 0 (report by
	  George Andreou <gbandreo@tem.uoc.gr>).
	+ add configure option --with-trace, since defining TRACE seems too
	  awkward for some cases.
	+ remove a call to _nc_free_termtype() from read_termtype(), since the
	  corresponding buffer contents were already zeroed by a memset (cf:
	  20000101).
	+ improve configure check for _XOPEN_SOURCE and related definitions,
	  adding special cases for Solaris' __EXTENSIONS__ and FreeBSD's
	  __BSD_TYPES (reports by Marc Glisse <marc.glisse@normalesup.org>).
	+ small fixes to compile on Solaris and IRIX64 using cc.
	+ correct typo in check for pre-POSIX sort options in MKkey_defs.sh
	  (cf: 20031101).

20031129
	+ modify _nc_gettime() to avoid a problem with arithmetic on unsigned
	  values (Philippe Blain).
	+ improve the nanosleep() logic in napms() by checking for EINTR and
	  restarting (Philippe Blain).
	+ correct expression for "%D" in lib_tgoto.c (Juha Jarvi
	  <mooz@welho.com>).

20031122
	+ add linux-vt terminfo entry (Andrey V Lukyanov <land@long.yar.ru>).
	+ allow "\|" escape in terminfo; tic should not warn about this.
	+ save the full pathname of the trace-file the first time it is opened,
	  to avoid creating it in different directories if the application
	  opens and closes it while changing its working directory.
	+ modify configure script to provide a non-empty default for
	  $BROKEN_LINKER

20031108
	+ add DJGPP to special case of DOS-style drive letters potentially
	  appearing in TERMCAP environment variable.
	+ fix some spelling in comments (reports by Jason McIntyre, Jonathon
	  Gray).
	+ update config.guess, config.sub

20031101
	+ fix a memory leak in error-return from setupterm() (report by
	  Stanislav Ievlev <inger@altlinux.org>).
	+ use EXEEXT and OBJEXT consistently in makefiles.
	+ amend fixes for cross-compiling to use separate executable-suffix
	  BUILD_EXEEXT (cf: 20031018).
	+ modify MKkey_defs.sh to check for sort utility that does not
	  recognize key options, e.g., busybox (report by Peter S Mazinger
	  <ps.m@gmx.net>).
	+ fix potential out-of-bounds indexing in _nc_infotocap() (found by
	  David Krause using some of the new malloc debugging features
	  under OpenBSD, patch by Ted Unangst).
	+ modify CF_LIB_SUFFIX for Itanium releases of HP-UX, which use a
	  ".so" suffix (patch by Jonathan Ward <Jonathan.Ward@hp.com>).

20031025
	+ update terminfo for xterm-xfree86 -TD
	+ add check for multiple "tc=" clauses in a termcap to tic.
	+ check for missing op/oc in tic.
	+ correct _nc_resolve_uses() and _nc_merge_entry() to allow infocmp and
	  tic to show cancelled capabilities.  These functions were ignoring
	  the state of the target entry, which should be untouched if cancelled.
	+ correct comment in tack/output.c (Debian #215806).
	+ add some null-pointer checks to lib_options.c (report by Michael
	  Bienia).
	+ regenerated html documentation.
	+ correction to tar-copy.sh, remove a trap command that resulted in
	  leaving temporary files (cf: 20030510).
	+ remove contact/maintainer addresses for Juergen Pfeifer (his request).

20031018
	+ updated test/configure to reflect changes for libtool (cf: 20030830).
	+ fix several places in tack/pad.c which tested and used the parameter-
	  and parameterless strings inconsistently, i.e., in pad_rin(),
	  pad_il(), pad_indn() and pad_dl() (Debian #215805).
	+ minor fixes for configure script and makefiles to cleanup executables
	  generated when cross-compiling for DJGPP.
	+ modify infocmp to omit check for $TERM for operations that do not
	  require it, e.g., "infocmp -e" used to build fallback list (report by
	  Egmont Koblinger).

20031004
	+ add terminfo entries for DJGPP.
	+ updated note about maintainer in ncurses-intro.html

20030927
	+ update terminfo entries for gnome terminal.
	+ modify tack to reset colors after each color test, correct a place
	  where exit_standout_mode was used instead of exit_attribute_mode.
	+ improve tack's bce test by making it set colors other than black
	  on white.
	+ plug a potential recursion between napms() and _nc_timed_wait()
	  (report by Philippe Blain).

20030920
	+ add --with-rel-version option to allow workaround to allow making
	  libtool on Darwin generate the "same" library names as with the
	  --with-shared option.  The Darwin ld program does not work well
	  with a zero as the minor-version value (request by Chris Zubrzycki).
	+ modify CF_MIXEDCASE_FILENAMES macro to work with cross-compiling.
	+ modify tack to allow it to run from fallback terminfo data.
	> patch by Philippe Blain:
	+ improve PutRange() by adjusting call to EmitRange() and corresponding
	  return-value to not emit unchanged characters on the end of the
	  range.
	+ improve a check for changed-attribute by exiting a loop when the
	  change is found.
	+ improve logic in TransformLine(), eliminating a duplicated comparison
	  in the clr_bol logic.

20030913
	> patch by Philippe Blain:
	+ in ncurses/tty/lib_mvcur.c,
	  move the label 'nonlocal' just before the second gettimeofday() to
	  be able to compute the diff time when 'goto nonlocal' used.
	  Rename 'msec' to 'microsec' in the debug-message.
	+ in ncurses/tty/lib_mvcur.c,
	  Use _nc_outch() in carriage return/newline movement instead of
	  putchar() which goes to stdout.  Move test for xold>0 out of loop.
	+ in ncurses/tinfo/setbuf.c,
	  Set the flag SP->_buffered at the end of operations when all has been
	  successful (typeMalloc can fail).
	+ simplify NC_BUFFERED macro by moving check inside _nc_setbuf().

20030906
	+ modify configure script to avoid using "head -1", which does not
	  work if POSIXLY_CORRECT (sic) is set.
	+ modify run_tic.in to avoid using wrong shared libraries when
	  cross-compiling (Dan Kegel).

20030830
	+ alter configure script help message to make it clearer that
	  --with-build-cc does not specify a cross-compiler (suggested by Dan
	  Kegel <dank@kegel.com>).
	+ modify configure script to accommodate libtool 1.5, as well as add an
	  parameter to the "--with-libtool" option which can specify the
	  pathname of libtool (report by Chris Zubrzycki).  We note that
	  libtool 1.5 has more than one bug in its C++ support, so it is not
	  able to install libncurses++, for instance, if $DESTDIR or the option
	  --with-install-prefix is used.

20030823
	> patch by Philippe Blain:
	+ move assignments to SP->_cursrow, SP->_curscol into online_mvcur().
	+ make baudrate computation in delay_output() consistent with the
	  assumption in _nc_mvcur_init(), i.e., a byte is 9 bits.

20030816
	+ modify logic in waddch_literal() to take into account zh_TW.Big5
	  whose multibyte sequences may contain "printable" characters, e.g.,
	  a "g" in the sequence "\247g" (Debian #204889, cf: 20030621).
	+ improve storage used by _nc_safe_strcpy() by ensuring that the size
	  is reset based on the initialization call, in case it were called
	  after other strcpy/strcat calls (report by Philippe Blain).
	> patch by Philippe Blain:
	+ remove an unused ifdef for REAL_ATTR & WANT_CHAR
	+ correct a place where _cup_cost was used rather than _cuu_cost

20030809
	+ fix a small memory leak in _nc_free_termtype().
	+ close trace-file if trace() is called with a zero parameter.
	+ free memory allocated for soft-key strings, in delscreen().
	+ fix an allocation size in safe_sprintf.c for the "*" format code.
	+ correct safe_sprintf.c to not return a null pointer if the format
	  happens to be an empty string.  This applies to the "configure
	  --enable-safe-sprintf" option (Redhat #101486).

20030802
	+ modify casts used for ABSENT_BOOLEAN and CANCELLED_BOOLEAN (report by
	  Daniel Jacobowitz).
	> patch by Philippe Blain:
	+ change padding for change_scroll_region to not be proportional to
	  the size of the scroll-region.
	+ correct error-return in _nc_safe_strcat().

20030726
	+ correct limit-checks in _nc_scroll_window() (report and test-case by
	  Thomas Graf <graf@dms.at> cf: 20011020).
	+ re-order configure checks for _XOPEN_SOURCE to avoid conflict with
	  _GNU_SOURCE check.

20030719
	+ use clr_eol in preference to blanks for bce terminals, so select and
	  paste will have fewer trailing blanks, e.g., when using xterm
	  (request by Vincent Lefevre).
	+ correct prototype for wunctrl() in manpage.
	+ add configure --with-abi-version option (discussion with Charles
	  Wilson).
	> cygwin changes from Charles Wilson:
	  + aclocal.m4: on cygwin, use autodetected prefix for import
	    and static lib, but use "cyg" for DLL.
	  + include/ncurses_dll.h: correct the comments to reflect current
	    status of cygwin/mingw port.  Fix compiler warning.
	  + misc/run_tic.in: ensure that tic.exe can find the uninstalled
	    DLL, by adding the lib-directory to the PATH variable.
	  + misc/terminfo.src (nxterm|xterm-color): make xterm-color
	    primary instead of nxterm, to match XFree86's xterm.terminfo
	    usage and to prevent circular links.
	    (rxvt): add additional codes from rxvt.org.
	    (rxvt-color): new alias
	    (rxvt-xpm): new alias
	    (rxvt-cygwin): like rxvt, but with special acsc codes.
	    (rxvt-cygwin-native): ditto.  rxvt may be run under XWindows, or
	    with a "native" MSWin GUI.	Each takes different acsc codes,
	    which are both different from the "normal" rxvt's acsc.
	    (cygwin): cygwin-in-cmd.exe window.	 Lots of fixes.
	    (cygwinDBG): ditto.
	  + mk-1st.awk: use "cyg" for the DLL prefix, but "lib" for import
	    and static libs.

20030712
	+ update config.guess, config.sub
	+ add triples for configuring shared libraries with the Debian
	  GNU/FreeBSD packages (patch by Robert Millan <zeratul2@wanadoo.es>).

20030705
	+ modify CF_GCC_WARNINGS so it only applies to gcc, not g++.  Some
	  platforms have installed g++ along with the native C compiler, which
	  would not accept gcc warning options.
	+ add -D_XOPEN_SOURCE=500 when configuring with --enable-widec, to
	  get mbstate_t declaration on HPUX 11.11 (report by David Ellement).
	+ add _nc_pathlast() to get rid of casts in _nc_basename() calls.
	+ correct a sign-extension in wadd_wch() and wecho_wchar() from
	  20030628 (report by Tomohiro Kubota).
	+ work around omission of btowc() and wctob() from wide-character
	  support (sic) in NetBSD 1.6 using mbtowc() and wctomb() (report by
	  Gabor Z Papp).
	+ add portability note to curs_get_wstr.3x (Debian #199957).

20030628
	+ rewrite wadd_wch() and wecho_wchar() to call waddch() and wechochar()
	  respectively, to avoid calling waddch_noecho() with wide-character
	  data, since that function assumes its input is 8-bit data.
	  Similarly, modify waddnwstr() to call wadd_wch().
	+ remove logic from waddnstr() which transformed multibyte character
	  strings into wide-characters.  Rewrite of waddch_literal() from
	  20030621 assumes its input is raw multibyte data rather than wide
	  characters (report by Tomohiro Kubota).

20030621
	+ write getyx() and related 2-return macros in terms of getcury(),
	  getcurx(), etc.
	+ modify waddch_literal() in case an application passes bytes of a
	  multibyte character directly to waddch().  In this case, waddch()
	  must reassemble the bytes into a wide-character (report by Tomohiro
	  Kubota <kubota@debian.org>).

20030614
	+ modify waddch_literal() in case a multibyte value occupies more than
	  two cells.
	+ modify PutAttrChar() to compute the number of character cells that
	  are used in multibyte values.  This fixes a problem displaying
	  double-width characters (report/test by Mitsuru Chinen
	  <mchinen@yamato.ibm.com>).
	+ add a null-pointer check for result of keyname() in _tracechar()
	+ modify _tracechar() to work around glibc sprintf bug.

20030607
	+ add a call to setlocale() in cursesmain.cc, making demo display
	  properly in a UTF-8 locale.
	+ add a fallback definition in curses.priv.h for MB_LEN_MAX (prompted
	  by discussion with Gabor Z Papp).
	+ use macros NCURSES_ACS() and NCURSES_WACS() to hide cast needed to
	  appease -Wchar-subscript with g++ 3.3 (Debian #195732).
	+ fix a redefinition of $RANLIB in the configure script when libtool
	  is used, which broke configure on Mac OS X (report by Chris Zubrzycki
	  <beren@mac.com>).
	+ simplify ifdef for bool declaration in curses.h.in (suggested by
	  Albert Chin-A-Young).
	+ remove configure script check to allow -Wconversion for older
	  versions of gcc (suggested by Albert Chin-A-Young).

20030531
	+ regenerated html manpages.
	+ modify ifdef's in curses.h.in that disabled use of __attribute__()
	  for g++, since recent versions implement the cases which ncurses uses
	  (Debian #195230).
	+ modify _nc_get_token() to handle a case where an entry has no
	  description, and capabilities begin on the same line as the entry
	  name.
	+ fix a typo in ncurses_dll.h reported by gcc 3.3.
	+ add an entry for key_defined.3x to man_db.renames.

20030524
	+ modify setcchar() to allow converting control characters to complex
	  characters (report/test by Mitsuru Chinen <mchinen@yamato.ibm.com>).
	+ add tkterm entry -TD
	+ modify parse_entry.c to allow a terminfo entry with a leading
	  2-character name (report by Don Libes).
	+ corrected acsc in screen.teraterm, which requires a PC-style mapping.
	+ fix trace statements in read_entry.c to use lseek() rather than
	  tell().
	+ fix signed/unsigned warnings from Sun's compiler (gcc should give
	  these warnings, but it is unpredictable).
	+ modify configure script to omit -Winline for gcc 3.3, since that
	  feature is broken.
	+ modify manlinks.sed to add a few functions that were overlooked since
	  they return function pointers:  field_init, field_term, form_init,
	  form_term, item_init, item_term, menu_init and menu_term.

20030517
	+ prevent recursion in wgetch() via wgetnstr() if the connection cannot
	  be switched between cooked/raw modes because it is not a TTY (report
	  by Wolfgang Gutjahr <gutw@knapp.com>).
	+ change parameter of define_key() and key_defined() to const (prompted
	  by Debian #192860).
	+ add a check in test/configure for ncurses extensions, since there
	  are some older versions, etc., which would not compile with the
	  current test programs.
	+ corrected demo in test/ncurses.c of wgetn_wstr(), which did not
	  convert wchar_t string to multibyte form before printing it.
	+ corrections to lib_get_wstr.c:
	  + null-terminate buffer passed to setcchar(), which occasionally
	    failed.
	  + map special characters such as erase- and kill-characters into
	    key-codes so those will work as expected even if they are not
	    mentioned in the terminfo.
	+ modify PUTC() and Charable() macros to make wide-character line
	  drawing work for POSIX locale on Linux console (cf: 20021221).

20030510
	+ make typography for program options in manpages consistent (report
	  by Miloslav Trmac <mitr@volny.cz>).
	+ correct dependencies in Ada95/src/Makefile.in, so the builds with
	  "--srcdir" work (report by Warren L Dodge).
	+ correct missing definition of $(CC) in Ada95/gen/Makefile.in
	  (reported by Warren L Dodge <warrend@mdhost.cse.tek.com>).
	+ fix typos and whitespace in manpages (patch by Jason McIntyre
	  <jmc@prioris.mini.pw.edu.pl>).

20030503
	+ fix form_driver() cases for REQ_CLR_EOF, REQ_CLR_EOL, REQ_DEL_CHAR,
	  REQ_DEL_PREV and REQ_NEW_LINE, which did not ensure the cursor was at
	  the editing position before making modifications.
	+ add test/demo_forms and associated test/edit_field.c demos.
	+ modify test/configure.in to use test/modules for the list of objects
	  to compile rather than using the list of programs.

20030419
	+ modify logic of acsc to use the original character if no mapping is
	  defined, noting that Solaris does this.
	+ modify ncurses 'b' test to avoid using the acs_map[] array since
	  20021231 changes it to no longer contain information from the acsc
	  string.
	+ modify makefile rules in c++, progs, tack and test to ensure that
	  the compiler flags (e.g., $CFLAGS or $CCFLAGS) are used in the link
	  command (report by Jose Luis Rico Botella <informatica@serpis.com>).
	+ modify soft-key initialization to use A_REVERSE if A_STANDOUT would
	  not be shown when colors are used, i.e., if ncv#1 is set in the
	  terminfo as is done in "screen".

20030412
	+ add a test for slk_color(), in ncurses.c
	+ fix some issues reported by valgrind in the slk_set() and slk_wset()
	  code, from recent rewrite.
	+ modify ncurses 'E' test to use show previous label via slk_label(),
	  as in 'e' test.
	+ modify wide-character versions of NewChar(), NewChar2() macros to
	  ensure that the whole struct is initialized.

20030405
	+ modify setupterm() to check if the terminfo and terminal-modes have
	  already been read.  This ensures that it does not reinvoke
	  def_prog_mode() when an application calls more than one function,
	  such as tgetent() and initscr() (report by Olaf Buddenhagen).

20030329
	+ add 'E' test to ncurses.c, to exercise slk_wset().
	+ correct handling of carriage-return in wgetn_wstr(), used in demo of
	  slk_wset().
	+ first draft of slk_wset() function.

20030322
	+ improved warnings in tic when suppressing items to fit in termcap's
	  1023-byte limit.
	+ built a list in test/README showing which externals are being used
	  by either programs in the test-directory or via internal library
	  calls.
	+ adjust include-options in CF_ETIP_DEFINES to avoid missing
	  ncurses_dll.h, fixing special definitions that may be needed for
	  etip.h (reported by Greg Schafer <gschafer@zip.com.au>).

20030315
	+ minor fixes for cardfile.c, to make it write the updated fields to
	  a file when ^W is given.
	+ add/use _nc_trace_bufcat() to eliminate some fixed buffer limits in
	  trace code.

20030308
	+ correct a case in _nc_remove_string(), used by define_key(), to avoid
	  infinite loop if the given string happens to be a substring of other
	  strings which are assigned to keys (report by John McCutchan).
	+ add key_defined() function, to tell which keycode a string is bound
	  to (discussion with John McCutchan <ttb@tentacle.dhs.org>).
	+ correct keybound(), which reported definitions in the wrong table,
	  i.e., the list of definitions which are disabled by keyok().
	+ modify demo_keydef.c to show the details it changes, and to check
	  for errors.

20030301
	+ restructured test/configure script, make it work for libncursesw.
	+ add description of link_fieldtype() to manpage (report by
	  L Dee Holtsclaw <dee@sunbeltsoft.com>).

20030222
	+ corrected ifdef's relating to configure check for wchar_t, etc.
	+ if the output is a socket or other non-tty device, use 1 millisecond
	  for the cost in mvcur; previously it was 9 milliseconds because the
	  baudrate was not known.
	+ in _nc_get_tty_mode(), initialize the TTY buffer on error, since
	  glibc copies uninitialized data in that case, as noted by valgrind.
	+ modify tput to use the same parameter analysis as tparm() does, to
	  provide for user-defined strings, e.g., for xterm title, a
	  corresponding capability might be
		title=\E]2;%p1%s^G,
	+ modify MKlib_gen.sh to avoid passing "#" tokens through the C
	  preprocessor.  This works around Mac OS X's preprocessor, which
	  insists on adding a blank on each side of the token (report/analysis
	  by Kevin Murphy <murphy@genome.chop.edu>).

20030215
	+ add configure check for wchar_t and wint_t types, rather than rely
	  on preprocessor definitions.  Also work around for gcc fixinclude
	  bug which creates a shadow copy of curses.h if it sees these symbols
	  apparently typedef'd.
	+ if database is disabled, do not generate run_tic.sh
	+ minor fixes for memory-leak checking when termcap is read.

20030208
	+ add checking in tic for incomplete line-drawing character mapping.
	+ updated configure script to reflect fix for AC_PROG_GCC_TRADITIONAL,
	  which is broken in autoconf 2.5x for Mac OS X 10.2.3 (report by
	  Gerben Wierda <Sherlock@rna.nl>).
	+ make return value from _nc_printf_string() consistent.  Before,
	  depending on whether --enable-safe-sprintf was used, it might not be
	  cached for reallocating.

20030201
	+ minor fixes for memory-leak checking in lib_tparm.c, hardscroll.c
	+ correct a potentially-uninitialized value if _read_termtype() does
	  not read as much data as expected (report by Wolfgang Rohdewald
	  <wr6@uni.de>).
	+ correct several places where the aclocal.m4 macros relied on cache
	  variable names which were incompatible (as usual) between autoconf
	  2.13 and 2.5x, causing the test for broken-linker to give incorrect
	  results (reports by Gerben Wierda <Sherlock@rna.nl> and Thomas Esser
	  <te@dbs.uni-hannover.de>).
	+ do not try to open gpm mouse driver if standard output is not a tty;
	  the gpm library does not make this check (bug report for dialog
	  by David Oliveira <davidoliveira@develop.prozone.ws>).

20030125
	+ modified emx.src to correspond more closely to terminfo.src, added
	  emx-base to the latter -TD
	+ add configure option for FreeBSD sysmouse, --with-sysmouse, and
	  implement support for that in lib_mouse.c, lib_getch.c

20030118
	+ revert 20030105 change to can_clear_with(), does not work for the
	  case where the update is made on cells which are blanks with
	  attributes, e.g., reverse.
	+ improve ifdef's to guard against redefinition of wchar_t and wint_t
	  in curses.h (report by Urs Jansen).

20030111
	+ improve mvcur() by checking if it is safe to move when video
	  attributes are set (msgr), and if not, reset/restore attributes
	  within that function rather than doing it separately in the GoTo()
	  function in tty_update.c (suggested by Philippe Blain).
	+ add a message in run_tic.in to explain more clearly what does not
	  work when attempting to create a symbolic link for /usr/lib/terminfo
	  on OS/2 and other platforms with no symbolic links (report by John
	  Polterak).
	+ change several sed scripts to avoid using "\+" since it is not a BRE
	  (basic regular expression).  One instance caused terminfo.5 to be
	  misformatted on FreeBSD (report by Kazuo Horikawa
	  <horikawa@FreeBSD.org> (see FreeBSD docs/46709)).
	+ correct misspelled 'wint_t' in curs_get_wch.3x (Michael Elkins).

20030105
	+ improve description of terminfo operators, especially static/dynamic
	  variables (comments by Mark I Manning IV <mark4th@earthlink.net>).
	+ demonstrate use of FIELDTYPE by modifying test/ncurses 'r' test to
	  use the predefined TYPE_ALPHA field-type, and by defining a
	  specialized type for the middle initial/name.
	+ fix MKterminfo.sh, another workaround for POSIXLY_CORRECT misfeature
	  of sed 4.0
	> patch by Philippe Blain:
	+ optimize can_clear_with() a little by testing first if the parameter
	  is indeed a "blank".
	+ simplify ClrBottom() a little by allowing it to use clr_eos to clear
	  sections as small as one line.
	+ improve ClrToEOL() by checking if clr_eos is available before trying
	  to use it.
	+ use tputs() rather than putp() in a few cases in tty_update.c since
	  the corresponding delays are proportional to the number of lines
	  affected: repeat_char, clr_eos, change_scroll_region.

20021231
	+ rewrite of lib_acs.c conflicts with copying of SCREEN acs_map to/from
	  global acs_map[] array; removed the lines that did the copying.

20021228
	+ change some overlooked tputs() calls in scrolling code to use putp()
	  (report by Philippe Blain).
	+ modify lib_getch.c to avoid recursion via wgetnstr() when the input
	  is not a tty and consequently mode-changes do not work (report by
	  <R.Chamberlin@querix.com>).
	+ rewrote lib_acs.c to allow PutAttrChar() to decide how to render
	  alternate-characters, i.e., to work with Linux console and UTF-8
	  locale.
	+ correct line/column reference in adjust_window(), needed to make
	  special windows such as curscr track properly when resizing (report
	  by Lucas Gonze <lgonze@panix.com>).
	> patch by Philippe Blain:
	+ correct the value used for blank in ClrBottom() (broken in 20000708).
	+ correct an off-by-one in GoTo() parameter in _nc_scrolln().

20021221
	+ change several tputs() calls in scrolling code to use putp(), to
	  enable padding which may be needed for some terminals (patch by
	  Philippe Blain).
	+ use '%' as sed substitute delimiter in run_tic script to avoid
	  problems with pathname delimiters such as ':' and '@' (report by John
	  Polterak).
	+ implement a workaround so that line-drawing works with screen's
	  crippled UTF-8 support (tested with 3.9.13).  This only works with
	  the wide-character support (--enable-widec); the normal library will
	  simply suppress line-drawing when running in a UTF-8 locale in screen.

20021214
	+ allow BUILD_CC and related configure script variables to be
	  overridden from the environment.
	+ make build-tools variables in ncurses/Makefile.in consistent with
	  the configure script variables (report by Maciej W Rozycki).
	+ modify ncurses/modules to allow
		configure --disable-leaks --disable-ext-funcs
	  to build (report by Gary Samuelson).
	+ fix a few places in configure.in which lacked quotes (report by
	  Gary Samuelson <gary.samuelson@verizon.com>).
	+ correct handling of multibyte characters in waddch_literal() which
	  force wrapping because they are started too late on the line (report
	  by Sam Varshavchik).
	+ small fix for CF_GNAT_VERSION to ignore the help-message which
	  gnatmake adds to its version-message.
	> Maciej W Rozycki <macro@ds2.pg.gda.pl>:
	+ use AC_CHECK_TOOL to get proper values for AR and LD for cross
	  compiling.
	+ use $cross_compiling variable in configure script rather than
	  comparing $host_alias and $target alias, since "host" is
	  traditionally misused in autoconf to refer to the target platform.
	+ change configure --help message to use "build" rather than "host"
	  when referring to the --with-build-XXX options.

20021206
	+ modify CF_GNAT_VERSION to print gnatmake's version, and to allow for
	  possible gnat versions such as 3.2 (report by Chris Lingard
	  <chris@stockwith.co.uk>).
	+ modify #define's for CKILL and other default control characters in
	  tset to use the system's default values if they are defined.
	+ correct interchanged defaults for kill and interrupt characters
	  in tset, which caused it to report unnecessarily (Debian #171583).
	+ repair check for missing C++ compiler, which is broken in autoconf
	  2.5x by hardcoding it to g++ (report by Martin Mokrejs).
	+ update config.guess, config.sub (2002-11-30)
	+ modify configure script to skip --with-shared, etc., when the
	  --with-libtool option is given, since they would be ignored anyway.
	+ fix to allow "configure --with-libtool --with-termlib" to build.
	+ modify configure script to show version number of libtool, to help
	  with bug reports.  libtool still gets confused if the installed
	  ncurses libraries are old, since it ignores the -L options at some
	  point (tested with libtool 1.3.3 and 1.4.3).
	+ reorder configure script's updating of $CPPFLAGS and $CFLAGS to
	  prevent -I options in the user's environment from introducing
	  conflicts with the build -I options (may be related to reports by
	  Patrick Ash and George Goffe).
	+ rename test/define_key.c to test/demo_defkey.c, test/keyok.c to
	  test/demo_keyok.c to allow building these with libtool.

20021123
	+ add example program test/define_key.c for define_key().
	+ add example program test/keyok.c for keyok().
	+ add example program test/ins_wide.c for wins_wch() and wins_wstr().
	+ modify wins_wch() and wins_wstr() to interpret tabs by using the
	  winsch() internal function.
	+ modify setcchar() to allow for wchar_t input strings that have
	  more than one spacing character.

20021116
	+ fix a boundary check in lib_insch.c (patch by Philippe Blain).
	+ change type for *printw functions from NCURSES_CONST to const
	  (prompted by comment by Pedro Palhoto Matos <plpm@mega.ist.utl.pt>,
	  but really from a note on X/Open's website stating that either is
	  acceptable, and the latter will be used in a future revision).
	+ add xterm-1002, xterm-1003 terminfo entries to demonstrate changes in
	  lib_mouse.c (20021026) -TD
	+ add screen-bce, screen-s entries from screen 3.9.13 (report by
	  Adam Lazur <zal@debian.org>) -TD
	+ add mterm terminfo entries -TD

20021109
	+ split-out useful fragments in terminfo for vt100 and vt220 numeric
	  keypad, i.e., vt100+keypad, vt100+pfkeys, vt100+fnkeys and
	  vt220+keypad.  The last as embedded in various entries had ka3 and
	  kb2 interchanged (report/discussion with Leonard den Ottolander
	  <leonardjo@hetnet.nl>).
	+ add check in tic for keypads consistent with vt100 layout.
	+ improve checks in tic for color capabilities

20021102
	+ check for missing/empty/illegal terminfo name in _nc_read_entry()
	  (report by Martin Mokrejs, where $TERM was set to an empty string).
	+ rewrote lib_insch.c, combining it with lib_insstr.c so both handle
	  tab and other control characters consistently (report by Philippe
	  Blain).
	+ remove an #undef for KEY_EVENT from curses.tail used in the
	  experimental NCURSES_WGETCH_EVENTS feature.  The #undef confuses
	  dpkg's build script (Debian #165897).
	+ fix MKlib_gen.sh, working around the ironically named POSIXLY_CORRECT
	  feature of GNU sed 4.0 (reported by Ervin Nemeth <airwin@inf.bme.hu>).

20021026
	+ implement logic in lib_mouse.c to handle position reports which are
	  generated when XFree86 xterm is initialized with private modes 1002
	  or 1003.  These are returned to the application as the
	  REPORT_MOUSE_POSITION mask, which was not implemented.  Tested both
	  with ncurses 'a' menu (prompted by discussion with Larry Riedel
	  <Larry@Riedel.org>).
	+ modify lib_mouse.c to look for "XM" terminfo string, which allows
	  one to override the escape sequence used to enable/disable mouse
	  mode.  In particular this works for XFree86 xterm private modes
	  1002 and 1003.  If "XM" is missing (note that this is an extended
	  name), lib_mouse uses the conventional private mode 1000.
	+ correct NOT_LOCAL() macro in lib_mvcur.c to refer to screen_columns
	  where it used screen_lines (report by Philippe Blain).
	+ correct makefile rules for the case when both --with-libtool and
	  --with-gpm are given (report by Mr E_T <troll@logi.net.au>).
	+ add note to terminfo manpage regarding the differences between
	  setaf/setab and setf/setb capabilities (report by Pavel Roskin).

20021019
	+ remove redundant initialization of TABSIZE in newterm(), since it is
	  already done in setupterm() (report by Philippe Blain).
	+ add test/inserts.c, to test winnstr() and winsch().
	+ replace 'sort' in dist.mk with script that sets locale to POSIX.
	+ update URLs in announce.html.in (patch by Frederic L W Meunier).
	+ remove glibc add-on files, which are no longer needed (report by
	  Frederic L W Meunier).

20021012 5.3 release for upload to ftp.gnu.org
	+ modify ifdef's in etip.h.in to allow the etip.h header to compile
	  with gcc 3.2 (patch by Dimitar Zhekov <jimmy@is-vn.bg>).
	+ add logic to setupterm() to make it like initscr() and newterm(),
	  by checking for $NCURSES_TRACE environment variable and enabling
	  the debug trace in that case.
	+ modify setupterm() to ensure that it initializes the baudrate, for
	  applications such as tput (report by Frank Henigman).
	+ modify definition of bits used for command-line and library debug
	  traces to avoid overlap, using new definition TRACE_SHIFT to relate
	  the two.
	+ document tput's interpretation of parameterized strings according to
	  whether parameters are given, etc. (discussion with Robert De Bath).

20021005 pre-release
	+ correct winnwstr() to account for non-character cells generated when
	  a double-width character is added (report by Michael Bienia
	  <michael@vorlon.ping.de>).
	+ modify _nc_viswbuf2n() to provide better results using wctomb().
	+ correct logic in _nc_varargs() which broke tracing of parameters for
	  formats such as "%.*s".
	+ correct scale factor in linux-c and linux-c-nc terminfo entries
	  (report Floyd Davidson).
	+ change tic -A option to -t, add the same option to infocmp for
	  consistency.
	+ correct "%c" implementation in lib_tparm.c, which did not map a null
	  character to a 128 (cf: 980620) (patch by Frank Henigman
	  <fjhenigman@mud.cgl.uwaterloo.ca>).

20020928 pre-release
	+ modify MKkey_defs.sh to check for POSIX sort -k option, use that if
	  it is found, to accommodate newer utility which dropped the
	  compatibility support for +number options (reported by Andrey A
	  Chernov).
	+ modify linux terminfo entry to use color palette feature from
	  linux-c-nc entry (comments by Tomasz Wasiak and Floyd Davidson).
	+ restore original color definitions in endwin() if init_color() was
	  used, and resume those colors on the next doupdate() or refresh()
	  (report by Tomasz Wasiak <tjwasiak@komputom.com.pl>).
	+ improve debug-traces by modifying MKlib_gen.sh to generate calls
	  to returnBool() and returnAttr().
	+ add/use _nc_visbufn() and _nc_viswbufn() to limit the debug trace
	  of waddnstr() and similar functions to match the parameters as used.
	+ add/use _nc_retrace_bool() and _nc_retrace_unsigned().
	+ correct type used by _nc_retrace_chtype().
	+ add debug traces to some functions in lib_mouse.c
	+ modify lib_addch.c to handle non-spacing characters.
	+ correct parameter of RemAttr() in lib_bkgd.c, which caused the c++
	  demo's boxes to lose the A_ALTCHARSET flag (broken in 20020629).
	+ correct width computed in _tracedump(), which did not account for
	  the attributes (broken in 20010602).
	+ modify test/tracemunch to replace addresses for windows other than
	  curscr, newscr and stdscr with window0, window1, etc.

20020921 pre-release
	+ redid fix for edit_man.sed path.
	+ workaround for Cygwin bug which makes subprocess writes to stdout
	  result in core dump.
	+ documented getbegx(), etc.
	+ minor fixes to configure script to use '%' consistently as a sed
	  delimiter rather than '@'.
	> patch by Philippe Blain:
	+ add check in lib_overlay.c to ensure that the windows to be merged
	  actually overlap, and in copywin(), limit the area to be touched
	  to the lines given for the destination window.

20020914 pre-release
	+ modified curses.h so that if the wide-character version is installed
	  overwriting /usr/include/curses.h, and if it relied on libutf8.h,
	  then applications that use that header for wide-character support
	  must define HAVE_LIBUTF8_H.
	+ modify putwin(), getwin() and dupwin() to allow them to operate on
	  pads (request by Philippe Blain).
	+ correct attribute-merging in wborder(), broken in 20020216 (report
	  by Tomasz Wasiak <tjwasiak@grubasek.komputom.com.pl>).
	> patch by Philippe Blain:
	+ corrected pop-counts in tparam_internal() to '!' and '~' cases.
	+ use sizeof(NCURSES_CH_T) in one place that used sizeof(chtype).
	+ remove some unused variables from mvcur test-driver.

20020907 pre-release
	+ change configure script to allow install of widec-character
	  (ncursesw) headers to overwrite normal (ncurses) headers, since the
	  latter is a compatible subset of the former.
	+ fix path of edit_man.sed in configure script, needed to regenerate
	  html manpages on Debian.
	+ fix mismatched enums in vsscanf.c, which caused warning on Solaris.
	+ update README.emx to reflect current patch used for autoconf.
	+ change web- and ftp-site to invisible-island.net
	> patch by Philippe Blain:
	+ change case for 'P' in tparam_internal() to indicate that it pops
	  a variable from the stack.
	+ correct sense of precision and width in parse_format(), to avoid
	  confusion.
	+ modify lib_tparm.c, absorb really_get_space() into get_space().
	+ modify getwin() and dupwin() to copy the _notimeout, _idlok and
	  _idcok window fields.
	+ better fix for _nc_set_type(), using typeMalloc().

20020901 pre-release
	+ change minor version to 3, i.e., ncurses 5.3
	+ update config.guess, config.sub
	+ retest build with each configure option; minor ifdef fixes.
	+ make keyname() return a null pointer rather than "UNKNOWN STRING" to
	  match XSI.
	+ modify handling of wide line-drawing character functions to use the
	  normal line-drawing characters when not in UTF-8 locale.
	+ add check/fix to comp_parse.c to suppress warning about missing acsc
	  string.  This happens in configurations where raw termcap information
	  is processed; tic already does this and other checks.
	+ modify tic's check for ich/ich1 versus rmir/smir to only warn about
	  ich1, to match xterm patch #70 notes.
	+ moved information for ripped-off lines into SCREEN struct to allow
	  use in resizeterm().
	+ add experimental wgetch_events(), ifdef'd with NCURSES_WGETCH_EVENTS
	  (adapted from patch by Ilya Zakharevich - see ncurses/README.IZ).
	+ amend check in kgetch() from 20020824 to look only for function-keys,
	  otherwise escape sequences are not resolved properly.
	> patch by Philippe Blain:
	+ removed redundant assignment to SP->_checkfd from newterm().
	+ check return-value of setupterm() in restartterm().
	+ use sizeof(NCURSES_CH_T) in a few places that used sizeof(chtype).
	+ prevent dupwin() from duplicating a pad.
	+ prevent putwin() from writing a pad.
	+ use typeRealloc() or typeMalloc() in preference to direct calls on
	  _nc_doalloc().

20020824
	+ add a check in kgetch() for cooked characters in the fifo to avoid
	  calling fifo_push() when a KEY_RESIZE is available (report/analysis
	  by Sam Varshavchik <mrsam@courier-mta.com>).
	+ fix an overlooked case for Redhat #68199 (Philippe Blain).
	+ ensure clearerr() is called before using ferror() e.g., in
	  lib_screen.c (report by Philippe Blain).

20020817
	+ modify lib_screen.c and lib_newwin.c to maintain the SCREEN-specific
	  pointers for curscr/stdscr/newscr when scr_save() and scr_restore()
	  modify the global curscr/stdscr/newscr variables.  Fixes Redhat
	  #68199.
	+ add checks for null pointer in calls to tparm() and tgoto() based on
	  FreeBSD bug report.  If ncurses were built with termcap support, and
	  the first call to tgoto() were a zero-length string, the result would
	  be a null pointer, which was not handled properly.
	+ correct a typo in terminfo.head, which gave the octal code for colon
	  rather than comma.
	+ remove the "tic -u" option from 20020810, since it did not account
	  for nested "tc=" clauses, and when that was addressed, was still
	  unsatisfactory.

20020810
	+ add tic -A option to suppress capabilities which are commented out
	  when translating to termcap.
	+ add tic -u option to provide older behavior of "tc=" clauses.
	+ modified tic to expand all but the final "tc=" clause in a termcap
	  entry, to accommodate termcap libraries which do not handle multiple
	  tc clauses.
	+ correct typo in curs_inopts.3x regarding CS8/CS7 usage (report by
	  Philippe Blain).
	+ remove a couple of redundant uses of A_ATTRIBUTES in expressions
	  using AttrOf(), which already incorporates that mask (report by
	  Philippe Blain).
	+ document TABSIZE variable.
	+ add NCURSES_ASSUMED_COLORS environment variable, to allow users to
	  override compiled-in default black-on-white assumption used in
	  assume_default_colors().
	+ correct an off-by-one comparison against max_colors in COLORFGBG
	  logic.
	+ correct a use of uninitialized memory found by valgrind (reported by
	  Olaf Buddenhagen <olafBuddenhagen@web.de>).
	+ modified wresize() to ensure that a failed realloc will not corrupt
	  the window structure, and to make subwindows fit within the resized
	  window (completes Debian #87678, Debian #101699)

20020803
	+ fix an off-by-one in lib_pad.c check for limits of pad (patch by
	  Philippe Blain).
	+ revise logic for BeOS in lib_twait.c altered in 20011013 to restore
	  logic used by lib_getch.c's support for GPM or EMX mouse (report by
	  Philippe Blain)
	+ remove NCURSES_CONST from several prototypes in curses.wide, to make
	  the --enable-const --enable-widec configure options to work together
	  (report by George Goffe <grgoffe@yahoo.com>).

20020727
	+ finish no-leak checking in cardfile.c, using this for testing changes
	  to resizeterm().
	+ simplify _nc_freeall() using delscreen().

20020720
	+ check error-return from _nc_set_tty_mode() in _nc_initscr() and
	  reset_prog_mode() (report/patch by Philippe Blain).
	+ regenerate configure using patch for autoconf 2.52, to address
	  problem with identifying C++ bool type.
	+ correct/improve logic to produce an exit status for errors in tput,
	  which did not exit with an error when told to put a string not in the
	  current terminfo entry (report by David Gomez <david@pleyades.net>).
	+ modify configure script AC_OUTPUT() call to work around defect in
	  autoconf 2.52 which adds an ifdef'd include to the generated
	  configure definitions.
	+ remove fstat() check from scr_init(), which also fixes a missing
	  include for <sys/stat.h> from 20020713 (reported by David Ellement,
	  fix suggested by Philippe Blain).
	+ update curs_scanw.3x manpage to note that XSI curses differs from
	  SVr4 curses: return-values are incompatible.
	+ correct several prototypes in manpages which used const
	  inconsistently with the curses.h file, and removed spurious const's
	  in a few places from curses.h, e.g., for wbkgd() (report by Glenn
	  Maynard <glenn@zewt.org>).
	+ change internal type used by tparm() to long, to work with LP64 model.
	+ modify nc_alloc.h to allow building with g++, for testing.

20020713
	+ add resize-handling to cardfile.c test program.
	+ altered resizeterm() to avoid having it fail when a child window
	  cannot be resized because it would be larger than its parent.  (More
	  work must be done on this, but it works well enough to integrate).
	+ improve a limit-check in lib_refresh.c
	+ remove check in lib_screen.c relating dumptime to file's modification
	  times, since that would not necessarily work for remotely mounted
	  filesystems.
	+ modify lrtest to simplify debugging changes to resizeterm, e.g.,
	  t/T commands to enable/disable tracing.
	+ updated status of multibyte support in TO-DO.
	+ update contact info in source-files (patch by Juergen Pfeifer).

20020706
	+ add Caps.hpux11, as an example.
	+ modify version_filter(), used to implement -R option for tic and
	  infocmp, to use computed array offsets based on the Caps.* file which
	  is actually configured, rather than constants which correspond to
	  the Caps file.
	+ reorganized lib_raw.c to avoid updating SP and cur_term state if the
	  functions fail (reported by Philippe Blain).
	+ add -Wundef to gcc warnings, adjust a few ifdef's to accommodate gcc.

20020629
	+ correct parameters to setcchar() in ncurses.c (cf: 20020406).
	+ set locale in most test programs (view.c and ncurses.c were the
	  only ones).
	+ add configure option --with-build-cppflags (report by Maksim A
	  Nikulin <M.A.Nikulin@inp.nsk.su>).
	+ correct a typo in wide-character logic for lib_bkgnd.c (Philippe
	  Blain).
	+ modify lib_wacs.c to not cancel the acsc, smacs, rmacs strings when
	  in UTF-8 locale.  Wide-character functions use Unicode values, while
	  narrow-character functions use the terminfo data.
	+ fix a couple of places in Ada95/samples which did not compile with
	  gnat 3.14
	+ modify mkinstalldirs so the DOS-pathname case is locale-independent.
	+ fix locale problem in MKlib_gen.sh by forcing related variables to
	  POSIX (C), using same approach as autoconf (set variables only if
	  they were set before).  Update MKterminfo.sh and MKtermsort.sh to
	  match.

20020622
	+ add charset to generated html.
	+ add mvterm entry, adapted from a FreeBSD bug-report by Daniel Rudy
	  <dcrudy@pacbell.net> -TD
	+ add rxvt-16color, ibm+16color entries -TD
	+ modify check in --disable-overwrite option so that it is used by
	  default unless the --prefix/$prefix value is not /usr, in attempt to
	  work around packagers, e.g., for Sun's freeware, who do not read the
	  INSTALL notes.

20020615
	+ modify wgetch() to allow returning ungetch'd KEY_RESIZE as a function
	  key code in get_wch().
	+ extended resize-handling in test/ncurses 'a' menu to the entire
	  stack of windows created with 'w' commands.
	+ improve $COLORFGBG feature by interpreting an out-of-range color
	  value as an SGR 39 or 49, for foreground/background respectively.
	+ correct a typo in configure --enable-colorfgbg option, and move it
	  to the experimental section (cf: 20011208).

20020601
	+ add logic to dump_entry.c to remove function-key definitions that do
	  not fit into the 1023-byte limit for generated termcaps.  This makes
	  hds200 fit.
	+ more improvements to tic's warnings, including logic to ignore
	  differences between delay values in sgr strings.
	+ move definition of KEY_RESIZE into MKkeydefs.sh script, to
	  accommodate Caps.osf1r5 which introduced a conflicting definition.

20020525
	+ add simple resize-handling in test/ncurses.c 'a' menu.
	+ fixes in keyname() and _tracechar() to handle negative values.
	+ make tic's warnings about mismatches in sgr strings easier to follow.
	+ correct tic checks for number of parameters in smgbp and smglp.
	+ improve scoansi terminfo entry, and add scoansi-new entry -TD
	+ add pcvt25-color terminfo entry -TD
	+ add kf13-kf48 strings to cons25w terminfo entry (reported by Stephen
	  Hurd <deuce@lordlegacy.org> in newsgroup lucky.freebsd.bugs) -TD
	+ add entrypoint _nc_trace_ttymode(), use this to distinguish the
	  Ottyb and Nttyb members of terminal (aka cur_term), for tracing.

20020523
	+ correct and simplify logic for lib_pad.c change in 20020518 (reported
	  by Mike Castle).

20020518
	+ fix lib_pad.c for case of drawing a double-width character which
	  falls off the left margin of the pad (patch by Kriang Lerdsuwanakij
	  <lerdsuwa@users.sourceforge.net>)
	+ modify configure script to work around broken gcc 3.1 "--version"
	  option, which adds unnecessary trash to the requested information.
	+ adjust ifdef's in case SIGWINCH is not defined, e.g., with DJGPP
	  (reported by Ben Decker <deckerben@freenet.de>).

20020511
	+ implement vid_puts(), vid_attr(), term_attrs() based on the narrow-
	  character versions as well.
	+ implement erasewchar(), killwchar() based on erasechar() and
	  killchar().
	+ modify erasechar() and killchar() to return ERR if the value was
	  VDISABLE.
	+ correct a bug in wresize() in handling subwindows (based on patch by
	  Roger Gammans <rgammans@computer-surgery.co.uk>, report by Scott Beck
	  <scott@gossamer-threads.com>).
	+ improve test/tclock.c by making the second-hand update more often
	  if gettimeofday() is available.

20020429
	+ workaround for Solaris sed with MKlib_gen.sh (reported by Andy
	  Tsouladze <andyt@mypoints.com>).

20020427
	+ correct return-value from getcchar(), making it consistent with
	  Solaris and Tru64.
	+ reorder loops that generate makefile rules for different models vs
	  subsets so configure --with-termlib works again.  This was broken by
	  logic added to avoid duplicate rules in changes to accommodate cygwin
	  dll's (reported by George.R.Goffe@seagate.com).
	+ update config.guess, config.sub

20020421
	+ modify ifdef's in write_entry.c to allow use of symbolic links on
	  platforms with no hard links, e.g., BeOS.
	+ modify a few includes to allow compile with BeOS, which has stdbool.h
	  with a conflicting definition for 'bool' versus its OS.h definition.
	+ amend MKlib_gen.sh to work with gawk, which defines 'func' as an
	  alias for 'function'.

20020420
	+ correct form of prototype for ripoffline().
	+ modify MKlib_gen.sh to test that all functions marked as implemented
	  can be linked.

20020413
	+ add manpages: curs_get_wstr.3x, curs_in_wchstr.3x
	+ implement wgetn_wstr().
	+ implement win_wchnstr().
	+ remove redefinition of unget_wch() in lib_gen.c (reported by
	  Jungshik Shin <jshin@jtan.com>).

20020406
	+ modified several of the test programs to allow them to compile with
	  vendor curses implementations, e.g., Solaris, AIX -TD

20020323
	+ modified test/configure to allow configuring against ncursesw.
	+ change WACS_xxx definition to use address, to work like Tru64 curses.

20020317
	+ add 'e' and 'm' toggles to 'a', 'A' tests in ncurses.c to demonstrate
	  effect of echo/noecho and meta modes.
	+ add 'A' test to ncurses.c to demonstrate wget_wch() and related
	  functions.
	+ add manpage: curs_get_wch.3x
	+ implement unget_wch().
	+ implement wget_wch().

20020310
	+ regenerated html manpages.
	+ add manpages: curs_in_wch.3x, curs_ins_wch.3x, curs_ins_wstr.3x
	+ implement wins_wch().
	+ implement win_wch().
	+ implement wins_nwstr(), wins_wstr().

20020309
	+ add manpages: curs_addwstr.3x, curs_winwstr.3x
	+ implement winnwstr(), winwstr().

20020223
	+ add manpages: curs_add_wchstr.3x, curs_bkgrnd.3x
	+ document wunctrl, key_name.
	+ implement key_name().
	+ remove const's in lib_box.c incorrectly leftover after splitting off
	  lib_box_set.c
	+ update llib-lncurses, llib-ncursesw, fix configure script related to
	  these.

20020218
	+ remove quotes on "SYNOPSIS" in man/curs_box_set.3x, which resulted
	  in spurious symlinks on install.

20020216
	+ implement whline_set(), wvline_set(), add manpage curs_border_set.
	+ add subtest 'b' to 'F' and 'f' in ncurses.c to demonstrate use of
	  box() and box_set() functions.
	+ add subtest 'u' to 'F' in ncurses.c, to demonstrate use of addstr()
	  given UTF-8 string equivalents of WACS_xxx symbols.
	+ minor fixes to several manpages based on groff -ww output.
	+ add descriptions of external variables of termcap interface to
	  the manpage (report by Bruce Evans <bde@zeta.org.au>).
	> patches by Bernhard Rosenkraenzer:
	+ correct configure option --with-bool, which was executed as
	  --with-ospeed.
	+ add quotes for parameters of --with-bool and --with-ospeed configure
	  options.
	> patch by Sven Verdoolaege (report by Gerhard Haering
	  <haering_linux@gmx.de>):
	+ correct typos in definitions of several wide-character macros:
	  waddwstr, wgetbkgrnd, mvaddwstr, mvwadd_wchnstr, mvwadd_wchnstr,
	  mvwaddwstr.
	+ pass $(CPPFLAGS) to MKlib_gen.sh, thereby fixing a missing definition
	  of _XOPEN_SOURCE_EXTENDED, e.g., on Solaris

20020209
	+ implement wide-acs characters for UTF-8 locales.  When in UTF-8
	  locale, ignore narrow version of acs.  Add 'F' test to test/ncurses.c
	  to demonstrate.
	+ correct prototype in keybound manpage (noted from a Debian mailing
	  list item).

20020202
	+ add several cases to the wscanw() example in testcurs.c, showing the
	  format.
	+ implement a simple vsscanf() fallback function which uses the %n
	  conversion to help parse the input data (prompted by discussion with
	  Albert Chin-A-Young).
	+ modify mk-1st.awk and test/Makefile.in to add $(LDFLAGS) when making
	  shared libraries, and to use $(CFLAGS) when linking test programs
	  (patch by Albert Chin-A-Young).
	+ add a call to _nc_keypad() in keypad() to accommodate applications
	  such as nvi, which use curses for output but not for input (fixes
	  Debian #131263, cf: 20011215).
	+ add entrypoints to resizeterm.c which provide better control over the
	  process:  is_term_resized() and resize_term().  The latter restores
	  the original design of resizeterm() before KEY_RESIZE was added in
	  970906.  Do this to accommodate 20010922 changes to view.c, but allow
	  for programs with their own sigwinch handler, such as lynx (reported
	  by Russell Ruby <russ@math.orst.edu>).

20020127
	+ fix a typo in change to mk-1st.awk, which broke the shared-library
	  makefile rules (reported by Martin Mokrejs).

20020126
	+ update config.guess, config.sub
	+ finish changes needed to build dll's on cygwin.
	+ fix a typo in mvwchat() macro (reported by Cy <yam@homerow.net).

20020119
	+ add case in lib_baudrate.c for B921600 (patch by Andrey A Chernov).
	+ correct missing sed-editing stage in manpage installs which is used
	  to rename manpages, broken in 20010324 fix for Debian #89939 (Debian
	  #78866).
	+ remove -L$(libdir) from linker flags, probably not needed any more
	  since HPUX is handled properly (reported by Niibe Yutaka
	  <gniibe@m17n.org>).
	+ add configure check for mbstate_t, needed for wide-character
	  configuration.  On some platforms we must include <wchar.h> to
	  define this (reported by Daniel Jacobowitz).
	+ incorporate some of the changes needed to build dll's on cygwin.

20020112a
	+ workaround for awk did not work with mawk, adjusted shell script.

20020112
	+ add Caps.osf1r5, as an example.
	+ modify behavior of can_clear_with() so that if an application is
	  running in a non-bce terminals with default colors enabled, it
	  returns true, allowing the user to select/paste text without picking
	  up extraneous trailing blanks (adapted from patch by Daniel
	  Jacobowitz <dmj+@andrew.cmu.edu>).
	+ modify generated curses.h to ifdef-out prototypes for extensions if
	  they are disabled, and to define curses_version() as a string in that
	  case.  This is needed to make the programs such as tic build in that
	  configuration.
	+ modified generated headers.sh to remove a gzip'd version of the
	  target file if it exists, in case non-gzip'd manpages are installed
	  into a directory where gzip'd ones exist.  In that case, the latter
	  would be found.
	+ corrected a redundant initialization of signal handlers from 20010922
	  changes.
	+ clarified bug-reporting address in terminfo.src (report by John H
	  DuBois III <spcecdt@armory.com>).
	> several fixes from Robert Joop:
	+ do not use "-v" option of awk in MKkey_defs.sh because it does not
	  work with SunOS nawk.
	+ modify definitions for libutf8 in curses.h to avoid redefinition
	  warnings for mblen
	+ quoted references to compiler in shell command in misc/Makefile, in
	  case it uses multiple tokens.

20011229
	+ restore special case from 20010922 changes to omit SA_RESTART when
	  setting up SIGWINCH handler, which is needed to allow wgetch() to be
	  interrupted by that signal.
	+ updated configure macro CF_WITH_PATHLIST, to omit some double quotes
	  not needed with autoconf 2.52
	+ revert configure script to autoconf 2.13 patched with
		autoconf-2.13-19990117.patch.gz (or later)
	  from
		ftp://invisible-island.net/autoconf/
	  because autoconf 2.52 macro AC_PROG_AWK does not work on HPUX 11.0
	  (report by David Ellement <ellement@sdd.hp.com>).  This also fixes a
	  different problem configuring with Mac OS X (reported by Marc Smith
	  <marc.a.smith@home.com>).

20011222
	+ modify include/edit_cfg.h to eliminate BROKEN_LINKER symbol from
	  term.h
	+ move prototype for _nc_vsscanf() into curses.h.in to omit
	  HAVE_VSSCANF symbol from curses.h, which was dependent upon the
	  ncurses_cfg.h file which is not installed.
	+ use ACS_LEN rather than SIZEOF(acs_map) in trace code of lib_acs.c,
	  to work with broken linker configuration, e.g., cygwin (report by
	  Robert Joop <rj@rainbow.in-berlin.de>).
	+ make napms() call _nc_timed_wait() rather than poll() or select(),
	  to work around broken implementations of these on cygwin.

20011218
	+ drop configure macro CF_WIDEC_SHIFT, since that was rendered obsolete
	  by Sven Verdoolaege's rewrite of wide-character support.  This makes
	  libncursesw incompatible again, but makes the header files almost the
	  same as in the narrow-character configuration.
	+ simplify definitions that combine wide/narrow versions of bkgd, etc.,
	  to eliminate differences between the wide/narrow versions of curses.h
	+ correct typo in configure macro CF_FUNC_VSSCANF
	+ correct location of call to _nc_keypad() from 20011215 changes which
	  prevented keypad() from being disabled (reported by Lars Hecking).

20011215
	+ rewrote ncurses 'a' test to exercise wgetch() and keypad() functions
	  better, e.g., by adding a 'w' command to create new windows which
	  may have different keypad() settings.
	+ corrected logic of keypad() by adding internal screen state to track
	  whether the terminal's keypad-mode has been set.  Use this in
	  wgetch() to update the keypad-mode according to whether the
	  associated window's keypad-mode has been set with keypad().  This
	  corrects a related problem restoring terminal state after handling
	  SIGTSTP (reported by Mike Castle).
	+ regenerate configure using patch for autoconf 2.52
		autoconf-2.52-patch.gz
	  at
		ftp://invisible-island.net/autoconf/
	+ update config.guess, config.sub from
		http://subversions.gnu.org/cgi-bin/viewcvs/config/config/
	+ minor changes to quoting in configure script to allow it to work
	  with autoconf 2.52

20011208
	+ modify final checks in lib_setup.c for line and col values, making
	  them independent.
	+ modify acs_map[] if configure --broken-linker is specified, to make
	  it use a function rather than an array (prompted by an incorrect
	  implementation in cygwin package).
	+ correct spelling of configure option --enable-colorfgbg, which
	  happened to work if --with-develop was set (noted in cygwin package
	  for ncurses).
	+ modify ifdef for genericerror() to compile with SUNWspro Sun WorkShop
	  6 update 1 C++ 5.2 (patch by Sullivan N Beck <sbeck@cise.ufl.edu>).
	+ add configure checks to see if ncurses' fallback vsscanf() will
	  compile either of the special cases for FILE structs, and if not,
	  force it to the case which simply returns an error (report by
	  Sullivan N Beck <sbeck@cise.ufl.edu> indicates that Solaris 8 with
	  64-bits does not allow access to FILE's fields).
	+ modify ifdef's for c++/cursesw.cc to use the fallback vsscanf() in
	  the ncurses library if no better substitute for this can be found
	  in the C++ runtime.
	+ modify the build to name dynamic libraries according to the
	  convention used on OS X and Darwin.  Rather than something like
	  libncurses.dylib.5.2, Darwin would name it libncurses.  5.dylib.
	  There are a few additional minor fixes, such as setting the library
	  version and compatibility version numbers (patch by Jason Evans
	  <jevans@apple.com>).
	+ use 'sh' to run mkinstalldirs, to work around problems with buggy
	  versions of 'make' on OS/2 (report by John Polterak <jp@eyup.org>).
	+ correct typo in manpage description of curs_set() (Debian #121548).
	+ replace the configure script existence-check for mkstemp() by one
	  that checks if the function works, needed for older glibc and
	  AmigaOS.

20011201
	+ modify script that generates fallbacks.c to compile a temporary
	  copy of the terminfo source in case the host does not contain all of
	  the entries requested for fallbacks (request by Greg Roelofs).
	+ modify configure script to accommodate systems such as Mac OS X whose
	  <stdbool.h> header defines a 'bool' type inconsistent with ncurses,
	  which normally makes 'bool' consistent with C++.  Include <stdbool.h>
	  from curses.h to force consistent usage, define a new type
	  NCURSES_BOOL and related that to the exported 'bool' as either a
	  typedef or definition, according to whether <stdbool.h> is present
	  (based on a bug report for tin 1.5.9 by Aaron Adams <adamsa@mac.com>).

20011124
	+ added/updated terminfo entries for M$ telnet and KDE konsole -TD

20011117
	+ updated/expanded Apple_Terminal and Darwin PowerPC terminfo entries
	  (Benjamin C W Sittler).
	+ add putty terminfo entry -TD
	+ if configuring for wide-curses, define _XOPEN_SOURCE_EXTENDED, since
	  this may not otherwise be defined to make test/view.c compile.

20011110
	+ review/correct several missing/generated items in curses.wide, sorted
	  the lists to make subsequent diff's easier to track.

20011103
	+ add manual pages for add_wch(), echo_wchar(), getcchar(),
	  mvadd_wch(), mvwadd_wch(), setcchar(), wadd_wch() and wecho_wchar().
	+ implement wecho_wchar()
	+ modify _tracedump() to handle wide-characters by mapping them to '?'
	  and control-characters to '.', to make the trace file readable.  Also
	  dynamically allocate the buffer used by _tracedump() for formatting
	  the results.
	+ modify T_CALLED/T_RETURN macros to ease balancing call/return lines
	  in a trace by using curly braces.
	+ implement _nc_viscbuf(), for tracing cchar_t arrays.
	+ correct trace-calls in setcchar() and getcchar() functions, which
	  traced the return values but not the entry to each function.
	+ correct usage message in test/view.c, which still mentioned -u flag.

20011027
	+ modify configure script to allow building with termcap only, or with
	  fallbacks only.  In this case, we do not build tic and toe.
	+ add configure --with-termpath option, to override default TERMPATH
	  value of /etc/termcap:/usr/share/misc/termcap.
	+ cosmetic change to tack: make menu descriptions agree with menu
	  titles.

20011020
	+ rewrote limit-checks in wscrl() and associated _nc_scroll_window(),
	  to ensure that if the parameter of wscrl() is larger than the size of
	  the scrolling region, then the scrolling region will be cleared
	  (report by Ben Kohlen <bckohlen@yahoo.com>).
	+ add trace/varargs.c, using this to trace parameters in lib_printw.c
	+ implement _tracecchar_t2() and _tracecchar_t().
	+ split-out trace/visbuf.c
	+ correct typo in lib_printw.c changes from 20010922 (report by Mike
	  Castle).

20011013
	+ modify run_tic.sh to check if the build is a cross-compile.  In that
	  case, do not use the build's tic to install the terminfo database
	  (report by Rafael Rodriguez Velilla <rrv@tid.es>).
	+ modify mouse click resolution so that mouseinterval(-1) will disable
	  it, e.g., to handle touchscreens via a slow connection (request by
	  Byron Stanoszek <gandalf@winds.org>).
	+ correct mouseinterval() default value shown in curs_mouse.3x
	+ remove conflicting definition of mouse_trafo() (reported by Lars
	  Hecking, using gcc 2.95.3).

20011001
	+ simpler fix for signal_name(), to replace the one overlooked in
	  20010929 (reported by Larry Virden).

20010929
	+ add -i option to view.c, to test ncurses' check for non-default
	  signal handler for SIGINT, etc.
	+ add cases for shared-libraries on Darwin/OS X (patch by Rob Braun
	  <bbraun@synack.net>).
	+ modify tset to restore original I/O modes if an error is encountered.
	  Also modify to use buffered stderr consistently rather than mixing
	  with write().
	+ change signal_name() function to use if-then-else rather than case
	  statement, since signal-values aren't really integers (reported by
	  Larry Virden).
	+ add limit checks in wredrawln(), fixing a problem where lynx was
	  repainting a pad which was much larger than the screen.

20010922
	+ fix:  PutRange() was counting the second part of a wide character as
	  part of a run, resulting in a cursor position that was one too far
	  (patch by Sven Verdoolaege).
	+ modify resizeterm() to not queue a KEY_RESIZE if there was no
	  SIGWINCH, thereby separating the two styles of SIGWINCH handling
	  in test/view.c
	+ simplified lib_tstp.c, modify it to use SA_RESTART flag for SIGWINCH.
	+ eliminate several static buffers in the terminfo compiler, using
	  allocated buffers.
	+ modify MKkeyname.awk so that keyname() does not store its result into
	  a static buffer that is overwritten by the next call.
	+ reorganize the output of infocmp -E and -e options to compile cleanly
	  with gcc -Wwrite-strings warnings.
	+ remove redefinition of chgat/wchgat/mvwchgat from curses.wide

20010915
	+ add label to test/view.c, showing the name of the last key or signal
	  that made the screen repaint, to make it clearer when a sigwinch
	  does this.
	+ use ExitProgram() consistently in the test-programs to make it
	  simpler to test leaks with dmalloc, etc.
	+ move hashtab static data out of hashmap.c into SCREEN struct.
	+ make NO_LEAK code compile with revised WINDOWLIST structs.

20010908
	+ modify tgetent() to check if exit_attribute_mode resets the alternate
	  character set, and if so, attempt to adjust the copy of the termcap
	  "me" string which it will return to eliminate that part.  In
	  particular, 'screen' would lose track of line-drawing characters
	  (report by Frederic L W Meunier <0@pervalidus.net>, analysis by
	  Michael Schroeder).

20010901
	+ specify DOCTYPE in html manpages.
	+ add missing macros for several "generated" functions:  attr_get(),
	  attr_off(), attr_on(), attr_set(), chgat(), mvchgat(), mvwchgat() and
	  mouse_trafo().
	+ modify view.c to agree with non-experimental status of ncurses'
	  sigwinch handler:
	  + change the sense of the -r option, making it default to ncurses'
	    sigwinch handler.
	  + add a note explaining what functions are unsafe in a signal
	    handler.
	  + add a -c option, to set color display, for testing.
	+ unset $data variable in MKterminfo.sh script, to address potential
	  infinite loop if shell malfunction (report by Samuel Mikes
	  <smikes@cubane.com>, for bash 2.05.0 on a Linux 2.0.36 system).
	+ change kbs in mach terminfo entries to ^?  (Marcus Brinkmann
	  <Marcus.Brinkmann@ruhr-uni-bochum.de>).
	+ correct logic for COLORFGBG environment variable: if rxvt is compiled
	  with xpm support, the variable has three fields, making it slightly
	  incompatible with itself.  In either case, the background color is
	  the last field.

20010825
	+ move calls to def_shell_mode() and def_prog_mode() before loop with
	  callbacks in lib_set_term.c, since the c++ demo otherwise initialized
	  the tty modes before saving them (patch by John David Anglin
	  <dave@hiauly1.hia.nrc.ca>).
	+ duplicate logic used to initialize trace in newterm(), in initscr()
	  to avoid confusing trace of initscr().
	+ simplify allocation of WINDOW and WINDOWLIST structs by making the
	  first a part of the second rather than storing a pointer.  This saves
	  a call to malloc for each window (discussion with Philippe Blain).
	+ remove unused variable 'used_ncv' from lib_vidattr.c (Philippe
	  Blain).
	+ modify c++/Makefile.in to accommodate archive programs that are
	  different for C++ than for C, and add cases for vendor's C++
	  compilers on Solaris and IRIX (report by Albert Chin-A-Young).
	+ correct manpage description of criteria for deciding if the terminal
	  supports xterm mouse controls.
	+ add several configure script options to aid with cross-compiling:
	  --with-build-cc, --with-build-cflags, --with-build-ldflags, and
	  --with-build-libs (request by Greg Roelofs).
	+ change criteria for deciding if configure is cross-compiling from
	  host/build mismatch to host/target mismatch (request by Greg Roelofs
	  <greg.roelofs@philips.com>).
	+ correct logic for infocmp -e and -E options which writes the data for
	  the ext_Names[] array.  This is needed if one constructs a fallback
	  table for a terminfo entry which uses extended termcap names, e.g.,
	  AX in a color xterm.
	+ fix undefined NCURSES_PATHSEP when configure --disable-database
	  option is given.

20010811
	+ fix for VALID_BOOLEAN() macro when char is not signed.
	+ modify 'clean' rule for C++ binding to work with Sun compiler, which
	  caches additional information in a subdirectory of the objects.
	+ added llib-ncursesw.

20010804
	+ add Caps.keys example for experimental extended function keys
	  (adapted from a patch by Ilya Zakharevich).
	+ correct parameter types of vidputs() and vidattr() to agree with
	  header files (report by William P Setzer).
	+ fix typos in several man-pages (patch by William P Setzer).
	+ remove unneeded ifdef for __GNUG__ in CF_CPP_VSCAN_FUNC configure
	  macro, which made ncurses C++ binding fail to build with other
	  C++ compilers such as HPUX 11.x (report by Albert Chin-A-Young).
	+ workaround for bug in HPUX 11.x C compiler: add a blank after
	  NCURSES_EXPORT macro in form.h (report by Albert Chin-A-Young)
	+ ignore blank lines in Caps* files in MKkey_defs.sh script (report by
	  Albert Chin-A-Young).
	+ correct definition of key_end in Caps.aix4, which left KEY_END
	  undefined (report by Albert Chin-A-Young).
	+ remove a QNX-specific fallback prototype for vsscanf(), which is
	  obsolete with QNX RTP.
	+ review/fix some of the T() and TR() macro calls, having noticed that
	  there was no data for delwin() in a trace of dialog because there was
	  no returnVoid call for wtimeout().  Also, traces in lib_twait.c are
	  now selected under TRACE_IEVENT rather than TRACE_CALLS.

20010728
	+ add a _nc_access() check before opening files listed via $TERMPATH.
	+ using modified man2html, regenerate some of the html manpages to fix
	  broken HREF's where the link was hyphenated.

20010721
	+ add some limit/pointer checks to -S option of tputs.
	+ updated/expanded Apple_Terminal and Darwin PowerPC terminfo entries
	  (Benjamin C W Sittler).
	+ add a note in curs_termcap.3x regarding a defect in the XSI
	  description of tgetent (based on a discussion with Urs Jansen
	  regarding the HPUX 11.x implementation, whose termcap interface is
	  not compatible with existing termcap programs).
	+ modify manhtml rule in dist.mk to preserve copyright notice on the
	  generated files, as well as to address HTML style issues reported by
	  tidy and weblint.  Regenerated/updated corresponding html files.
	+ comment out use of Protected_Character and related rarely used
	  attributes in ncurses Ada95 test/demo to compile with wide-character
	  configuration.

20010714
	+ implement a simple example in C++ demo to test scanw().
	+ corrected stdio function used to implement scanw() in cursesw.cc
	+ correct definition of RemAttr() macro from 20010602 changes, which
	  caused C++ SillyDemo to not show line-drawing characters.
	+ modify C++ binding, adding getKey() which can be overridden by user
	  to substitute functions other than getch() for keyboard processing
	  of forms and menus (patch by Juergen Pfeifer).

20010707
	+ fix some of the trace calls which needed modification to work with
	  new wide-character structures.
	+ modify magic-cookie code in tty_update.c to compile with new
	  wide-character structures (report by <George.R.Goffe@seagate.com>).
	+ ensure that _XOPEN_SOURCE_EXTENDED is defined in curses.priv.h if
	  compiling for wide-character configuration.
	+ make addwnstr() handle non-spacing characters (patch by Sven
	  Verdoolaege).

20010630
	+ add configure check to define _GNU_SOURCE, needed to prop up glibc
	  header files.
	+ split-out include/curses.wide to solve spurious redefinitions caused
	  by defining _GNU_SOURCE, and move includes for <signal.h> before
	  <curses.h> to work around misdefinition of ERR in glibc 2.1.3 header
	  file.
	+ extended ospeed change to NetBSD and OpenBSD -TD
	+ modify logic in lib_baudrate.c for ospeed, for FreeBSD to make it
	  work properly for termcap applications (patch by Andrey A Chernov).

20010623
	+ correct an overlooked CharOf/UChar instance (reports by Eugene Lee
	  <eugene@anime.net>, Sven Verdoolaege).
	+ correct unneeded ifdef for wunctrl() (reported by Sven Verdoolaege)

20010618
	+ change overlooked several CharOf/UChar instances.
	> several patches from Sven Verdoolaege:
	+ correct a typo in wunctrl(), which made it appear that botwc() was
	  needed (no such function: use btowc()).
	+ reimplement wide-character demo in test/view.c, using new functions.
	+ implement getcchar(), setcchar(), wadd_wchnstr() and related macros.
	+ fix a syntax problem with do/if/while in PUTC macro (curses.priv.h).

20010616
	+ add parentheses in macros for malloc in test.priv.h, fixes an
	  expression in view.c (report by Wolfgang Gutjahr <gutw@knapp.co.at>).
	+ add Caps.uwin, as an example.
	+ change the way curses.h is generated, making the list of function
	  key definitions extracted from the Caps file.
	+ add #undef's before possible redefinition of ERR and OK in curses.h
	+ modify logic in tic, toe, tput and tset which checks for basename of
	  argv[0] to work properly on systems such as OS/2 which have
	  case-independent filenames and/or program suffixes, e.g., ".ext".

20010609
	+ add a configure check, if --enable-widec is specified, for putwc(),
	  which may be in libutf8.
	+ remove some unnecessary text from curs_extend.3x and
	  default_colors.3x which caused man-db to make incorrect symbolic
	  links (Debian #99550).
	+ add configure check if cast for _IO_va_list is needed to compile
	  C++ vscan code (Debian #97945).
	> several patches from Sven Verdoolaege:
	+ correct code that used non-standard auto-initialization of a struct,
	  which gcc allows (report by Larry Virden).
	+ use putwc() in PUTC() macro.
	+ make addstr() work for the special case where the codeset is
	  non-stateful (eg. UTF-8), as well as stateful codesets.

20010603
	+ correct loop expression in NEXT_CHAR macro for lib_addstr.c changes
	  from 20010602 (report by Mike Castle).

20010602
	+ modify mvcur() to avoid emitting newline characters when nonl() mode
	  is set.  Normally this is not a problem since the actual terminal
	  mode is set to suppress nl/crlf translations, however it is useful to
	  allow the caller to manipulate the terminal mode to avoid staircasing
	  effects after spawning a process which writes messages (for lynx
	  2.8.4) -TD
	> several patches from Sven Verdoolaege <skimo@kotnet.org>:
	+ remove redundant type-conversion in fifo_push()
	+ correct definition of addwstr() macro in curses.h.in
	+ remove _nc_utf8_outch()
	+ rename most existing uses of CharOf() to UChar(), e.g., where it is
	  used to prevent sign-extension in ctype macros.
	+ change some chtype's to attr_t's where the corresponding variables
	  are used to manipulate attributes.
	+ UpdateAttr() was applied to both attributes (attr_t) and characters
	  (chtype).  Modify macro and calls to it to make these distinct.
	+ add CharEq() macro, use in places where wide-character configuration
	  implementation uses a struct for cchar_t.
	+ moved struct ldat into curses.priv.h, to hide implementation details.
	+ change CharOf() macro to use it for masking A_CHARTEXT data from
	  chtype's.
	+ add L() macro to curses.priv.h, for long-character literals.
	+ replace several assignments from struct ldat entries to chtype or
	  char values with combinations of CharOf() and AttrOf() macros.
	+ add/use intermediate ChAttrOf() and ChCharOf() macros where we know
	  we are using chtype data.
	+ add/use lowlevel attribute manipulation macros AddAttr(), RemAttr()
	  and SetAttr().
	+ add/use SetChar() macro, to change a cchar_t based on a character and
	  attributes.
	+ convert most internal use of chtype to NCURSES_CH_T, to simplify use
	  of cchar_t for wide-character configuration.  Similarly, use ARG_CH_T
	  where a pointer would be more useful.
	+ add stubs for tracing cchar_t values.
	+ add/use macro ISBLANK()
	+ add/use constructors for cchar_t's: NewChar(), NewChar2().
	+ add/use macros CHREF(), CHDEREF(), AttrOfD(), CharOfD() to facilitate
	  passing cchar_t's by address.
	+ add/use PUTC_DATA, PUTC() macros.
	+ for wide-character configuration, move the window background data to
	  the end of the WINDOW struct so that whether _XOPEN_SOURCE_EXTENDED
	  is defined or not, the offsets in the struct will not change.
	+ modify addch() to work with wide-characters.
	+ mark several wide-character functions as generated in curses.h.in
	+ implement wunctrl(), wadd_wch(), wbkgrndset(), wbkgrnd(),
	  wborder_set() and waddnwstr().

20010526
	+ add experimental --with-caps=XXX option to customize to similar
	  terminfo database formats such as AIX 4.x
	+ add Caps.aix4 as an example.
	+ modify Caps to add columns for the the KEY_xxx symbols.
	+ modify configure --with-widec to suppress overwrite of libcurses.so
	  and curses.h
	+ add checks to toe.c to avoid being confused by files and directories
	  where we would expect the reverse, e.g., source-files in the
	  top-level terminfo levels as is the case for AIX.

20010519
	+ add top-level 'depend' rule for the C sources, assuming that the
	  makedepend program is available.  As a side-effect, this makes
	  the generated sources, as in "make sources" (prompted by a report
	  by Mike Castle that "make -j" fails because the resulting parallel
	  processes race to generate ncurses/names.c).
	+ modify configure script so that --disable-overwrite option's action
	  to add a symbolic link for libcurses applies to the static library as
	  well as the shared library when both are configured (report by Felix
	  Natter <f.natter@ndh.net>).
	+ add ELKS terminfo entries (Federico Bianchi
	  <bianchi@www.arte.unipi.it>)
	+ add u6 (CSR) to Eterm (Michael Jennings).

20010512
	+ modify test/ncurses.c to work with xterm-256color, which has fewer
	  color pairs than colors*colors (report by David Ellement
	  <ellement@sdd.hp.com>).

20010505
	+ corrected screen.xterm-xfree86 entry.
	+ update comment in Caps regarding IBM (AIX) function-key definitions.

20010421
	+ modify c++/Makefile.in to link with libncurses++w.a when configured
	  for wide-characters (patch by Sven Verdoolaege).
	+ add check in _nc_trace_buf() to refrain from freeing a null pointer.
	+ improve CF_PROG_INSTALL macro using CF_DIRNAME.
	+ update config.guess, config.sub from autoconf 2.49e (alpha).

20010414
	+ add secondary check in tic.c, similar_sgr() to see if the reason
	  for mismatch was that the individual capabilities used a time-delay
	  while sgr did not.  Used this to cleanup mismatches, e.g., in vt100,
	  and remove time-delay from Apple_Terminal entries.
	+ add Apple_Terminal terminfo entries (Benjamin C W Sittler
	  <bsittler@iname.com>).
	+ correct definitions of shifted editing keys for xterm-xfree86 -TD
	+ fix a bug in test/bs.c from 20010407 (patch by Erik Sigra).
	+ prevent relative_move() from doing an overwrite if it detects 8-bit
	  characters when configured for UTF-8 (reported by Sven Verdoolaege
	  <skimo@kotnet.org>).

20010407
	+ add configure checks for strstream.h vscan function, and similar
	  stdio-based function which may be used in C++ binding for gcc 3.0
	  (reports by George Goffe, Lars Hecking, Mike Castle).
	+ rewrite parts of configure.in which used changequote().  That feature
	  is broken in the latest autoconf alphas (e.g., 2.49d).
	+ add a missing pathname for ncurses_dll.h, needed when building in
	  a directory outside the source tree (patch by Sven Verdoolaege
	  <skimo@kotnet.org>).
	> fix 2 bugs in test/bs.c Erik Sigra <sigra@home.se>:
	+ no ships were ever placed in the last row or in the last column.
	  This made the game very easy to win, because you never had to waste
	  any shots there, but the computer did.
	+ the squares around a sunken ship that belonged to the player were not
	  displayed as already hit by the computer, like it does for the
	  player.

20010331
	+ add some examples of customizing screen's terminfo:
	  screen.xterm-xfree86, screen.xterm-r6, screen.teraterm -TD
	+ modify screen's terminfo entry to match the khome/kend in screen
	  3.09.08 (Debian #92215).
	+ correct a memory leak in forms library (report by Stefan Vogtner
	  <stefan@vogtner.de>) (patch by Juergen Pfeifer).

20010324
	+ change symbols used to guard against repeated includes to begin
	  consistently with "NCURSES_" rather than a leading underscore.  There
	  are other symbols defined in the header files which begin with a
	  leading underscore, but they are part of the legacy interface.
	+ reorder includes in c++ binding so that rcs identifiers can be
	  compiled-in.
	+ add .cc.ii rule to c++ makefile, to get preprocessor output for
	  debugging.
	+ correct configure script handling of @keyword@ substitutions when the
	  --with-manpage-renames option is given (cf: 20000715, fixes Debian
	  #89939).
	+ report stack underflow/overflow in tparm() when tic -cv option is
	  given.
	+ remove spurious "%|" operator from xterm-xfree86 terminfo entry,
	  (reported by Adam Costello <amc@cs.berkeley.edu>, Debian #89222).

20010310
	+ cleanup of newdemo.c, fixing some ambiguous expressions noted by gcc
	  2.95.2, and correcting some conflicting color pair initializations.
	+ add missing copyright notice for cursesw.h
	+ review, make minor fixes for use of '::' for referring to C-language
	  interface from C++ binding.
	+ modify configure check for g++ library slightly to accommodate
	  nonstandard version number, e.g., <vendor>-2.7 (report by Ronald Ho
	  <rho@mipos2.intel.com>).
	+ add configure check for c++ <sstream> header, replace hardcoded
	  ifdef.
	+ workaround for pre-release of gcc 3.0 libstdc++, which has dropped
	  vscan from strstreambuf to follow standard, use wrapper for C vscanf
	  instead (report by George Goffe <grgoffe@excite.com> and Matt Taggart
	  <taggart@carmen.fc.hp.com>, fixes Debian .

20010303
	+ modify interface of _nc_get_token() to pass 'silent' parameter to it,
	  to make quieter loading of /etc/termcap (patch by Todd C Miller).
	+ correct a few typos in curs_slk.3x and curs_outopts.3x manpages
	  (patch by Todd C Miller).

20010224
	+ compiler-warning fixes (reported by Nelson Beebe).

20010210
	+ modify screen terminfo entry to use new 3.9.8 feature allowing xterm
	  mouse controls -TD

20010203
	+ broaden patterns used to match OS/2 EMX in configure script to cover
	  variant used in newer config.guess/config.sub
	+ remove changequote() calls from configure script, since this feature
	  is broken in the autoconf 2.49c alpha, maintainers decline to fix.
	+ remove macro callPutChar() from tty_update.c, since this is no longer
	  needed (reported by Philippe Blain).
	+ add a null-pointer check in tic.c to handle the case when the input
	  file is really empty.  Modify the next_char() function in comp_scan.c
	  to allow arbitrarily long lines, and incidentally supply a newline to
	  files that do not end in a newline.  These changes improve tic's
	  recovery from attempts to read binary files, e.g., its output from
	  the terminfo database (reported by Bernhard Rosenkraenzer).

20010127
	+ revert change to c++/demo.cc from 20001209, which changed definition
	  of main() apparently to accommodate cygwin linker, but broke the demo
	  program.
	+ workaround for broken egcs 2.91.66 which calls member functions
	  (i.e., lines() and colors() of NCursesWindow before calling its
	  constructor.  Add calls to initialize() in a few constructors which
	  did not do this already.
	+ use the GNAT preprocessor to make the necessary switch between TRACE
	  and NO_TRACE configurations (patch by Juergen Pfeifer).
	> patches by Bernhard Rosenkraenzer:
	+ modify kterm terminfo entry to use SCS sequence to support alternate
	  character set (it does not work with SI/SO).
	+ --with-ospeed=something didn't work.  configure.in checked for a
	  $enableval where it should check for $withval.  Also,
	  ncurses/llib-lncurses still had a hardcoded short.

20010114
	+ correction to my merge of Tom Riddle's patch that broke tic in some
	  conditions (reported by Enoch Wexler <enoch@wexler.co.il>) -TD

20010113
	+ modify view.c to test halfdelay().  Like other tests, this recognizes
	  the 's' and space commands for stopping/starting polled input, shows
	  a freerunning clock in the header.  If given a parameter to 's', that
	  makes view.c use halfdelay() with that parameter rather than
	  nodelay().
	+ fix to allow compile with the experimental configure option
	  --disable-hashmap.
	+ modify postprocess_termcap() to avoid overwriting key_backspace,
	  key_left, key_down when processing a non-base entry (report/patch by
	  Tom Riddle).
	+ modify _nc_wrap_entry(), adding option to reallocate the string
	  table, needed in _nc_merge_entry() when merging termcap entries.
	  (adapted from report/patch by Tom Riddle <ftr@oracom.com>).
	+ modify a few configure script macros to keep $CFLAGS used only for
	  compiler options, preprocessor options in $CPPFLAGS.

20001230
	+ correct marker positions in lrtest.c after receiving a sigwinch.
	+ fix ifdef's in ncurses.c to build against pre-5.2 for testing.
	+ fixes to tclock for resizing behavior, redundant computation (report
	  and patch by A M Kuchling <akuchlin@mems-exchange.org>).

20001216
	+ improved scoansi terminfo entry -TD
	+ modify configure script and makefile in Ada95/src to compile a stub
	  for the trace functions when ncurses does not provide those.

20001209
	+ add ncurses_dll.h and related definitions to support generating DLL's
	  with cygwin (adapted from a patch by Charles Wilson
	  <cwilson@ece.gatech.edu>, changed NCURSES_EXPORT macro to make it
	  work with 'indent') -TD

20001202
	+ correct prototypes for some functions in curs_termcap.3x, matching
	  termcap.h, which matches X/Open.
	> patch by Juergen Pfeifer:
	+ a revised version of the Ada enhancements sent in by "H.
	  Nanosecond", aka Eugene V Melaragno <aldomel@ix.netcom.com>.  This
	  patch includes
	  - small fixes to the existing ncurses binding
	  - addition of some more low-level functions to the binding, including
	    termcap and terminfo functions
	  - An Ada implementation of the "ncurses" test application originally
	    written in C.

20001125
	+ modify logic in lib_setup.c to allow either lines or columns value
	  from terminfo to be used if the screen size cannot be determined
	  dynamically rather than requiring both (patch by Ehud Karni
	  <ehud@unix.simonwiesel.co.il>).
	+ add check in lib_tgoto.c's is_termcap() function to reject null or
	  empty strings (reported by Valentin Nechayev <netch@netch.kiev.ua> to
	  freebsd-bugs).
	+ add definition from configure script that denotes the path-separator,
	  which is normally a colon.  The path-separator is a semicolon on
	  OS/2 EMX and similar systems which may use a colon within pathnames.
	+ alter logic to set default for --disable-overwrite option to set it
	  to 'yes' if the --prefix/$prefix value is not /usr/local, thereby
	  accommodating the most common cause of problems: gcc's nonstandard
	  search rules.  Other locations such as /usr/local/ncurses will
	  default to overwriting (report by Lars Hecking <lhecking@nmrc.ie>).

20001118
	+ modify default for --disable-overwrite configure option to disable
	  if the --prefix or $prefix value is not /usr.
	+ add cygwin to systems for which ncurses is installed by default into
	  /usr rather than /usr/local.

20001111
	+ minor optimization in comp_error.c and lib_termname.c, using
	  strncat() to replace strncpy() (patch by Solar Designer).
	+ add a use_terminfo_vars() check for $HOME/.termcap, and check for
	  geteuid() to use_terminfo_vars() (patch by Solar Designer
	  <solar@false.com>).
	+ improved cygwin terminfo entry, based on patch by
	  <ernie_boyd@yahoo.com>.
	+ modify _nc_write_entry() to allow for the possibility that linking
	  aliases on a filesystem that ignores case would not succeed because
	  the source and destination differ only by case, e.g., NCR260VT300WPP0
	  on cygwin (report by Neil Zanella).
	+ fix a typo in the curs_deleteln.3x man page (patch by Bernhard
	  Rosenkraenzer <bero@redhat.de>).

20001104
	+ add configure option --with-ospeed to assist packagers in transition
	  to 5.3 change to ospeed type.
	+ add/use CharOf() macro to suppress sign-extension of char type on
	  platforms where this is a problem in ctype macros, e.g., Solaris.
	+ change trace output to binary format.
	+ correct a missing quote adjustment in CF_PATH_SYNTAX autoconf
	  macro, for OS/2 EMX configuration.
	+ rearrange a few configure macros, moving preprocessor options to
	  $CPPFLAGS (a now-obsolete version of autoconf did not consistently
	  use $CPPFLAGS in both the compile and preprocessor checks).
	+ add a check in relative_move() to guard against buffer overflow in
	  the overwrite logic.

20001028
	+ add message to configure script showing g++ version.
	+ resync config.guess, config.sub
	+ modify lib_delwin.c, making it return ERR if the window did not exist
	  (suggested by Neil Zanella).
	+ add cases for FreeBSD 3.1 to tdlint and makellib scripts, used this
	  to test/review ncurses library.  (Would use lclint, but it doesn't
	  work).
	+ reorganized knight.c to avoid forward references.  Correct screen
	  updates when backtracking, especially to the first cell.  Add F/B/a
	  commands.

20001021 5.2 release for upload to ftp.gnu.org
	+ update generated html files from manpages.
	+ modify dist.mk to use edit_man.sh to substitute autoconf'd variables
	  in html manpages.
	+ fix an uninitialized pointer in read_termcap.c (report by Todd C
	  Miller, from report/patch by Philip Guenther <guenther@gac.edu>).
	+ correct help-message and array limit in knight.c (patch by Brian
	  Raiter <breadbox@muppetlabs.com>).
	> patch by Juergen Pfeifer:
	+ fix to avoid warning by GNAT-3.13p about use of inconsistent casing
	  for some identifiers defined in the standard package.
	+ cosmetic change to forms/fty_enum.c

20001014
	+ correct an off-by-one position in test/railroad.c which could cause
	  wrapping at the right margin.
	+ test/repair some issues with libtool configuration.  Make
	  --disable-echo force libtool --silent.  (Libtool does not work for
	  OS/2 EMX, works partly for SCO - libtool is still very specific to
	  gcc).
	+ change default of --with-manpage-tbl to "no", since for most of the
	  platforms which do have tbl installed, the system "man" program
	  understands how to run tbl automatically.
	+ minor improvement to force_bar() in comp_parse.c (Bernhard
	  Rosenkraenzer <bero@redhat.de>).
	+ modify lib_tparm.c to use get_space() before writing terminating
	  null character, both for consistency as well as to ensure that if
	  save_char() was called immediately before, that the allocated memory
	  is enough (patch by Sergei Ivanov).
	+ add note about termcap ML capability which is duplicated between two
	  different capabilities:  smgl and smglr (reported by Sergei Ivanov
	  <svivanov@pdmi.ras.ru>).
	+ correct parameter counts in include/Caps for dclk as well as some
	  printer-specific capabilities: csnm, defc, scs, scsd, smgtp, smglp.
	> patch by Johnny C Lam <lamj@stat.cmu.edu>:
	+ add support for building with libtool (apparently version 1.3.5,
	  since old versions do not handle -L../lib), using new configure
	  option --with-libtool.
	+ add configure option --with-manpage-tbl, which causes the manpages to
	  be preprocessed by tbl(1) prior to installation,
	+ add configure option --without-curses-h, which causes the
	  installation process to install curses.h as ncurses.h and make
	  appropriate changes to headers and manpages.

20001009
	+ correct order of options/parameters in run_tic.in invocation of tic,
	  which did not work with standard getopt() (reported by Ethan
	  Butterfield <primus@veris.org>).
	+ correct logic for 'reverse' variable in lib_vidattr.c, which was
	  setting it true without checking if newmode had A_REVERSE set, e.g.,
	  using $TERM=ansi on OS/2 EMX (see 20000917).
	> patch by Todd C Miller:
	+ add a few missing use_terminfo_vars() and fixes up _nc_tgetent().
	  Previously, _nc_cgetset() would still get called on cp so the
	  simplest thing is to set cp to NULL if !use_terminfo_vars().
	+ added checks for an empty $HOME environment variable.
	> patches for OS/2 EMX (Ilya Zakharevich):
	+ modify convert_configure.pl to support INSTALL.  Change compiler
	  options in that script to use multithreading, needed for the mouse.
	+ modify OS/2 mouse support, retrying as a 2-button mouse if code fails
	  to set up a 3-button mouse.
	+ improve code for OS/2 mouse support, using _nc_timed_wait() to
	  replace select() call.

20001007
	+ change type of ospeed variable back to short to match its use in
	  legacy applications (reported by Andrey A Chernov).
	+ add case to configure script for --enable-rpath on IRIX (patch by
	  Albert Chin-A-Young).
	+ minor fix to position_check() function, to ensure it gets the whole
	  cursor report before decoding.
	+ add configure option --disable-assumed-color, to allow pre-5.1
	  convention of default colors used for color-pair 0 to be configured
	  (see assume_default_colors()).
	+ rename configure option --enable-hashmap --disable-hashmap, and
	  reorder the configure options, splitting the experimental and
	  development
	+ add configure option --disable-root-environ, which tells ncurses to
	  disregard $TERMINFO and similar environment variables if the current
	  user is root, or running setuid/setgid (based on discussion with
	  several people).
	+ modified misc/run_tic.in to use tic -o, to eliminate dependency on
	  $TERMINFO variable for installs.
	+ add table entry for plab_norm to tput, so it passes in strings
	  for that capability.
	+ modify parse_format() in lib_tparm.c to ignore precision if it is
	  longer than 10000 (report by Jouko Pynnonen).
	+ rewrote limit checks in lib_mvcur.c using new functions
	  _nc_safe_strcat(), etc.  Made other related changes to check lengths
	  used for strcat/strcpy (report by Jouko Pynnonen
	  <jouko@solutions.fi>).

20000930
	+ modify several descriptions, including those for setaf, setab, in
	  include/Caps to indicate that the entries are parameterized.  This
	  information is used to tell which strings are translated when
	  converting to termcap.  Fixes a problem where the generated termcap
	  would contain a spurious "%p1" for the terminfo "%p1%d".
	+ modify ld -rpath options (e.g., Linux, and Solaris) to use an
	  absolute pathname for the build tree's lib directory (prompted by
	  discussion with Albert Chin-A-Young).
	+ modify "make install.man" and "make uninstall.man" to include tack's
	  man-page.
	+ various fixes for install scripts used to support configure --srcdir
	  and --with-install-prefix (reported by Matthew Clarke
	  <Matthew_Clarke@mindlink.bc.ca>).
	+ make configure script checks on variables $GCC and $GXX consistently
	  compare against 'yes' rather than test if they are nonnull, since
	  either may be set to the corresponding name of the C or C++ compiler
	  (report/patch by Albert Chin-A-Young).

20000923
	+ modify rs2 capability in xterm-r6 and similar where cursor
	  save/restore bracketed the sequence for resetting video attributes.
	  The cursor restore would undo that (report by John Hawkinson
	  <jhawk@MIT.EDU> (see NetBSD misc/11052)).
	+ using parameter check added to tic, corrected 27 typos in
	  terminfo.src -TD
	+ modify tic to verify that its inputs are really files, in case
	  someone tries to read a directory (or /dev/zero).
	+ add a check for empty buffers returned by fgets() in comp_scan.c
	  next_char() function, in case tic is run on a non-text file (fixes
	  a core dump reported by Aaron Campbell <aaron@cs.dal.ca>).
	+ add to railroad.c some code exercising tgoto(), providing an
	  alternate form of display if the terminal supports cursor addressing.
	+ split-out tgoto() again, this time into new file lib_tgoto.c, and
	  implement a conventional BSD-style tgoto() which is used if the
	  capability string does not contain terminfo-style padding or
	  parameters (requested by Andrey A Chernov).
	+ add check to tic which reports capabilities that do not reference
	  the expected number of parameters.
	+ add error checking to infocmp's -v and -m options to ensure that
	  the option value is indeed a number.
	+ some cleanup of logic in _nc_signal_handler() to verify if SIGWINCH
	  handler is setup.  Separated the old/new sigaction data for SIGTSTP
	  from the other signals.

20000917
	+ add S0, E0 extensions to screen's terminfo entry, which is another
	  way to solve the misconfiguration issue -TD
	+ completed special case for tgoto from 20000916

20000916
	+ update xterm terminfo entries to match XFree86 xterm patch #146 -TD
	+ add Matrix Orbital terminfo entries (from Eric Z Ayers
	  <eric@ale.org>).
	+ add special case to lib_tparm.c to allow 'screen' program to use a
	  termcap-style parameter "%." to tgoto() for switching character sets.
	+ use LN_S substitution in run_tic.in, to work on OS/2 EMX which has
	  no symbolic links.
	+ updated notes in README.emx regarding autoconf patches.
	+ replace a lookup table in lib_vidattr.c used to decode no_color_video
	  with a logic expression (suggested by Philippe Blain).
	+ add a/A toggle to ncurses.c 'b' test, which clears/sets alternate
	  character set attribute from the displayed text.
	+ correct inequality in parameter analysis of rewritten lib_tparm.c
	  which had the effect of ignoring p9 in set_attributes (sgr), breaking
	  alternate character set (reported by Piotr Majka <charvel@link.pl>).
	+ correct ifdef'ing for GCC_PRINTF, GCC_SCANF which would not compile
	  with Sun WorkShop compilers since these tokens were empty (cf:
	  20000902, reported by Albert Chin-A-Young).

20000909
	+ correct an uninitialized parameter to open_tempfile() in tic.c which
	  made "tic -I" give an ambiguous error message about tmpnam.
	+ add special case in lib_vidattr.c to reset underline and standout for
	  devices that have no sgr0 defined (patch by Don Lewis
	  <Don.Lewis@tsc.tdk.com>).  Note that this will not work for bold
	  mode, since there is no exit-bold-mode capability.
	+ improved patch for Make_Enum_Type (patch by Juergen Pfeifer).
	+ modify tparm to disallow arithmetic on strings, analyze the varargs
	  list to read strings as strings and numbers as numbers.
	+ modify tparm's internal function spop() to treat a null pointer as
	  an empty string.
	+ modify tput program so it can be renamed or invoked via a link as
	  'reset' or 'init', producing the same effect as 'tput reset' or 'tput
	  init'.
	+ add private entrypoint _nc_basename(), use to consolidate related
	  code in progs, as well as accommodating OS/2 EMX pathnames.
	+ remove NCURSES_CONST line from edit_cfg.sh to compensate for its
	  removal (except via AC_SUBST) from configure.in, making
	  --enable-const work again (reported by Juergen Pfeifer).
	+ regen'd configure to pick up "hpux*" change from 20000902.

20000902
	+ modify tset.c to check for transformed "reset" program name, if any.
	+ add a check for null pointer in Make_Enum_Type() (reported by Steven
	  W Orr <steveo@world.std.com>).
	+ change functions _nc_parse_entry() and postprocess_termcap() to avoid
	  using strtok(), because it is non-reentrant (reported by Andrey A
	  Chernov <ache@nagual.pp.ru>).
	+ remove "hpux10.*" case from CF_SHARED_OPTS configure script macro.
	  This differed from the "hpux*" case by using reversed symbolic
	  links, which made the 5.1 version not match the configuration of
	  5.0 shared libraries (reported by Albert Chin-A-Young).
	+ correct a dependency in Ada95/src/Makefile.in which prevented
	  building with configure --srcdir (patch by H Nanosecond
	  <aldomel@ix.netcom.com>).
	+ modify ifdef's in curses.h.in to avoid warning if GCC_PRINTF or
	  GCC_SCANF was not previously defined (reported by Pavel Roskin
	  <proski@gnu.org>).
	+ add MKncurses_def.sh to generate fallback definitions for
	  ncurses_cfg.h, to quiet gcc -Wundef warnings, modified ifdef's in
	  code to consistently use "#if" rather than "#ifdef".

20000826
	+ add QNX qansi entries to terminfo -TD
	+ add os2 entry to misc/emx.src (<jmcoopr@webmail.bmi.net>).
	+ add configure option --with-database to allow specifying a different
	  terminfo source-file to install.  On OS/2 EMX, this defaults to
	  misc/emx.src
	+ change misc/run_tic.sh to derive it from misc/run_tic.in, to simplify
	  setting .exe extension on OS/2 EMX.
	+ add .exe extension in Ada95/gen/Makefile.in,
	  Ada95/samples/Makefile.in, for OS/2 EMX (reported by
	  <jmcoopr@webmail.bmi.net>).
	+ add configure check for filesystems (such as OS/2 EMX) which do not
	  distinguish between upper/lowercase filenames, use this to fix tags
	  rules in makefiles.
	+ initialize fds[] array to 0's in _nc_timed_wait(); apparently poll()
	  only sets the revents members of that array when there is activity
	  corresponding to the related file (report by Glenn Cooper
	  <gcooper@qantas.com.au>, using Purify on Solaris 5.6).
	+ change configure script to use AC_CANONICAL_SYSTEM rather than
	  AC_CANONICAL_HOST, which means that configure --target will set
	  a default program-prefix.
	+ add note on cross-compiling to INSTALL (which does not rely on the
	  AC_CANONICAL_* macros).

20000819
	+ add cases for EMX OS/2 to config.guess, config.sub
	+ new version of config.guess, config.sub from lynx 2.8.4dev.7
	+ add definitions via transform.h to allow tic and tput to check for
	  the transformed aliases rather than the original infotocap, etc.
	+ simplify transform-expressions in progs/Makefile.in, make the
	  uninstall rule work for transformed program names.
	+ change symbol used by --install-prefix configure option from
	  INSTALL_PREFIX to DESTDIR (the latter has become common usage
	  although the name is misleading).
	+ modify programs to use curses_version() string to report the version
	  of ncurses with which they are compiled rather than the
	  NCURSES_VERSION string.  The function returns the patch level in
	  addition to the major and minor version numbers.

20000812
	+ modify CF_MAN_PAGES configure macro to make transformed program names
	  a parameter to that macro rather than embedding them in the macro.
	+ newer config.guess, config.sub (reference version used in lynx
	  2.8.4dev.7).
	+ add configure option --with-default-terminfo-dir=DIR to allow
	  specifying the default terminfo database directory (request by Albert
	  Chin-A-Young).
	+ minor updates for terminfo.src from FreeBSD termcap change-history.
	+ correct notes in README and INSTALL regarding documentation files
	  that were moved from misc directory to doc (report by Rich Kulawiec
	  <rsk@gsp.org>).
	+ change most remaining unquoted parameters of 'test' in configure
	  script to use quotes, for instance fixing a problem in the
	  --disable-database option (reported by Christian Mondrup
	  <scancm@biobase.dk>).
	+ minor adjustments to work around some of the incompatibilities/bugs
	  in autoconf 2.29a alpha.
	+ add -I/usr/local/include when --with-ncurses option is used in
	  test/configure script.
	+ correct logic in adjust_cancels(), which did not check both
	  alternatives when reclassifying an extended name between boolean,
	  number and string, causing an infinite loop in tic.

20000730
	+ correct a missing backslash in curses.priv.h

20000729
	+ change handling of non_dest_scroll_region in tty_update.c to clear
	  text after it is shifted in rather than before shifting out.  Also
	  correct row computation (reported by Ruediger Kuhlmann
	  <uck4@rz.uni-karlsruhe.de>).
	+ add/use new trace function to display chtype values from winch() and
	  getbkgd().
	+ add trace mask TRACE_ATTRS, alter several existing _tracef calls that
	  trace attribute changes under TRACE_CALLS to use this.
	+ modify MKlib_gen.sh so that functions returning chtype will call
	  returnChar().
	+ add returnChar() trace, for functions returning chtype.
	+ change indent.pro to line up parenthesis.

20000722
	+ fix a heap problem with the c++ binding (report by
	  <alexander_liberson@ninewest.com>, patch by Juergen Pfeifer).
	+ minor adjustment to ClrToEOL() to handle an out-of-bounds parameter.
	+ modify the check for big-core to force a couple of memory accesses,
	  which may work as needed for older/less-capable machines (if not,
	  there's still the explicit configure option).
	> fixes based on diff's for Amiga and BeOS found at
	  http://www.mathematik.uni-karlsruhe.de/~kuhlmann/cross/ncurses/
	+ alter definition of NCURSES_CONST to make it non-empty.
	+ add amiga-vnc terminfo entry.
	+ redefine 'TEXT' in menu.h for AMIGA, since it is reported to have
	  an (unspecified) symbol conflict.
	+ replaced case-statement in _nc_tracebits() for CSIZE with a table to
	  simplify working around implementations that define random
	  combinations of the related macros to zero.
	+ modify configure test for tcgetattr() to allow for old
	  implementations, e.g., on BeOS, which only defined it as a macro.
	> patches by Bruno Haible:
	+ when checking LC_ALL/LC_CTYPE/LANG environment variables for UTF-8
	  locale, ignore those which are set to an empty value, as per SUSV2.
	+ encode 0xFFFD in UTF-8 with 3 bytes, not 2.
	+ modify _nc_utf8_outch() to avoid sign-extension when checking for
	  out-of-range value.

20000715
	+ correct manlinks.sed script to avoid using ERE "\+", which is not
	  understood by older versions of sed (patch by Albert Chin-A-Young).
	+ implement configure script options that transform installed program
	  names, e.g., --program-prefix, including the manpage names and cross
	  references (patch by Albert Chin-A-Young <china@thewrittenword.com>).
	+ correct several mismatches between manpage filename and ".TH"
	  directives, renaming dft_fgbg.3x to default_colors.3x and
	  menu_attribs.3x to menu_attributes.3x (report by Todd C Miller).
	+ correct missing includes for <string.h> in several places, including
	  the C++ binding.  This is not noted by gcc unless we use the
	  -fno-builtin option (reported by Igor Schein <igor@txc.com>).
	+ modified progs/tset.c and tack/sysdep.c to build with sgttyb
	  interface if neither termio or termios is available.  Tested this
	  with FreeBSD 2.1.5 (which does have termios - but the sgttyb does
	  work).

20000708 5.1 release for upload to ftp.gnu.org
	+ document configure options in INSTALL.
	+ add man-page for ncurses trace functions.
	+ correct return value shown in curs_touch.3x for is_linetouched() and
	  is_wintouched(), in curs_initscr.3x for isendwin(), and in
	  curs_termattr.3x for has_ic() and has_il().
	+ add prototypes for touchline() and touchwin(), adding them to the
	  list of generated functions.
	+ modify fifo_push() to put ERR into the fifo just like other values to
	  return from wgetch().  It was returning without doing that, making
	  end-of-file condition incorrectly return a 0 (reported by Todd C
	  Miller).
	+ uncomment CC_SHARED_OPTS for progs and tack (see 971115), since they
	  are needed for SCO OpenServer.
	+ move _nc_disable_period from free_ttype.c to comp_scan.c to appease
	  dynamic loaders on SCO and IRIX64.
	+ add "-a" option to test/ncurses.c to invoke assume_default_colors()
	  for testing.
	+ correct assignment in assume_default_colors() which tells ncurses
	  whether to use default colors, or the assumed ones (reported by Gary
	  Funck <gary@Intrepid.Com>).
	+ review/correct logic in mk-1st.awk for making symbolic links for
	  shared libraries, in particular for FreeBSD, etc.
	+ regenerate misc/*.def files for OS/2 EMX dll's.
	+ correct quoting of values for CC_SHARED_OPTS in aclocal.m4 for
	  cases openbsd2*, openbsd*, freebsd* and netbsd* (patch by Peter
	  Wemm) (err in 20000610).
	+ minor updates to release notes, as well as adding/updating URLs for
	  examples cited in announce.html
	> several fixes from Philippe Blain <philippe.blain2@freesbee.fr>:
	+ correct placement of ifdef for NCURSES_XNAMES in function
	  _nc_free_termtype(), fixes a memory leak.
	+ add a call to _nc_synchook() to the end of function whline() like
	  that in wvline() (difference was in 1.9.4).
	+ make ClearScreen() a little faster by moving two instances of
	  UpdateAttr() out of for-loops.
	+ simplify ClrBottom() by eliminating the tstLine data, using for-loops
	  (cf: 960428).

20000701 pre-release
	+ change minor version to 1, i.e., ncurses 5.1
	+ add experimental configure option --enable-colorfgbg to check for
	  $COLORFGBG variable as set by rxvt/aterm/Eterm.
	+ add Eterm terminfo entry (Michael Jennings <mej@valinux.com>).
	+ modify manlinks.sed to pick aliases from the SYNOPSIS section, and
	  several manpages so manlinks.sed can find aliases for creating
	  symbolic links.
	+ add explanation to run_tic.sh regarding extended terminal
	  capabilities.
	+ change message format for edit_cfg.sh, since some people interpret
	  it as a warning.
	+ correct unescaped '$' in sysv5uw7*|unix_sv* rule for CF_SHARED_OPTS
	  configure macro (report by Thanh Ma <Thanh.Ma@casi-rusco.com>).
	+ correct logic in lib_twait.c as used by lib_mouse.c for GPM mouse
	  support when poll() is used rather than select() (prompted by
	  discussion with David Allen <DAllen24@aol.com>).

20000624 pre-release
	+ modify TransformLine() to check for cells with different color pairs
	  that happen to render the same display colors.
	+ apply $NCURSES_NO_PADDING to cost-computation in mvcur().
	+ improve cost computation in PutRange() by accounting for the use
	  of parm_right_cursor in mvcur().
	+ correct cost computation in EmitRange(), which was not using the
	  normalized value for cursor_address.
	+ newer config.guess, config.sub (reference version used in TIN 1.5.6).

20000617
	+ update config.guess, config.sub (reference version used in PCRE 3.2).
	+ resync changes to gnathtml against version 1.22, regenerated html
	  files under doc/html/ada using this (1.22.1.1).
	+ regenerated html files under doc/html/man after correcting top and
	  bottom margin options for man2html in dist.mk
	+ minor fixes to test programs ncurses 'i' and testcurs program to make
	  the subwindow's background color cover the subwindow.
	+ modify configure script so AC_MSG_ERROR is temporarily defined to a
	  warning in AC_PROG_CXX to make it recover from a missing C++ compiler
	  without requiring user to add --without-cxx option (adapted from
	  comment by Akim Demaille <akim@epita.fr> to autoconf mailing list).
	+ modify headers.sh to avoid creating temporary files in the build
	  directory when installing headers (reported by Sergei Pokrovsky
	  <pok@nbsp.nsk.su>)

20000610
	+ regenerated the html files under doc/html/ada/files and
	  doc/html/ada/funcs with a slightly-improved gnathtml.
	+ add kmous capability to linux terminfo entry to allow it to use
	  xterm-style events provided by gpm patch by Joerg Schoen.
	+ make the configure macro CF_SHARED_OPTS a little smarter by testing
	  if -fPIC is supported by gcc rather than -fpic.  The former option
	  allows larger symbol tables.
	+ update config.guess and config.sub (patches by
	  Kevin Buettner <kev@primenet.com> (for elf64_ia64),
	  Bernd Kuemmerlen <bkuemmer@mevis.de> (for MacOS X)).
	+ add warning for 'tic -cv' about use of '^?' in terminfo source, which
	  is an extension.

20000527
	+ modify echo() behavior of getch() to match Solaris curses for
	  carriage return and backspace (reported by Neil Zanella).
	+ change _nc_flush() to a function.
	+ modify delscreen() to check if the output stream has been closed, and
	  if so, free the buffer allocated for setbuf (this provides an
	  ncurses-specific way to avoid a memory leak when repeatedly calling
	  newterm reported by Chipp C <at_1@zdnetonebox.com>).
	+ correct typo in curs_getch.3x manpage regarding noecho (reported by
	  David Malone <dwmalone@maths.tcd.ie>).
	+ add a "make libs" rule.
	+ make the Ada95 interface build with configure --enable-widec.
	+ if the configure --enable-widec option is given, append 'w' to names
	  of the generated libraries (e.g., libncursesw.so) to avoid conflict
	  with existing ncurses libraries.

20000520
	+ modify view.c to make a rudimentary viewer of UTF-8 text if ncurses
	  is configured with the experimental wide-character support.
	+ add a simple UTF-8 output driver to the experimental wide-character
	  support.  If any of the environment variables LC_ALL, LC_CTYPE or
	  LANG contain the string "UTF-8", this driver will be used to
	  translate the output to UTF-8.  This works with XFree86 xterm.
	+ modify configure script to allow building shared libraries on BeOS
	  (from a patch by Valeriy E Ushakov).
	+ modify lib_addch.c to allow repeated update to the lower-right
	  corner, rather than displaying only the first character written until
	  the cursor is moved.  Recent versions of SVr4 curses can update the
	  lower-right corner, and behave this way (reported by Neil Zanella).
	+ add a limit-check in _nc_do_color(), to avoid using invalid color
	  pair value (report by Brendan O'Dea <bod@compusol.com.au>).

20000513
	+ the tack program knows how to use smcup and rmcup but the "show caps
	  that can be tested" feature did not reflect this knowledge.  Correct
	  the display in the menu tack/test/edit/c (patch by Daniel Weaver).
	+ xterm-16color does allow bold+colors, removed ncv#32 from that
	  terminfo entry.

20000506
	+ correct assignment to SP->_has_sgr_39_49 in lib_dft_fgbg.c, which
	  broke check for screen's AX capability (reported by Valeriy E Ushakov
	  <uwe@ptc.spbu.ru>).
	+ change man2html rule in dist.mk to workaround bug in some
	  man-programs that ignores locale when rendering hyphenation.
	+ change web- and ftp-site to dickey.his.com

20000429
	+ move _nc_curr_token from parse_entry.c to comp_scan.c, to work around
	  problem linking tack on MacOS X DP3.
	+ include <sys/time.h> in lib_napms.c to compile on MacOS X DP3
	  (reported by Gerben Wierda <wierda@holmes.nl>).
	+ modify lib_vidattr.c to check for ncv fixes when pair-0 is not
	  default colors.
	+ add -d option to ncurses.c, to turn on default-colors for testing.
	+ add a check to _nc_makenew() to ensure that newwin() and newpad()
	  calls do not silently fail by passing too-large limits.
	+ add symbol NCURSES_SIZE_T to use rather than explicit 'short' for
	  internal window and pad sizes.  Note that since this is visible in
	  the WINDOW struct, it would be an ABI change to make this an 'int'
	  (prompted by a question by Bastian Trompetter
	  <btrompetter@firemail.de>, who attempted to create a 96000-line pad).

20000422
	+ add mgterm terminfo entry from NetBSD, minor adjustments to sun-ss5,
	  aixterm entries -TD
	+ modify tack/ansi.c to make it more tolerant of bad ANSI replies.  An
	  example of an illegal ANSI response can be found using Microsoft's
	  Telnet client.  A correct display can be found using a VT-4xx
	  terminal or XFree86 xterm with:
		XTerm*VT100*decTerminalID:  450
	  (patch by Daniel Weaver).
	+ modify gdc.c to recognize 'q' for quit, 's' for single-step and ' '
	  for resume.  Add '-n' option to force gdc's standard input to
	  /dev/null, to both illustrate the use of newterm() for specifying
	  alternate inputs as well as for testing signal handling.
	+ minor fix for configure option --with-manpage-symlinks, for target
	  directories that contain a period ('.') (reported by Larry Virden).

20000415
	+ minor additions to beterm entry (feedback from Rico Tudor) -TD
	+ corrections/updates for some IBM terminfo entries -TD
	+ modify _nc_screen_wrap() so that when exiting curses mode with
	  non-default colors, the last line on the screen will be cleared to
	  the screen's default colors (request by Alexander V Lukyanov).
	+ modify ncurses.c 'r' example to set nonl(), allowing control/M to be
	  read for demonstrating the REQ_NEW_LINE operation (prompted by a
	  question by Tony L Keith <tlkeith@keithconsulting.com>).
	+ modify ncurses.c 'r' example of field_info() to work on Solaris 2.7,
	  documented extension of ncurses which allows a zero pointer.
	+ modify fmt_complex() to avoid buffer overflow in case of excess
	  recursion, and to recognize "%e%?" as a synonym for else-if, which
	  means that it will not recur for that special case.
	+ add logic to support $TERMCAP variable in case the USE_GETCAP symbol
	  is defined (patch by Todd C Miller).
	+ modify one of the m4 files used to generate the Ada95 sources,
	  to avoid using the token "symbols" (patch by Juergen Pfeifer).

20000408
	+ add terminfo entries bsdos-pc-m, bsdos-pc-mono (Jeffrey C Honig)
	+ correct spelling error in terminfo entry name:  bq300-rv was given as
	  bg300-rv in esr's version.
	+ modify redrawwin() macro so its parameter is fully parenthesized
	  (fixes Debian #61088).
	+ correct formatting error in dump_entry() which set incorrect column
	  value when no newline trimming was needed at the end of an entry,
	  before appending "use=" clauses (cf: 960406).

20000401
	+ add configure option --with-manpage-symlinks
	+ change unctrl() to render C1 characters (128-159) as ~@, ~A, etc.
	+ change makefiles so trace() function is provided only if TRACE is
	  defined, e.g., in the debug library.  Modify related calls to
	  _tracechar() to use unctrl() instead.

20000325
	+ add screen's AX capability (for ECMA SGR 39 and 49) to applicable
	  terminfo entries, use presence of this as a check for a small
	  improvement in setting default colors.
	+ improve logic in _nc_do_color() implementing assume_default_colors()
	  by passing in previous color pair info to eliminate redundant call to
	  set_original_colors().  (Part of this is from a patch by Alexander
	  V Lukyanov).
	+ modify warning in _nc_trans_string() about a possibly too-long string
	  to do this once only rather than for each character past the
	  threshold (600).  Change interface of _nc_trans_string() to allow
	  check for buffer overflow.
	+ correct use of memset in _nc_read_entry_source() to initialize ENTRY
	  struct each time before reading new data into it, rather than once
	  per loop (cf:  990301).  This affects multi-entry in-core operations
	  such as "infocmp -Fa".

20000319
	+ remove a spurious pointer increment in _nc_infotocap() changes from
	  20000311.  Add check for '.' in format of number, since that also
	  is not permitted in termcap.
	+ correct typo in rxvt-basic terminfo from temporary change made while
	  integrating 20000318.

20000318
	+ revert part of the vt220 change (request by Todd C Miller).
	+ add ansi-* terminfo entries from ESR's version.
	+ add -a option to tic and infocmp, which retains commented-out
	  capabilities during source translation/comparison, e.g., captoinfo
	  and infotocap.
	+ modify cardfile.c to display an empty card if no input data file is
	  found, fixes a core dump in that case (reported by Bruno Haible).
	+ correct bracketing in CF_MATH_LIB configure macro, which gave wrong
	  result for OS/2 EMX.
	+ supply required parameter for _nc_resolve_uses() call in
	  read_termcap.c, overlooked in 20000311 (reported by Todd C Miller).
	> patches by Bruno Haible <haible@ilog.fr>:
	+ fix a compiler warning in fty_enum.c
	+ correct LIB_PREFIX expression for DEPS_CURSES in progs, tack
	  makefiles, which resulted in redundant linking (cf: 20000122).

20000311
	+ make ifdef's for BROKEN_LINKER consistent (patch by Todd C Miller).
	+ improved tack/README (patch by Daniel Weaver).
	+ modify tput.c to ensure that unspecified parameters are passed to
	  tparm() as 0's.
	+ add a few checks in infocmp to guard against buffer overflow when
	  displaying string capabilities.
	+ add check for zero-uses in infocmp's file_comparison() function
	  before calling _nc_align_termtype().  Otherwise one parameter is
	  indexed past the end of the uses-array.
	+ add an option -q to infocmp to specify the less verbose output,
	  keeping the existing format as the default, though not retaining the
	  previous behavior that made the -F option compare each entry to
	  itself.
	+ adapted patch by ESR to make infocmp -F less verbose -TD
	  (the submitted patch was unusable because it did not compile
	  properly)
	  + modify write_entry.c to ensure that absent or cancelled booleans
	    are written as FALSE, for consistency with infocmp which now
	    assumes this.  Note that for the small-core configuration, tic
	    may not produce the same result as before.
	  + change some private library interfaces used by infocmp, e.g.,
	    _nc_resolve_uses().
	  + add a check in _nc_infotocap() to ensure that cm-style capabilities
	    accept only %d codes when converting the format from terminfo to
	    termcap.
	  + modify ENTRY struct to separate the data in 'parent' into the name
	    and link values (the original idea to merge both into 'parent' was
	    not good).
	  + discard repair_acsc(tterm);
	> patch by Juergen Pfeifer:
	+ drop support for gnat 3.10
	+ move generated documentation and html files under ./doc directory,
	  adding makefile rules for this to dist.mk

20000304
	+ correct conflicting use of tparm() in 20000226 change to tic, which
	  made it check only one entry at a time.
	+ fix errors in ncurses-intro.html and hackguide.html shown by Dave
	  Raggett's tidy.
	+ make the example in ncurses-intro.html do something plausible, and
	  corrected misleading comment (reported by Neil Zanella).
	+ modify pnoutrefresh() to set newscr->_leaveok as wnoutrefresh() does,
	  to fix a case where the cursor position was not updated as in
	  Solaris  (patch by David Mosberger <davidm@hpl.hp.com>).
	+ add a limit-check for wresize() to ensure that a subwindow does not
	  address out of bounds.
	+ correct offsets used for subwindows in wresize() (patch by Michael
	  Andres <ma@suse.de>).
	+ regenerate html'ized manual pages with man2html 3.0.1 (patch by
	  Juergen Pfeifer).  This generated a file with a space in its name,
	  which I removed.
	+ fix a few spelling errors in tack.
	+ modify tack/Makefile.in to match linker options of progs/Makefile.in;
	  otherwise it does not build properly for older HPUX shared library
	  configurations.
	+ add several terminfo entries from esr's "11.0".

20000226
	+ make 'tput flash' work properly for xterm by flushing output in
	  delay_output() when using napms(), and modifying xterm's terminfo to
	  specify no padding character.  Otherwise, xterm's reported baud rate
	  can mislead ncurses into producing too few padding characters
	  (Debian #58530).
	+ add a check to tic for consistency between sgr and the separate
	  capabilities such as smso, use this to check/correct several
	  terminfo entries (Debian #58530).
	+ add a check to tic if cvvis is the same as cnorm, adjusted several
	  terminfo entries to remove the conflict (Debian #58530).
	+ correct prototype shown in attr_set()/wattr_set() manpages (fixes
	  Debian #53962).
	+ minor clarification for curs_set() and leaveok() manpages.
	+ use mkstemp() for creating temporary file for tic's processing of
	  $TERMCAP contents (fixes Debian #56465).
	+ correct two errors from integrating Alexander's changes:  did not
	  handle the non-bce case properly in can_erase_with() (noted by
	  Alexander), and left fg/bg uninitialized in the pair-zero case of
	  _nc_do_color() (reported by Dr Werner Fink <werner@suse.de> and
	  Ismael Cordeiro <ismael@cordeiro.com>).

20000219
	+ store default-color code consistently as C_MASK, even if given as
	  -1 for convenience (adapted from patches by Alexander V Lukyanov).
	> patches by Alexander V Lukyanov:
	+ change can_clear_with() macro to accommodate logic for
	  assume_default_colors(), making most of the FILL_BCE logic
	  unnecessary.  Made can_clear_with() an inline function to make it
	  simpler to read.

20000212
	+ corrected form of recent copyright dates.
	+ minor corrections to xterm-xf86-v333 terminfo entry -TD
	> patches by Alexander V Lukyanov:
	+ reworded dft_fgbg.3x to avoid assuming that the terminal's default
	  colors are white on black.
	+ fix initialization of tstLine so that it is filled with current blank
	  character in any case.  Previously it was possible to have it filled
	  with old blank.  The wrong over-optimization was introduced in 991002
	  patch.  (it is not very critical as the only bad effect is not using
	  clr_eos for clearing if blank has changed).

20000205
	+ minor corrections/updates to several terminfo entries: rxvt-basic,
	  vt520, vt525, ibm5151, xterm-xf86-v40 -TD
	+ modify ifdef's for poll() to allow it to use <sys/poll.h>, thereby
	  allowing poll() to be used on Linux.
	+ add CF_FUNC_POLL macro to check if poll() is able to select from
	  standard input.  If not we will not use it, preferring select()
	  (adapted from patch by Michael Pakovic <mpakovic@fdn.com>).
	+ update CF_SHARED_OPTS macro for SCO Unixware 7.1 to allow building
	  shared libraries (reported/tested by Thanh <thanhma@mediaone.net>).
	+ override $LANGUAGE in build to avoid incorrect ordering of keynames.
	+ correct CF_MATH_LIB parameter, must be sin(x), not sqrt(x).

20000122
	+ resync CF_CHECK_ERRNO and CF_LIB_PREFIX macros from tin and xterm -TD
	+ modify CF_MATH_LIB configure macro to parameterize the test function
	  used, for reuse in dialog and similar packages.
	+ correct tests for file-descriptors in OS/2 EMX mouse support.  A
	  negative value could be used by FD_SET, causing the select() call
	  to wait indefinitely.

20000115
	+ additional fixes for non-bce terminals (handling of delete_character)
	  to work when assume_default_colors() is not specified.
	+ modify warning message from _nc_parse_entry() regarding extended
	  capability names to print only if tic/infocmp/toe have the -v flag
	  set, and not at all in ordinary user applications.  Otherwise, this
	  warning would be shown for screen's extended capabilities in programs
	  that use the termcap interface (reported by Todd C Miller).
	+ modify use of _nc_tracing from programs such as tic so their debug
	  level is not in the same range as values set by trace() function.
	+ small panel header cleanup (patch by Juergen Pfeifer).
	+ add 'railroad' demo for termcap interface.
	+ modify 'tic' to write its usage message to stderr (patch by Todd C
	  Miller).

20000108
	+ add prototype for erase() to curses.h.in, needed to make test
	  programs build with c++/g++.
	+ add .c.i and .c.h suffix rules to generated makefiles, for debugging.
	+ correct install rule for tack.1; it assumed that file was in the
	  current directory (reported by Mike Castle <dalgoda@ix.netcom.com>).
	+ modify terminfo/termcap translation to suppress acsc before trying
	  sgr if the entry would be too large (patch by Todd C Miller).
	+ document a special case of incompatibility between ncurses 4.2 and
	  5.0, add a section for this in INSTALL.
	+ add TRACE_DATABASE flag for trace().

20000101
	+ update mach, add mach-color terminfo entries based on Debian diffs
	  for ncurses 5.0 -TD
	+ add entries for xterm-hp, xterm-vt220, xterm-vt52 and xterm-noapp
	  terminfo entries -TD
	+ change OTrs capabilities to rs2 in terminfo.src -TD
	+ add obsolete and extended capabilities to 'screen' terminfo -TD
	+ corrected conversion from terminfo rs2 to termcap rs (cf: 980704)
	+ make conversion to termcap ug (underline glitch) more consistently
	  applied.
	+ fix out-of-scope use of 'personal[]' buffer in 'toe' (this error
	  was in the original pre-1.9.7 version, when $HOME/.terminfo was
	  introduced).
	+ modify 'toe' to ignore terminfo directories to which it has no
	  permissions.
	+ modify read_termtype(), fixing 'toe', which could dump core when it
	  found an incomplete entry such as "dumb" because it did not
	  initialize its buffer for _nc_read_file_entry().
	+ use -fPIC rather than -fpic for shared libraries on Linux, not
	  needed for i386 but some ports (from Debian diffs for 5.0) -TD
	+ use explicit VALID_NUMERIC() checks in a few places that had been
	  overlooked, and add a check to ensure that init_tabs is nonzero,
	  to avoid divide-by-zero (reported by Todd C Miller).
	+ minor fix for CF_ANSI_CC_CHECK configure macro, for HPUX 10.x (from
	  tin) -TD

19991218
	+ reorder tests during mouse initialization to allow for gpm to run in
	  xterm, or for xterm to be used under OS/2 EMX.  Also drop test for
	  $DISPLAY in favor of kmous=\E[M or $TERM containing "xterm" (report
	  by Christian Weisgerber <naddy@mips.rhein-neckar.de>).
	+ modify raw() and noraw() to clear/restore IEXTEN flag which affects
	  stty lnext on systems such as FreeBSD (report by Bruce Evans
	  <bde@zeta.org.au>, via Jason Evans <jasone@canonware.com>).
	+ fix a potential (but unlikely) buffer overflow in failed() function
	  of tset.c (reported by Todd C Miller).
	+ add manual-page for ncurses extensions, documented curses_version(),
	  use_extended_names().

19991211
	+ treat as untranslatable to termcap those terminfo strings which
	  contain non-decimal formatting, e.g., hexadecimal or octal.
	+ correct commented-out capabilities that cannot be translated to
	  termcap, which did not check if a colon must be escaped.
	+ correct termcap translation for "%>" and "%+", which did not check
	  if a colon must be escaped, for instance.
	+ use save_string/save_char for _nc_captoinfo() to eliminate fixed
	  buffer (originally for _nc_infotocap() in 960301 -TD).
	+ correct expression used for terminfo equivalent of termcap %B,
	  adjust regent100 entry which uses this.
	+ some cleanup and commenting of ad hoc cases in _nc_infotocap().
	+ eliminate a fixed-buffer in tic, used for translating comments.
	+ add manpage for infotocap

19991204
	+ add kvt and gnome terminfo entries -TD
	+ correct translation of "%%" by infotocap, which was emitted as "%".
	+ add "obsolete" termcap strings to terminfo.src
	+ modify infocmp to default to showing obsolete capabilities rather
	  than terminfo only.
	+ modify write_entry.c so that if extended names (i.e., configure
	  --enable-tcap-names) are active, then tic will also write "obsolete"
	  capabilities that are present in the terminfo source.
	+ modify tic so that when running as captoinfo or infotocap, it
	  initializes the output format as in -C and -I options, respectively.
	+ improve infocmp and tic -f option by splitting long strings that do
	  not have if-then-else construct, but do have parameters, e.g., the
	  initc for xterm-88color.
	+ refine MKtermsort.sh slightly by using bool for the *_from_termcap
	  arrays.

19991127
	+ additional fixes for non-bce terminals (handling of clear_screen,
	  clr_eol, clr_eos, scrolling) to work when assume_default_colors() is
	  not specified.
	+ several small changes to xterm terminfo entries -TD.
	+ move logic for _nc_windows in lib_freeall.c inside check for nonnull
	  SP, since it is part of that struct.
	+ remove obsolete shlib-versions, which was unintentionally re-added
	  in 970927.
	+ modify infocmp -e, -E options to ensure that generated fallback.c
	  type for Booleans agrees with term.h (reported by Eric Norum
	  <eric@cls.usask.ca>).
	+ correct configure script's use of $LIB_PREFIX, which did not work
	  for installing the c++ directory if $libdir did not end with "/lib"
	  (reported by Huy Le <huyle@ugcs.caltech.edu>).
	+ modify infocmp so -L and -f options work together.
	+ modify the initialization of SP->_color_table[] in start_color() so
	  that color_content() will return usable values for COLORS greater
	  than 8.
	+ modify ncurses 'd' test in case COLORS is greater than 16, e.g., for
	  xterm-88color, to limit the displayed/computed colors to 16.
	> patch by Juergen Pfeifer:
	+ simplify coding of the panel library according to suggestions by
	  Philippe Blain.
	+ improve macro coding for a few macros in curses.priv.h

19991113
	+ modify treatment of color pair 0 so that if ncurses is configured
	  to support default colors, and they are not active, then ncurses
	  will set that explicitly, not relying on orig_colors or orig_pair.
	+ add new extension, assume_default_colors() to provide better control
	  over the use of default colors.
	+ modify test programs to use more-specific ifdef's for existence of
	  wresize(), resizeterm() and use_default_colors().
	+ modify configure script to add specific ifdef's for some functions
	  that are included when --enable-ext-funcs is in effect, so their
	  existence can be ifdef'd in the test programs.
	+ reorder some configure options, moving those extensions that have
	  evolved from experimental status into a new section.
	+ change configure --enable-tcap-names to enable this by default.

19991106
	+ install tack's manpage (reported by Robert Weiner
	  <robert@progplus.com>)
	+ correct worm.c's handling of KEY_RESIZE (patch by Frank Heckenbach).
	+ modify curses.h.in, undef'ing some symbols to avoid conflict with C++
	  STL (reported by Matt Gerassimoff <mgeras@ticon.net>)

19991030
	+ modify linux terminfo entry to indicate that dim does not mix with
	  color (reported by Klaus Weide <kweide@enteract.com>).
	+ correct several typos in terminfo entries related to missing '['
	  in CSI's -TD
	+ fix several compiler warnings in c++ binding (reported by Tim
	  Mooney for alphaev56-dec-osf4.0f
	+ rename parameter of _nc_free_entries() to accommodate lint.
	+ correct lint rule for tack, used incorrect list of source files.
	+ add case to config.guess, config.sub for Rhapsody.
	+ improve configure tests for libg++ and libstdc++ by omitting the
	  math library (which is missing on Rhapsody), and improved test for
	  the math library itself (adapted from path by Nelson H. F. Beebe).
	+ explicitly initialize to zero several data items which were
	  implicitly initialized, e.g., cur_term.  If not explicitly
	  initialized, their storage type is C (common), and causes problems
	  linking on Rhapsody 5.5 using gcc 2.7.2.1 (reported by Nelson H. F.
	  Beebe).
	+ modify Ada95 binding to not include the linker option for Ada
	  bindings in the Ada headers, but in the Makefiles instead (patch by
	  Juergen Pfeifer).

19991023 5.0 release for upload to ftp.gnu.org
	+ effective with release of 5.0, change NCURSES_VERSION_PATCH to
	  4-digit year.
	+ add function curses_version(), to return ncurses library version
	  (request by Bob van der Poel).
	+ remove rmam, smam from cygwin terminfo entry.
	+ modify FreeBSD cons25 terminfo entry to add cnorm and cvvis, as well
	  as update ncv to indicate that 'dim' conflicts with colors.
	+ modify configure script to use symbolic links for FreeBSD shared
	  libraries by default.
	+ correct ranf() function in rain and worm programs to ensure it does
	  not return 1.0
	+ hide the cursor in hanoi.c if it is running automatically.
	+ amend lrtest.c to account for optimizations that exploit margin
	  wrapping.
	+ add a simple terminfo demo, dots.c
	+ modify SIGINT/SIGQUIT handler to set a flag used in _nc_outch() to
	  tell it to use write() rather than putc(), since the latter is not
	  safe in a signal handler according to POSIX.
	+ add/use internal macros _nc_flush() and NC_OUTPUT to hide details
	  of output-file pointer in ncurses library.
	+ uncomment CC_SHARED_OPTS (see 971115), since they are needed for SCO
	  OpenServer.
	+ correct CC_SHARED_OPTS for building shared libraries for SCO
	  OpenServer.
	+ remove usleep() from alternatives in napms(), since it may interact
	  with alarm(), causing a process to be interrupted by SIGALRM (with
	  advice from Bela Lubkin).
	+ modify terminal_interface-curses-forms.ads.m4 to build/work with
	  GNAT 3.10 (patch by Juergen Pfeifer).
	+ remove part of CF_GPP_LIBRARY configure-script macro, which did not
	  work with gcc 2.7.2.3
	+ minor fix to test/tclock.c to avoid beeping more than once per second
	+ add 's' and ' ' decoding to test/rain.c

991016	pre-release
	+ corrected BeOS code for lib_twait.c, making nodelay() function work.

991009	pre-release
	+ correct ncurses' value for cursor-column in PutCharLR(), which was
	  off-by-one in one case (patch by Ilya Zakharevich).
	+ fix some minor errors in position_check() debugging code, found while
	  using this to validate the PutCharLR() patch.
	+ modify firework, lrtest, worm examples to be resizable, and to
	  recognize 'q' for quit, 's' for single-step and ' ' for resume.
	+ restore reverted change to  terminal_interface-curses-forms.ads.m4,
	  add a note on building with gnat 3.10p to Ada95/TODO.
	+ add a copy of the standalone configure script for the test-directory
	  to simplify testing on SCO and Solaris.

991002	pre-release
	+ minor fixes for _nc_msec_cost(), color_content(), pair_content(),
	  _nc_freewin(), ClrBottom() and onscreen_mvcur() (analysis by Philippe
	  Blain, comments by Alexander V Lukyanov).
	+ simplify definition of PANEL and eliminate internal functions
	  _nc_calculate_obscure(), _nc_free_obscure() and _nc_override(),
	  (patch by Juergen Pfeifer, analysis by Philippe Blain
	  <bledp@voila.fr>)).
	+ change renaming of dft_fgbg.3x to use_default_colors.3ncurses in
	  man_db.renames, since Debian is not concerned with 14-character
	  filename limitation (Debian bug report by Josip Rodin
	  <joy@cibalia.gkvk.hr>).
	+ corrected scoansi terminfo entry by testing with scoterm and console.
	+ revert change from 990614 to terminal_interface-curses-forms.ads.m4,
	  since this does not work for gnat 3.10p
	+ modify tclock example to be resizable (if ncurses' sigwinch handler
	  is used), and in color.
	+ use $(CC) rather than 'gcc' in MK_SHARED_LIB symbols, used for Linux
	  shared library rules.

990925	pre-release
	+ add newer NetBSD console terminfo entries
	+ add amiga-8bit terminfo entry (from Henning 'Faroul' Peters
	  <Faroul@beyond.kn-bremen.de>)
	+ remove -lcurses -ltermcap from configure script's check for the gpm
	  library, since they are not really necessary (a properly configured
	  gpm library has no dependency on any curses library), and if the
	  curses library is not installed, this would cause the test to fail.
	+ modify tic's -C option so that terminfo "use=" clauses are translated
	  to "tc=" clauses even when running it as captoinfo.
	+ modify CF_STDCPP_LIBRARY configure macro to perform its check only
	  for GNU C++, since that library conflicts with SGI's libC on IRIX-6.2
	+ modify CF_SHARED_OPTS configure macro to support build on NetBSD with
	  ELF libraries (patch by Bernd Ernesti <bernd@arresum.inka.de>).
	+ correct a problem in libpanel, where the _nc_top_panel variable was
	  not set properly when bottom_panel() is called to hide a panel which
	  is the only one on the stack (report/analysis by Michael Andres
	  <ma@suse.de>, patch by Juergen Pfeifer).

990918	pre-release
	+ add acsc string to HP 70092 terminfo entry (patch by Joerg Wunsch
	  <j@interface-business.de>).
	+ add top-level uninstall.data and uninstall.man makefile rules.
	+ correct logic of CF_LINK_FUNCS configure script, from BeOS changes so
	  that hard-links work on Unix again.
	+ change default value of cf_cv_builtin_bool to 1 (suggested by
	  Jeremy Buhler), making it less likely that a conflicting declaration
	  of bool will be seen when compiling with C++.

990911	pre-release
	+ improved configure checks for builtin.h
	+ minor changes to C++ binding (remove static initializations, and make
	  configure-test for parameter initializations) for features not
	  allowed by vendor's C++ compilers (reported by Martin Mokrejs, this
	  applies to SGI, though I found SCO has the same characteristics).
	+ corrected quoting of ETIP_xxx definitions which support old versions
	  of g++, e.g., those using -lg++
	+ remove 'L' code from safe_sprintf.c, since 'long double' is not
	  widely portable.  safe_sprintf.c is experimental, however, and
	  exists mainly as a fallback for systems without snprintf (reported
	  by Martin Mokrejs <mmokrejs@natur.cuni.cz>, for IRIX 6.2)
	+ modify definition of _nc_tinfo_fkeys in broken-linker configuration
	  so that it is not unnecessarily made extern (Jeffrey C Honig).

990904	pre-release
	+ move definition for builtin.h in configure tests to specific check
	  for libg++, since qt uses the same filename incompatibly.
	+ correct logic of lib_termcap.c tgetstr function, which did not copy
	  the result to the buffer parameter.  Testing shows Solaris does
	  update this, though of course tgetent's buffer is untouched (reported
	  in Peter Edwards <peter.edwards@ireland.com> in
	  mpc.lists.freebsd.current newsgroup.
	+ corrected beterm terminfo entry, which lists some capabilities which
	  are not actually provided by the BeOS Terminal.
	+ add special logic to replace select() calls on BeOS, whose select()
	  function works only for sockets.
	+ correct missing escape in mkterm.h.awk.in, which caused part
	  of the copyright noticed to be omitted (reported by Peter
	  Wemm <peter@netplex.com.au>).
	> several small changes to make the c++ binding and demo work on OS/2
	  EMX (related to a clean reinstall of EMX):
	+ correct library-prefix for c++ binding; none is needed.
	+ add $x suffix to make_hash and make_keys so 'make distclean' works.
	+ correct missing $x suffix for tack, c++ demo executables.
	+ split CF_CXX_LIBRARY into CF_GPP_LIBRARY (for -lg++) and
	  CF_STDCPP_LIBRARY (for -lstdc++)

990828	pre-release
	+ add cygwin terminfo entry -TD
	+ modify CF_PROG_EXT configure macro to set .exe extension for cygwin.
	+ add configure option --without-cxx-binding, modifying the existing
	  --without-cxx option to check only for the C++ compiler
	  characteristics.  Whether or not the C++ binding is needed, the
	  configure script checks for the size/type of bool, to make ncurses
	  match.  Otherwise C++ applications cannot use ncurses.

990821	pre-release
	+ updated configure macros CF_MAKEFLAGS, CF_CHECK_ERRNO
	+ minor corrections to beterm terminfo entry.
	+ modify lib_setup.c to reject values of $TERM which have a '/' in
	  them.
	+ add ifdef's to guard against CS5, CS6, CS7, CS8 being zero, as more
	  than one is on BeOS.  That would break a switch statement.
	+ add configure macro CF_LINK_FUNCS to detect and work around BeOS's
	  nonfunctional link().
	+ improved configure macros CF_BOOL_DECL and CF_BOOL_SIZE to detect
	  BeOS's bool, which is declared as an unsigned char.

990814	pre-release
	+ add ms-vt100 terminfo entry -TD
	+ minor fixes for misc/emx.src, based on testing with tack.
	+ minor fix for test/ncurses.c, test 'a', in case ncv is not set.

990731	pre-release
	+ minor correction for 'screen' terminfo entry.
	+ clarify description of errret values for setupterm in manpage.
	+ modify tput to allow it to emit capabilities for hardcopy terminals
	  (patch by Goran Uddeborg <goeran@uddeborg.pp.se>).
	+ modify the 'o' (panel) test in ncurses.c to show the panels in color
	  or at least in bold, to test Juergen's change to wrefresh().
	> patches by Juergen Pfeifer:
	+ Fixes a problem using wbkgdset() with panels.  It has actually
	  nothing to with panels but is a problem in the implementation of
	  wrefresh().  Whenever a window changes its background attribute to
	  something different than newscr's background attribute, the whole
	  window is touched to force a copy to newscr.  This is an unwanted
	  side-effect of wrefresh() and it is actually not necessary.  A
	  changed background attribute affects only further outputs of
	  background it doesn't mean anything to the current content of the
	  window.  So there is no need to force a copy.  (reported by Frank
	  Heckenbach <frank@g-n-u.de>).
	+ an upward compatible enhancement of the NCursesPad class in the C++
	  binding.  It allows one to add a "viewport" window to a pad and then
	  to use panning to view the pad through the viewport window.

990724	pre-release
	+ suppress a call to def_prog_mode() in the SIGTSTP handler if the
	  signal was received while not in curses mode, e.g., endwin() was
	  called in preparation for spawning a shell command (reported by Frank
	  Heckenbach <frank@g-n-u.de>)
	+ corrected/enhanced xterm-r5, xterm+sl, xterm+sl-twm terminfo entries.
	+ change test for xterm mouse capability:  it now checks only if the
	  user's $DISPLAY variable is set in conjunction with the kmous
	  capability being present in the terminfo.  Before, it checked if any
	  of "xterm", "rxvt" or "kterm" were substrings of the terminal name.
	  However, some emulators which are incompatible with xterm in other
	  ways do support the xterm mouse capability.
	+ reviewed and made minor changes in ncurses to quiet g++ warnings
	  about shadowed or uninitialized variables.  g++ incorrectly warns
	  about uninitialized variables because it does not take into account
	  short-circuit expression evaluation.
	+ change ncurses 'b' test to start in color pair 0 and to show in the
	  right margin those attributes which are suppressed by no_color_video,
	  i.e., "(NCV)".
	+ modify ifdef's in curses.h so that __attribute__ is not redefined
	  when compiling with g++, but instead disabled the macros derived for
	  __attribute__ since g++ does not consistently recognize the same
	  keywords as gcc (reported by Stephan K Zitz <zitz@erf.net>).
	+ update dependencies for term.h in ncurses/modules (reported by
	  Ilya Zakharevich).

990710	pre-release
	+ modify the form demo in ncurses.c to illustrate how to manipulate the
	  field appearance, e.g, for highlighting or translating the field
	  contents.
	+ correct logic in write_entry from split-out of home_terminfo in
	  980919, which prevented update of $HOME/.terminfo (reported by Philip
	  Spencer <pspencer@fields.utoronto.ca>).

990703	pre-release
	+ modify linux terminfo description to make use of kernel 2.2.x mods
	  that support cursor style, e.g., to implement cvvis (patch by Frank
	  Heckenbach <frank@g-n-u.de>)
	+ add special-case in setupterm to retain previously-saved terminal
	  settings in cur_term, which happens when curses and termcap calls are
	  mixed (from report by Bjorn Helgaas <helgaas@dhc.net>).
	+ suppress initialization of key-tries in _nc_keypad() if we are only
	  disabling keypad mode, e.g., in endwin() called when keypad() was
	  not.
	+ modify the Ada95 makefile to ensure that always the Ada files from
	  the development tree are used for building and not the eventually
	  installed ones (patch by Juergen Pfeifer).

990626	pre-release
	+ use TTY definition in tack/sysdep.c rather than struct termios
	  (reported by Philippe De Muyter).
	+ add a fallback for strstr, used in lib_mvcur.c and tack/edit.c,
	  not present on sysV68 (reported by Philippe De Muyter).
	+ correct definition in comp_hash.c to build with configure
	  --with-rcs-ids option.

990619	pre-release
	+ modified ifdef's for sigaction and sigvec to ensure we do not try to
	  handle SIGTSTP if neither is available (from report by Philippe De
	  Muyter).
	> patch by Philippe De Muyter:
	+ in tic.c, use `unlink' if `remove' is not available.
	+ use only `unsigned' as fallback value for `speed_t'.  Some files used
	  `short' instead.

990616	pre-release
	+ fix some compiler warnings in tack.
	+ add a check for predefined bool type in CC, based on report that
	  BeOS predefines a bool type.
	+ correct logic for infocmp -e option, i.e., the configure
	  --with-fallbacks option, which I'd not updated when implementing
	  extended names (cf:  990301).  The new implementation adds a "-E"
	  option to infocmp -TD
	> patch by Juergen Pfeifer:
	+ introduce the private type Curses_Bool in the Ada95 binding
	  implementation.  This is to clearly represent the use of "bool" also
	  in the binding.  It should have no effect on the generated code.
	+ improve the man page for field_buffer() to tell the people, that the
	  whole buffer including leading/trailing spaces is returned.  This is
	  a common source of confusion, so it's better to document it clearly.

990614	pre-release
	> patch by Juergen Pfeifer:
	+ use pragma PreElaborate in several places.
	+ change a few System.Address uses to more specific types.
	+ change interface version-number to 1.0
	+ regenerate Ada95 HTML files.

990612	pre-release
	+ modify lib_endwin.c to avoid calling reset_shell_mode(), return ERR
	  if it appears that curses was never initialized, e.g., by initscr().
	  For instance, this guards against setting the terminal modes to
	  strange values if endwin() is called after setupterm().  In the same
	  context, Solaris curses will dump core.
	+ modify logic that avoids a conflict in lib_vidattr.c between sgr0 and
	  equivalent values in rmso or rmul by ensuring we do not modify the
	  data which would be returned by the terminfo or termcap interfaces
	  (reported by Brad Pepers <brad@linuxcanada.com>, cf:  960706).
	+ add a null-pointer check for SP in lib_vidattr.c to logic that checks
	  for magic cookies.
	+ improve fallback declaration of 'bool' when the --without-cxx option
	  is given, by using a 'char' on i386 and related hosts (prompted by
	  discussion with Alexander V Lukyanov).

990605	pre-release
	+ include time.h in lib_napms.c if nanosleep is used (patch by
	  R Lindsay Todd <toddr@rpi.edu>).
	+ add an "#undef bool" to curses.h, in case someone tries to define it,
	  e.g., perl.
	+ add check to tparm to guard against divide by zero (reported by Aaron
	  Campbell <aaron@ug.cs.dal.ca>).

990516	pre-release
	+ minor fix to build tack on CLIX (mismatched const).
	> patch by Juergen Pfeifer:
	+ change Juergen's old email address with new one in the files where it
	  is referenced.  The Ada95 HTML pages are regenerated.
	+ update MANIFEST to list the tack files.

990509	pre-release
	+ minor fixes to make 'tack' build/link on NeXT (reported by Francisco
	  A. Tomei Torres).

990417	pre-release
	+ add 'tack' program (which is GPL'd), updating it to work with the
	  modified TERMTYPE struct and making a fix to support setaf/setab
	  capabilities.  Note that the tack program is not part of the
	  ncurses libraries, but an application which can be distributed with
	  ncurses.  The configure script will ignore the directory if it is
	  omitted, however.
	+ modify gpm mouse support so that buttons 2 and 3 are used for
	  select/paste only when shift key is pressed, making them available
	  for use by an application (patch by Klaus Weide).
	+ add complete list of function keys to scoansi terminfo entry - TD

990410	pre-release
	+ add a simple test program cardfile.c to illustrate how to read form
	  fields, and showing forms within panels.
	+ change shared-library versioning for the Hurd to be like Linux rather
	  than *BSD (patch by Mark Kettenis <kettenis@wins.uva.nl>).
	+ add linux-lat terminfo entry.
	+ back-out _nc_access check in read_termcap.c (both incorrect and
	  unnecessary, except to guard against a small window where the file's
	  ownership may change).

990403	pre-release
	+ remove conflicting _nc_free_termtype() function from test module
	  lib_freeall.c
	+ use _nc_access check in read_termcap.c for termpaths[] array (noted
	  by Jeremy Buhler, indicating that Alan Cox made a similar patch).
	> patch by Juergen Pfeifer:
	+ modify menu creation to not inherit status flag from the default menu
	  which says that the associated marker string has been allocated and
	  should be freed (bug reported by Marek Paliwoda"
	  <paliwoda@kki.net.pl>)

990327	pre-release (alpha.gnu.org:/gnu/ncurses-5.0-beta1.tar.gz)
	+ minor fixes to xterm-xfree86 terminfo entry - TD.
	+ split up an expression in configure script check for ldconfig to
	  workaround limitation of BSD/OS sh (reported by Jeff Haas
	  <jmh@mail.msen.com>).
	+ correct a typo in man/form_hook.3x (Todd C Miller).

990318	pre-release
	+ parenthesize and undef 'index' symbol in c++ binding and demo, to
	  accommodate its definition on NeXT (reported by Francisco A. Tomei
	  Torres).
	+ add sigismember() to base/sigaction.c compatibility to link on NeXT
	  (reported by Francisco A. Tomei Torres).
	+ further refinements to inequality in hashmap.c to cover a case with
	  ^U in nvi (patch by Alexander V Lukyanov).

990316	pre-release
	+ add fallback definition for getcwd, to link on NeXT.
	+ add a copy of cur_term to tic.c to make it link properly on NeXT
	  (reported by Francisco A. Tomei Torres).
	+ change inequality in hashmap.c which checks the distance traveled by
	  a chunk so that ^D command in nvi (scrolls 1/2 screen) will use
	  scrolling logic (patch by Alexander V Lukyanov, reported by Jeffrey
	  C Honig).

990314	pre-release
	+ modify lib_color.c to handle a special case where the curscr
	  attributes have been made obsolete (patch by Alexander V Lukyanov).
	+ update BSD/OS console terminfo entries to use klone+sgr and
	  klone+color (patch by Jeffrey C Honig).
	+ update glibc addon configure script for extended capabilities.
	+ correct a couple of warnings in the --enable-const configuration.
	+ make comp_hash build properly with _nc_strdup(), on NeXT (reported by
	  Francisco A. Tomei Torres <francisco.tomei@cwix.com>).

990313	pre-release
	+ correct typos in linux-c initc string - TD
	+ add 'crt' terminfo entry, update xterm-xfree86 entry - TD
	+ remove a spurious argument to tparm() in lib_sklrefr.c (patch by
	  Alexander V Lukyanov).

990307	pre-release
	+ back-out change to wgetch because it causes a problem with ^Z
	  handling in lynx (reported by Kim DeVaughn).

990306	pre-release
	+ add -G option to tic and infocmp, to reverse the "-g" option.
	+ recode functions in name_match.c to avoid use of strncpy, which
	  caused a 4-fold slowdown in tic (cf: 980530).
	+ correct a few warnings about sign-extension in recent changes.
	> patch by Juergen Pfeifer:
	+ fixes suggested by Jeff Bradbury <jibradbury@lucent.com>:
	  + improved parameter checking in new_fieldtype().
	  + fixed a typo in wgetch() timeout handling.
	  + allow slk_init() to be called per newterm call.  The internal SLK
	    state is stored in the SCREEN struct after every newterm() and then
	    reset for the next newterm.
	  + fix the problem that a slk_refresh() refreshes stdscr if the
	    terminal has true SLKs.
	+ update HTML documentation for Ada binding.

990301	pre-release
	+ remove 'bool' casts from definitions of TRUE/FALSE so that statements
	  such as "#if TRUE" work.  This was originally done to allow for a C++
	  compiler which would warn of implicit conversions between enum and
	  int, but is not needed for g++ (reported by Kim DeVaughn).
	+ add use_extended_names() function to allow applications to suppress
	  read of the extended capabilities.
	+ add configure option --enable-tcap-names to support logic which
	  allows ncurses' tic to define new (i.e., extended) terminal
	  capabilities.  This is activated by the tic -x switch.  The infocmp
	  program automatically shows or compares extended capabilities.
	  Note:  This changes the Strings and similar arrays in the TERMTYPE
	  struct so that applications which manipulate it must be recompiled.
	+ use macros typeMalloc, typeCalloc and typeRealloc consistently
	  throughout ncurses library.
	+ add _nc_strdup() to doalloc.c.
	+ modify define_key() to allow multiple strings to be bound to the
	  same keycode.
	+ correct logic error in _nc_remove_string, from 990220.
	> patch for Ada95 binding (Juergen Pfeifer):
	+ regenerate some of the html documentation
	+ minor cleanup in terminal_interface-curses.adb

990220	pre-release
	+ resolve ambiguity of kend/kll/kslt and khome/kfnd/kich1 strings in
	  xterm and ncsa terminfo entries by removing the unneeded ones.  Note
	  that some entries will return kend & khome versus kslt and kfnd, for
	  PC-style keyboards versus strict vt220 compatibility - TD
	+ add function keybound(), which returns the definition associated with
	  a given keycode.
	+ modify define_key() to undefine the given string when no keycode is
	  given.
	+ modify keyok() so it works properly if there is more than one string
	  defined for a keycode.
	+ add check to tic to warn about terminfo descriptions that contain
	  more than one key assigned to the same string.  This is shown only if
	  the verbose (-v) option is given.  Moved related logic (tic -v) from
	  comp_parse.c into the tic program.
	+ add/use _nc_trace_tries() to show the function keys that will be
	  recognized.
	+ rename init_acs to _nc_init_acs (request by Alexander V Lukyanov).
	> patch for Ada95 binding (Juergen Pfeifer):
	+ remove all the *_adabind.c from ncurses, menu and form projects.
	  Those little helper routines have all been implemented in Ada and are
	  no longer required.
	+ The option handling routines in menu and form have been made more
	  save.  They now make sure that the unused bits in options are always
	  zero.
	+ modify configuration scripts to
	  + use gnatmake as default compiler name.  This is a safer choice than
	    gcc, because some GNAT implementations use other names for the
	    compilerdriver to avoid conflicts.
	  + use new default installation locations for the Ada files according
	    to the proposed GNU Ada filesystem standard (for Linux).
	+ simplify the Makefiles for the Ada binding
	+ rename ada_include directory to src.

990213
	+ enable sigwinch handler by default.
	+ disable logic that allows setbuf to be turned off/on, because some
	  implementations will overrun the buffer after it has been disabled
	  once.

990206
	+ suppress sc/rc capabilities from terminal description if they appear
	  in smcup/rmcup.  This affects only scrolling optimization, to fix a
	  problem reported by several people with xterm's alternate screen,
	  though the problem is more general.
	> patch for Ada95 binding (Juergen Pfeifer):
	+ removed all pragma Preelaborate() stuff, because the just released
	  gnat-3.11p complains on some constructs.
	+ fixed some upper/lower case notations because gnat-3.11p found
	  inconsistent use.
	+ used a new method to generate the HTML documentation of the Ada95
	  binding.  This invalidates nearly the whole ./Ada95/html subtree.
	  Nearly all current files in this subtree are removed

990130
	+ cache last result from _nc_baudrate, for performance (suggested by
	  Alexander V Lukyanov).
	+ modify ClrUpdate() function to workaround a problem in nvi, which
	  uses redrawwin in SIGTSTP handling.  Jeffrey C Honig reported that
	  ncurses repainted the screen with nulls before resuming normal
	  operation (patch by Alexander V Lukyanov).
	+ generalize is_xterm() function a little by letting xterm/rxvt/kterm
	  be any substring rather than the prefix.
	+ modify lib_data.c to initialize SP.  Some linkers, e.g., IBM's, will
	  not link a module if the only symbols exported from the module are
	  uninitialized ones (patch by Ilya Zakharevich).  Ilya says that he
	  has seen messages claiming this behavior conforms to the standard.)
	+ move call on _nc_signal_handler past _nc_initscr, to avoid a small
	  window where Nttyb hasn't yet been filled (reported by Klaus Weide).
	+ modify lib_tstp.c to block SIGTTOU when handling SIGTSTP, fixes a
	  problem where ncurses applications which were run via a shell script
	  would hang when given a ^Z.  Also, check if the terminal's process
	  group is consistent, i.e., a shell has not taken ownership of it,
	  before deciding to save the current terminal settings in the SIGTSTP
	  handler (patch by Klaus Weide).
	+ correct spelling of ACS_ names in curs_border.3x (reported by Bob van
	  der Poel <bvdpoel@kootenay.com>).
	+ correct a couple of typos in the macros supporting the configure
	  --with-shlib-version option.

990123
	+ modify fty_regex.c to compile on HAVE_REGEXPR_H_FUNCS machine (patch
	  by Kimio Ishii <ishii@csl.sony.co.jp>).
	+ rename BSDI console terminfo entries:  bsdos to bsdos-pc-nobold, and
	  bsdos-bold to bsdos-pc (patch by Jeffrey C Honig).
	+ modify tput to accept termcap names as an alternative to terminfo
	  names (patch by Jeffrey C Honig).
	+ correct a typo in term.7 (Todd C Miller).
	+ add configure --with-shlib-version option to allow installing shared
	  libraries named according to release or ABI versions.  This
	  parametrizes some existing logic in the configure script, and is
	  intended for compatibility upgrades on Digital Unix, which used
	  versioned libraries in ncurses 4.2, but no longer does (cf:  980425).
	+ resync configure script against autoconf 2.13 + patches
	+ minor improvements for teraterm terminfo entry based on the program's
	  source distribution.

990116
	+ change default for configure --enable-big-core to assume machines do
	  have enough memory to resolve terminfo.src in-memory.
	+ correct name of ncurses library in TEST_ARGS when configuring with
	  debug library.
	+ minor fixes to compile ncurses library with broken-linker with g++.
	+ add --enable-broken-linker configure option, default to environment
	  variable $BROKEN_LINKER (request by Jeffrey C Honig).
	+ change key_names[] array to static since it is not part of the curses
	  interface (reported by Jeffrey C Honig <jch@bsdi.com>).

990110
	+ add Tera Term terminfo entry - TD

990109
	+ reviewed/corrected macros in curses.h as per XSI document.
	+ provide support for termcap PC variable by copying it from terminfo
	  data and using it as the padding character in tputs (reported by
	  Alexander V Lukyanov).
	+ corrected iris-ansi and iris-ansi-ap terminfo entries for kent and
	  kf9-kf12 capabilities, as well as adding kcbt.
	+ document the mouse handling mechanism in menu_driver and make a small
	  change in menu_driver's return codes to provide more consistency
	  (patch by Juergen Pfeifer).
	+ add fallback definition for NCURSES_CONST to termcap.h.in (reported
	  by Uchiyama Yasushi <uch@nop.or.jp>).
	+ move lib_restart.c to ncurses/base, since it uses curses functions
	  directly, and therefore cannot be used in libtinfo.so
	+ rename micro_char_size to micro_col_size, adding #define to retain
	  old name.
	+ add set_a_attributes and set_pglen_inch to terminfo structure, as per
	  XSI and Solaris 2.5.
	+ minor makefile files to build ncurses test_progs
	+ update html files in misc directory to reflect changes since 4.2

990102
	+ disable scroll hints when hashmap is enabled (patch by Alexander
	  V Lukyanov).
	+ move logic for tic's verify of -e option versus -I and -C so that the
	  terminfo data is not processed if we cannot handle -e (reported by
	  Steven Schwartz <steves@unitrends.com>.
	+ add test-driver traces to terminfo and termcap functions.
	+ provide support for termcap ospeed variable by copying it from the
	  internal cur_term member, and using ospeed as the baudrate reference
	  for the delay_output and tputs functions.  If an application does not
	  set ospeed, the library behaves as before, except that _nc_timed_wait
	  is no longer used, or needed, since ospeed always has a value.  But
	  the application can modify ospeed to adjust the output of padding
	  characters (prompted by a bug report for screen 3.7.6 and email from
	  Michael Schroeder <Michael.Schroeder@informatik.uni-erlangen.de>).
	+ removed some unused ifdef's as part of Alexander's restructuring.
	+ reviewed/updated curses.h, term.h against X/Open Curses Issue 4
	  Version 2.  This includes making some parameters NCURSES_CONST
	  rather than const, e.g., in termcap.h.
	+ change linux terminfo entry to use ncv#2, since underline does not
	  work with color

981226
	+ miscellaneous corrections for curses.h to match XSI.
	+ change --enable-no-padding configure option to be normally enabled.
	+ add section to ncurses manpage for environment variables.
	+ investigated Debian bug report that pertains to screen 3.7.4/3.7.6
	  changes, found no sign of problems on Linux (or on SunOS, Solaris)
	  running screen built with ncurses.
	+ check if tmp_fp is opened in tic.c before closing it (patch by Pavel
	  Roskin <pavel_roskin@geocities.com>).
	+ correct several font specification typos in man-pages.

981220
	+ correct default value for BUILD_CC (reported by Larry Virden).

981219
	+ modify _nc_set_writedir() to set a flag in _nc_tic_dir() to prevent
	  it from changing the terminfo directory after chdir'ing to it.
	  Otherwise, a relative path in $TERMINFO would confuse tic (prompted
	  by a Debian bug report).
	+ correct/update ncsa terminfo entry (report by Larry Virden).
	+ update xterm-xfree86 terminfo to current (patch 90), smcur/rmcur
	  changes
	+ add Mathew Vernon's mach console entries to terminfo.src
	+ more changes, moving functions, as part of Alexander's restructuring.
	+ modify configure script for GNU/Hurd share-library support, introduce
	  BUILD_CC variable for cross compiling (patch by Uchiyama Yasushi
	  <uch@nop.or.jp>)

981212
	+ add environment variable NCURSES_NO_SETBUF to allow disabling the
	  setbuf feature, for testing purposes.
	+ correct ifdef's for termcap.h versus term.h that suppress redundant
	  declarations of prototypes (reported by H.J.Lu).
	+ modify Makefile.os2 to add linker flags which allow multiple copies
	  of an application to coexist (reported by Ilya Zakharevich).
	+ update Makefile.glibc and associated configure script so that ncurses
	  builds as a glibc add-on with the new directory configuration
	  (reported by H.J.Lu).

981205
	+ modify gen_reps() function in gen.c to work properly on SunOS
	  (sparc), which is a left-to-right architecture.
	+ modify relative_move and tputs to avoid an interaction with the
	  BSD-style padding.  The relative_move function could produce a string
	  to replace on the screen which began with a numeric character, which
	  was then interpreted by tputs as padding.  Now relative_move will not
	  generate a string with a leading digit in that case (overwrite).
	  Also, tputs will only interpret padding if the string begins with a
	  digit; as coded it permitted a string to begin with a decimal point
	  or asterisk (reported by Larry Virden).
	> patches by Juergen Pfeifer:
	+ fix a typo in m_driver.c mouse handling and improves the error
	  handling.
	+ fix broken mouse handling in the Ada95 binding
	+ make the Ada95 sample application menus work with the new menu mouse
	  support
	+ improve the mouse handling introduced by Ilya; it now handles menus
	  with spacing.
	+ repair a minor bug in the menu_driver code discovered during this
	  rework.
	+ add new function wmouse_trafo() to hide implementation details of
	  _yoffset member of WINDOW struct needed for mouse coordinate
	  transformation.

981128
	+ modify Ada95/gen/gen.c to avoid using return-value of sprintf, since
	  some older implementations (e.g., SunOS 4.x) return the buffer
	  address rather than its length.
	> patch by Rick Ohnemus:
	+ modify demo.cc to get it to compile with newer versions of egcs.
	+ trim a space that appears at the end of the table preprocessor lines
	  ('\" t).  This space prevents some versions of man from displaying
	  the pages - changed to remove all trailing whitespace (TD)
	+ finally, 'make clean' does not remove panel objects.
	> patches by Ilya Zakharevich:
	+ allow remapping of OS/2 mouse buttons using environment variable
	  MOUSE_BUTTONS_123 with the default value 132.
	+ add mouse support to ncurses menus.

981121
	+ modify misc/makedef.cmd to report old-style .def file symbols, and to
	  generate the .def files sorted by increasing names rather than the
	  reverse.
	+ add misc/*.ref which are J.J.G.Ripoll's dll definition files (renamed
	  from misc/*.old), and updated based on the entrypoint coding he used
	  for an older version of ncurses.
	+ add README.emx, to document how to build on OS/2 EMX.
	+ updates for config.guess, config.sub from Lynx
	> patches by Ilya Zakharevich:
	+ minor fixes for mouse handling mode:
	  a) Do not initialize mouse if the request is to have no mouse;
	  b) Allow switching of OS/2 VIO mouse on and off.
	+ modify Makefile.os2 to support alternative means of generating
	  configure script, by translating Unix script with Perl.
	> patches by Juergen Pfeifer:
	+ Updates MANIFEST to reflect changes in source structure
	+ Eliminates a problem introduced with my last patch for the C++
	  binding in the panels code.  It removes the update() call done in the
	  panel destructor.
	+ Changes in the Ada95 binding to better support systems where
	  sizeof(chtype)!=sizeof(int) (e.g.  DEC Alpha).

981114
	+ modify install-script for manpages to skip over .orig and .rej files
	  (request by Larry Virden).
	> patches/discussion by Alexander V Lukyanov:
	+ move base-library sources into ncurses/base and tty (serial terminal)
	  sources into ncurses/tty, as part of Alexander V Lukyanov's proposed
	  changes to ncurses library.
	+ copy _tracemouse() into ncurses.c so that lib_tracemse.c need not
	  be linked into the normal ncurses library.
	+ move macro winch to a function, to hide details of struct ldat
	> patches by Juergen Pfeifer:
	+ fix a potential compile problem in cursesw.cc
	+ some Ada95 cosmetics
	+ fix a gen.c problem when compiling on 64-Bit machines
	+ fix Ada95/gen/Makefile.in "-L" linker switch
	+ modify Ada95 makefiles to use the INSTALL_PREFIX setting.

981107
	+ ifdef'd out lib_freeall.c when not configured.
	+ rename _tracebits() to _nc_tracebits().
	+ move terminfo-library sources into ncurses/tinfo, and trace-support
	  functions into ncurses/trace as part of Alexander V Lukyanov's
	  proposed changes to ncurses library.
	+ modify generated term.h to always specify its own definitions for
	  HAVE_TERMIOS_H, etc., to guard against inclusion by programs with
	  broken configure scripts.

981031
	+ modify terminfo parsing to accept octal and hexadecimal constants,
	  like Solaris.
	+ remove an autoconf 2.10 artifact from the configure script's check
	  for "-g" compiler options.  (Though harmless, this confused someone
	  at Debian, who recently issued a patch that results in the opposite
	  effect).
	+ add configure option --with-ada-compiler to accommodate installations
	  that do not use gcc as the driver for GNAT (patch by Juergen
	  Pfeifer).

981017
	+ ensure ./man exists in configure script, needed when configuring
	  with --srcdir option.
	+ modify infocmp "-r" option to remove limit on formatted termcap
	  output, which makes it more like Solaris' version.
	+ modify captoinfo to treat no-argument case more like Solaris'
	  version, which uses the contents of $TERMCAP as the entry to format.
	+ modify mk-2nd.awk to handle subdirectories, e.g., ncurses/tty
	  (patch by Alexander V Lukyanov).

981010
	+ modify --with-terminfo-dirs option so that the default value is the
	  ${datadir} value, unless $TERMINFO_DIRS is already set.  This gets
	  rid of a hardcoded list of candidate directories in the configure
	  script.
	+ add some error-checking to _nc_read_file_entry() to ensure that
	  strings are properly terminated (Todd C Miller).
	+ rename manpage file curs_scr_dmp.3x to curs_scr_dump.3x, to
	  correspond with contents (reported by Neil Zanella
	  <nzanella@cs.mun.ca>).
	+ remove redundant configure check for C++ which did not work when $CXX
	  was specified with a full pathname (reported by Andreas Jaeger).
	+ corrected bcopy/memmove check; the macro was not standalone.

981003
	+ remove unnecessary portion of OS/2 EMX mouse change from
	  check_pending() (reported by Alexander V Lukyanov).

980926
	+ implement mouse support for OS/2 EMX (adapted from patch against
	  4.2(?) by Ilya Zakharevich).
	+ add configure-check for bcopy/memmove, for 980919 changes to hashmap.
	+ merge Data General terminfo from Hasufin <hasufin@vidnet.net> - TD
	+ merge AIX 3.2.5 terminfo descriptions for IBM terminals, replaces
	  some older entries - TD
	+ modify tic to compile into %'char' form in preference to %{number},
	  since that is a little more efficient.
	+ minor correction to infocmp to avoid displaying "difference" between
	  two capabilities that are rendered in equivalent forms.
	+ add "-g" option to tic/infocmp to force character constants to be
	  displayed in quoted form.  Otherwise their decimal values are shown.
	+ modify setupterm so that cancelled strings are treated the same as
	  absent strings, cancelled and absent booleans false (does not affect
	  tic, infocmp).
	+ modify tic, infocmp to discard redundant i3, r3 strings when output
	  to termcap format.
	> patch by Alexander V Lukyanov:
	+ improve performance of tparm, now it takes 19% instead of 25% when
	  profiling worm.
	+ rename maxlen/minlen to prec/width for better readability.
	+ use format string for printing strings.
	+ use len argument correctly in save_text, and pass it to save_number.

980919
	+ make test_progs compile (but hashmap does not function).
	+ correct NC_BUFFERED macro, used in lib_mvcur test-driver, modify
	  associated logic to avoid freeing the SP->_setbuf data.
	+ add modules home_terminfo and getenv_num to libtinfo.
	+ move write_entry to libtinfo, to work with termcap caching.
	+ minor fixes to blue.c to build with atac.
	+ remove softscroll.c module; no longer needed for testing.
	> patches by Todd C Miller:
	+ use strtol(3) instead of atoi(3) when parsing env variables so we can
	  detect a bogus (non-numeric) value.
	+ check for terminal names > MAX_NAME_SIZE in a few more places when
	  dealing with env variables again.
	+ fix a MAX_NAME_SIZE that should be MAX_NAME_SIZE+1
	+ use sizeof instead of strlen(3) on PRIVATE_INFO since it is a fixed
	  string #define (compile time vs runtime).
	+ when setting errno to ENOMEM, set it right before the return, not
	  before code that could, possibly, set errno to a different value.
	> patches by Alexander V Lukyanov:
	+ use default background in update_cost_from_blank()
	+ disable scroll-hints when hashmap is configured.
	+ improve integration of hashmap scrolling code, by adding oldhash and
	  newhash data to SP struct.
	+ invoke del_curterm from delscreen.
	+ modify del_curterm to set cur_term to null if it matches the
	  function's parameter which is deleted.
	+ modify lib_doupdate to prefer parm_ich to the enter_insert_mode and
	  exit_insert_mode combination, adjusting InsCharCost to check
	  enter_insert_mode, exit_insert_mode and insert_padding.  Add
	  insert_padding in insert mode after each char.  This adds new costs
	  to the SP struct.

980912
	+ modify test-driver in lib_mvcur.s to use _nc_setbuffer, for
	  consistent treatment.
	+ modify ncurses to restore output to unbuffered on endwin, and resume
	  buffering in refresh (see lib_set_term.c and NC_BUFFERED macro).
	+ corrected HTML version numbers (according to the W3C validator, they
	  never were HTML 2.0-compliant, but are acceptable 3.0).

980905
	+ modify MKterminfo.sh to generate terminfo.5 with tables sorted by
	  capability name, as in SVr4.
	+ modified term.h, termcap.h headers to avoid redundant declarations.
	+ change 'u_int' type in tset.c to unsigned, making this compile on
	  Sequent PRX 4.1 (reported by Michael Sterrett <msterret@coat.com>).

980829
	+ corrections to mailing addresses, and moving the magic line that
	  causes the man program to invoke tbl to the first line of each
	  manpage (patch by Rick Ohnemus <rick@ecompcon.com>).
	+ add Makefile.os2 and supporting scripts to generate dll's on OS/2 EMX
	  (from J.J.G.Ripoll, with further integration by TD).
	+ correct a typo in icl6404 terminfo entry.
	+ add xtermm and xtermc terminfo entries.
	> from esr's terminfo version:
	+ Added Francesco Potorti's tuned Wyse 99 entries.
	+ dtterm enacs (from Alexander V Lukyanov).
	+ Add ncsa-ns, ncsa-m-ns and ncsa-m entries from esr version.

980822
	+ document AT&T acs characters in terminfo.5 manpage.
	+ use EMX _scrsize() function if terminfo and environment do not
	  declare the screen size (reported by Ilya Zakharevich
	  <ilya@math.ohio-state.edu>).
	+ remove spurious '\' characters from eterm and osborne terminfo
	  entries (prompted by an old Debian bug report).
	+ correct reversed malloc/realloc calls in _nc_doalloc (reported by
	  Hans-Joachim Widmaier <hjwidmai@foxboro.com>).
	+ correct misplaced parenthesis which caused file-descriptor from
	  opening termcap to be lost, from 980725 changes (reported by Andreas
	  Jaeger).

980815
	+ modify lib_setup.c to eliminate unneeded include of <sys/ioctl.h>
	  when termios is not used (patch by Todd C Miller).
	+ add function _nc_doalloc, to ensure that failed realloc calls do not
	  leak memory (reported by Todd C Miller).
	+ improved ncsa-telnet terminfo entry.

980809
	+ correct missing braces around a trace statement in read_entry.c,
	  from 980808 (reported by Kim DeVaughn <kimdv@best.com> and Liviu
	  Daia).

980808
	+ fix missing include <errno.h> in ditto.c (reported by Bernhard
	  Rosenkraenzer <bero@k5.sucks.eu.org>)
	+ add NCSA telnet terminfo entries from Francesco Potorti
	  <F.Potorti@cnuce.cnr.it>, from Debian bug reports.
	+ make handling of $LINES and $COLUMNS variables more compatible with
	  Solaris by allowing them to individually override the window size
	  as obtained via ioctl.

980801
	+ modify lib_vidattr.c to allow for terminal types (e.g., xterm-color)
	  which may reset all attributes in the 'op' capability, so that colors
	  are set before turning on bold and other attributes, but still after
	  turning attributes off.
	+ add 'ditto.c' to test directory to illustrate use of newterm for
	  initializing multiple screens.
	+ modify _nc_write_entry() to recover from failed attempt to link alias
	  for a terminfo on a filesystem which does not preserve character case
	  (reported by Peter L Jordan <PJordan@chla.usc.edu>).

980725
	+ updated versions of config.guess and config.sub based on automake 1.3
	+ change name-comparisons in lib_termcap to compare no more than 2
	  characters (gleaned from Debian distribution of 1.9.9g-8.8, verified
	  with Solaris curses).
	+ fix typo in curs_insstr.3x (patch by Todd C Miller)
	+ use 'access()' to check if ncurses library should be permitted to
	  open or modify files with fopen/open/link/unlink/remove calls, in
	  case the calling application is running in setuid mode (request by
	  Cristian Gafton <gafton@redhat.com>, responding to Duncan Simpson
	  <dps@io.stargate.co.uk>).
	+ arm100 terminfo entries from Dave Millen <dmill@globalnet.co.uk>).
	+ qnxt2 and minitel terminfo entries from esr's version.

980718
	+ use -R option with ldconfig on FreeBSD because otherwise it resets
	  the search path to /usr/lib (reported by Dan Nelson).
	+ add -soname option when building shared libraries on OpenBSD 2.x
	  (request by QingLong).
	+ add configure options --with-manpage-format and
	  --with-manpage-renames (request by QingLong).
	+ correct conversion of CANCELLED_NUMERIC in write_object(), which was
	  omitting the high-order byte, producing a 254 in the compiled
	  terminfo.
	+ modify return-values of tgetflag, tgetnum, tgetstr, tigetflag,
	  tigetnum and tigetstr to be compatible with Solaris (gleaned from
	  Debian distribution of 1.9.9g-8.8).
	+ modify _nc_syserr_abort to abort only when compiled for debugging,
	  otherwise simply exit with an error.

980711
	+ modify Ada95 'gen' program to use appropriate library suffix (e.g.,
	  "_g" for a debug build).
	+ update Ada95 'make clean' rule to include generics .ali files
	+ add a configure test to ensure that if GNAT is found, that it can
	  compile/link working Ada95 program.
	+ flush output in beep and flash functions, fixing a problem with
	  getstr (patch by Alexander V Lukyanov)
	+ fix egcs 1.0.2 warning for etip.h (patch by Chris Johns).
	+ correct ifdef/brace nesting in lib_sprintf.c (patch by Bernhard
	  Rosenkraenzer <bero@Pool.Informatik.RWTH-Aachen.DE>).
	+ correct typo in wattr_get macro from 980509 fixes (patch by Dan
	  Nelson).

980704
	+ merge changes from current XFree86 xterm terminfo descriptions.
	+ add configure option '--without-ada'.
	+ add a smart-default for termcap 'ac' to terminfo 'acs_chars' which
	  corresponds to vt100.
	+ change translation for termcap 'rs' to terminfo 'rs2', which is
	  the documented equivalent, rather than 'rs1'.

980627
	+ slow 'worm' down a little, for very fast machines.
	+ corrected firstchar/lastchar computation in lib_hline.c
	+ simplify some expressions with CHANGED_CELL, CHANGED_RANGE and
	  CHANGED_TO_EOL macros.
	+ modify init_pair so that if a color-pair is reinitialized, we will
	  repaint the areas of the screen whose color changes, like SVr4 curses
	  (reported by Christian Maurer <maurer@inf.fu-berlin.de>).
	+ modify getsyx/setsyx macros to comply with SVr4 man-page which
	  says that leaveok() affects their behavior (report by Darryl Miles,
	  patch by Alexander V Lukyanov).

980620
	+ review terminfo.5 against Solaris 2.6 curses version, corrected
	  several minor errors/omissions.
	+ implement tparm %l format.
	+ implement tparm printf-style width and precision for %s, %d, %x, %o
	  as per XSI.
	+ implement tparm dynamic variables (reported by Xiaodan Tang).

980613
	+ update man-page for for wattr_set, wattr_get (cf:  980509)
	+ correct limits in hashtest, which would cause nonprinting characters
	  to be written to large screens.
	+ correct configure script, when --without-cxx was specified:  the
	  wrong variable was used for cf_cv_type_of_bool.  Compilers up to gcc
	  2.8 tolerated the missing 'int'.
	+ remove the hardcoded name "gcc" for the GNU Ada compiler.  The
	  compiler's name might be something like "egcs" (patch by Juergen
	  Pfeifer).
	+ correct curs_addch.3x, which implied that echochar could directly
	  display control characters (patch by Alexander V Lukyanov).
	+ fix typos in ncurses-intro.html (patch by Sidik Isani
	  <isani@cfht.hawaii.edu>)

980606
	+ add configure test for conflicting use of exception in math.h and
	  other headers.
	+ minor optimization to 'hash()' function in hashmap.c, reduces its
	  time by 10%.
	+ correct form of LD_SHARED_OPTS for HP-UX 10.x (patch by Tim Mooney).
	+ fix missing quotes for 'print' in MKunctrl.awk script (reported by
	  Mihai Budiu <mihaib@gs41.sp.cs.cmu.edu>).
	> patch by Alexander V Lukyanov:
	+ correct problem on Solaris (with poll() function) where getch could
	  hang indefinitely even if timeout(x) was called.  This turned out to
	  be because milliseconds was not updated before 'goto retry' in
	  _nc_timed_wait.
	+ simplified the function _nc_timed_wait and fixed another bug, which
	  was the assumption of !GOOD_SELECT && HAVE_GETTIMEOFDAY in *timeleft
	  assignment.
	+ removed the cycle on EINTR, as it seems to be useless.

980530
	+ add makefile-rule for test/keynames
	+ modify run_tic.sh and shlib to ensure that user's .profile does not
	  override the $PATH used to run tic (patch by Tim Mooney).
	+ restore LD_SHARED_OPTS to $(LD_SHARED_FLAGS) when linking programs,
	  needed for HP-UX shared-library path (recommended by Tim Mooney).
	+ remove special case of HP-UX -L options, use +b options to embed
	  $(libdir) in the shared libraries (recommended by Tim Mooney).
	+ add checks for some possible buffer overflows and unchecked
	  malloc/realloc/calloc/strdup return values (patch by Todd C Miller
	  <Todd.Miller@courtesan.com>)

980523
	+ correct maxx/maxy expression for num_columns/num_lines in derwin
	  (patch by Alexander V Lukyanov).
	+ add /usr/share/lib/terminfo and /usr/lib/terminfo as compatibility
	  fallbacks to _nc_read_entry(), along with --with-terminfo-dirs
	  configure option (suggested by Mike Hopkirk).
	+ modify config.guess to recognize Unixware 2.1 and 7 (patch by Mike
	  Hopkirk <hops@sco.com>).
	+ suppress definition of CC_SHARED_OPTS in LDFLAGS_SHARED in c++
	  Makefile.in, since this conflicts when g++ is used with HP-UX
	  compiler (reported by Tim Mooney).
	+ parenthesize 'strcpy' calls in c++ binding to workaround redefinition
	  in some C++ implementations (reported by several people running
	  egcs with glibc 2.0.93, analysis by Andreas Jaeger.

980516
	+ modify write_entry.c so that it will not attempt to link aliases
	  with embedded '/', but give only a warning.
	+ put -L$(libdir) first when linking programs, except for HP-UX.
	+ modify comp_scan.c to handle SVr4 terminfo description for att477,
	  which contains a colon in the description field.
	+ modify configure script to support SCO osr5.0.5 shared libraries,
	  from comp.unix.sco.programmer newsgroup item (Mike Hopkirk).
	+ eliminate extra GoTo call in lib_doupdate.c (patch by Alexander V.
	  Lukyanov).
	+ minor adjustments of const/NCURSES_CONST from IRIX compile.
	+ add updates based on esr's 980509 version of terminfo.src.

980509
	+ correct macros for wattr_set, wattr_get, separate wattrset macro from
	  these to preserve behavior that allows attributes to be combined with
	  color pair numbers.
	+ add configure option --enable-no-padding, to allow environment
	  variable $NCURSES_NO_PADDING to eliminate non-mandatory padding,
	  thereby making terminal emulators (e.g., for vt100) a little more
	  efficient (request by Daniel Eisenbud <eisenbud@cs.swarthmore.edu>).
	+ modify configure script to embed ABI in shared libraries for HP-UX
	  10.x (detailed request by Tim Mooney).
	+ add test/example of the 'filter()' function.
	+ add nxterm and xterm-color terminfo description (request by Cristian
	  Gafton <gafton@redhat.com>).
	+ modify rxvt terminfo description to clear alternate screen before
	  switching back to normal screen, for compatibility with applications
	  which use xterm (reported by Manoj Kasichainula <manojk@io.com>).
	+ modify linux terminfo description to reset color palette (reported
	  by Telford Tendys <telford@eng.uts.edu.au>).
	+ correction to doupdate, for case where terminal does not support
	  insert/delete character.  The logic did not check that there was a
	  difference in alignment of changes to old/new screens before
	  repainting the whole non-blank portion of the line.  Modified to fall
	  through into logic that reduces by the portion which does not differ
	  (reported by Daniel Eisenbud <eisenbud@cs.swarthmore.edu>).
	+ minor performance improvement to wnoutrefresh by moving some
	  comparisons out of inner loop.

980425
	+ modify configure script to substitute NCURSES_CONST in curses.h
	+ updated terminfo entries for xterm-xf86-v40, xterm-16color,
	  xterm-8bit to correspond to XFree86 3.9Ag.
	+ remove restriction that forces ncurses to use setaf/setab if the
	  number of colors is greater than 8.  (see 970524 for xterm-16color).
	+ change order of -L options (so that $(libdir) is searched first) when
	  linking tic and other programs, to workaround HP's linker.
	  Otherwise, the -L../lib is embedded when linking against shared
	  libraries and the installed program does not run (reported by Ralf
	  Hildebrandt).
	+ modify configuration of shared libraries on Digital Unix so that
	  versioning is embedded in the library, rather than implied by
	  links (patch by Tim Mooney).

980418
	+ modify etip.h to avoid conflict with math.h on HP-UX 9.03 with gcc
	  2.8.1 which redefines 'exception' (reported by Ralf Hildebrandt
	  <R.Hildebrandt@tu-bs.de>).
	+ correct configure tests in CF_SHARED_OPTS which used $CC value to
	  check for gcc, rather than autoconf's $GCC value.  This did not
	  work properly if the full pathname of the compiler were given
	  (reported by Michael Yount <yount@csf.Colorado.edu>).
	+ revise check for compiler options to force ANSI mode since repeating
	  an option such as -Aa causes HP's compiler to fail on its own headers
	  (reported by Clint Olsen <olsenc@ichips.intel.com>).

980411
	+ ifdef'd has_key() and mcprint() as extended functions.
	+ modified several prototypes to correspond with 1997 version of
	  X/Open Curses (affects ABI since developers have used attr_get).
	+ remove spurious trailing blanks in glibc addon-scripts (patch by
	  H.J.Lu).
	+ insert a few braces at locations where gcc-2.8.x asks to use them to
	  avoid ambiguous else's, use -fpic rather than -fPIC for Linux (patch
	  by Juergen Pfeifer).

980404
	+ split SHLIB_LIST into SHLIB_DIRS/SHLIB_LIST to keep -L options
	  before -l to accommodate Solaris' linker (reported by Larry Virden).

980328
	+ modify lib_color.c to eliminate dependency on orig_colors and
	  orig_pair, since SVr4 curses does not require these either, but
	  uses them when they are available.
	+ add detailed usage-message to infocmp.
	+ correct a typo in att6386 entry (a "%?" which was "?").
	+ add -f option to infocmp and tic, which formats the terminfo
	  if/then/else/endif so that they are readable (with newlines and
	  tabs).
	+ fixes for glibc addon scripts (patch by H.J.Lu).

980321
	+ revise configure macro CF_SPEED_TYPE so that termcap.h has speed_t
	  declared (from Adam J Richter <adam@yggdrasil.com>)
	+ remove spurious curs_set() call from leaveok() (J T Conklin).
	+ corrected handling leaveok() in doupdate() (patch by Alexander V.
	  Lukyanov).
	+ improved version of wredrawln (patch by Alexander V. Lukyanov).
	+ correct c++/Makefile.in so install target do not have embedded ../lib
	  to confuse it (patch by Thomas Graf <graf@essi.fr>).
	+ add warning to preinstall rule which checks if the installer would
	  overwrite a curses.h or termcap.h that is not derived from ncurses.
	  (The recommended configuration for developers who need both is to
	  use --disable-overwrite).
	+ modify preinstall rule in top-level Makefile to avoid implicit
	  use of 'sh', to accommodate Ultrix 4.4 (reported by Joao Palhoto
	  Matos <jmatos@math.ist.utl.pt>, patch by Thomas Esser
	  <te@informatik.uni-hannover.de>)
	+ refine ifdef's for TRACE so that libncurses has fewer dependencies
	  on libtinfo when TRACE is disabled.
	+ modify configure script so that if the --with-termlib option is used
	  to generate a separate terminfo library, we chain it to the ncurses
	  library with a "-l" option (reported by Darryl Miles and Ian T.
	  Zimmerman).

980314
	+ correct limits and window in wredrawln function (reported/analysis by
	  Alexander V. Lukyanov).
	+ correct sed expression in configure script for --with-fallback
	  option (patch by Jesse Thilo).
	+ correct some places in configure script where $enableval was used
	  rather than $withval (patch by Darryl Miles <dlm@g7led.demon.co.uk>).
	+ modify some man-pages so no '.' or '..' falls between TH and SH
	  macros, to accommodate man_db program (reported by Ian T. Zimmerman
	  <itz@rahul.net>).
	+ terminfo.src 10.2.1 downloaded from ESR's webpage (ESR).
	> several changes by Juergen Pfeifer:
	+ add copyright notices (and rcs id's) on remaining man-pages.
	+ corrected prototypes for slk_* functions, using chtype rather than
	  attr_t.
	+ implemented the wcolor_set() and slk_color() functions
	+ the slk_attr_{set,off,on} functions need an additional void*
	  parameter according to XSI.
	+ fix the C++ and Ada95 binding as well as the man pages to
	  reflect above enhancements.

980307
	+ use 'stat()' rather than 'access()' in toe.c to check for the
	  existence of $HOME/.terminfo, since it may be a file.
	+ suppress configure CF_CXX_LIBRARY check if we are not using g++
	  2.7.x, since this is not needed with g++ 2.8 or egcs (patch by
	  Juergen Pfeifer).
	+ turn on hashmap scrolling code by default, intend to remedy defects
	  by 4.3 release.
	+ minor corrections to terminfo.src changelog.

980302	4.2 release for upload to prep.ai.mit.edu
	+ correct Florian's email address in ncurses-intro.html
	+ terminfo.src 10.2.0 (ESR).

980228	pre-release
	+ add linux-koi8r replace linux-koi8, which is not KOI8 (patch by
	  QingLong <qinglong@Bolizm.ihep.su>).
	+ minor documentation fixes (patch by Juergen Pfeifer).
	+ add setlocale() call to ncurses.c (reported by Claes G. Lindblad
	  <claesg@algonet.se>).
	+ correct sign-extension in lib_insstr.c (reported by Sotiris
	  Vassilopoulos <svas@leon.nrcps.ariadne-t.gr>)

980221	pre-release
	+ regenerated some documentation overlooked in 980214 patch
	  (ncurses-intro.doc, curs_outopts.3x.html)
	+ minor ifdef change to C++ binding to work with gcc 2.8.0 (patch by
	  Juergen Pfeifer).
	+ change maintainer's mailing address to florian@gnu.org, change
	  tentative mailing list address to bug-ncurses-request@gnu.org (patch
	  by Florian La Roche).
	+ add definition of $(REL_VERSION) to c++/Makefile.in (reported by Gran
	  Hasse <gh@raditex.se>).
	+ restore version numbers to Ada95 binding, accidentally deleted by
	  copyright patch (patch by Juergen Pfeifer).

980214	pre-release
	+ remove ncurses.lsm from MANIFEST so that it won't be used in FSF
	  distributions, though it is retained in development.
	+ correct scaling of milliseconds to nanoseconds in lib_napms.c (patch
	  by Jeremy Buhler).
	+ update mailing-list information (bug-ncurses@gnu.org).
	+ update announcement for upcoming 4.2 release.
	+ modify -lm test to check for 'sin()' rather than 'floor()'
	+ remove spurious commas from terminfo.src descriptions.
	+ change copyright notices to Free Software Foundation

980207
	+ minor fixes for autoconf macros CF_ERRNO, CF_HELP_MESSAGE and
	  CF_SIZECHANGE
	+ modify Makefile.glibc so that $(objpfx) is defined (H.J.Lu).
	+ ifdef-out true-return from _nc_mouse_inline() which depends on
	  merge of QNX patch (pending 4.2 release).
	> patch to split off seldom-used modules in ncurses (J T Conklin):
	  This reduces size by up to 2.6kb.
	+ move functionality of _nc_usleep into napms, add configuration case
	  for nanosleep().
	+ moved wchgat() from lib_addch.c to lib_chgat.c
	+ moved clearok(), immedok(), leaveok(), and scrollok() from
	  lib_options.c to lib_clearok.c, lib_immedok.c, lib_leaveok.c and
	  lib_scrollok.c.
	+ moved napms() from lib_kernel.c to lib_napms.c
	+ moved echo() and noecho() from lib_raw.c to lib_echo.c
	+ moved nl() and nonl() from lib_raw.c to lib_nl.c

980131
	+ corrected conversion in tclock.c (cf: 971018).
	+ updates to Makefile.glibc and associated Linux configure script
	  (patch by H.J.Lu).
	+ workaround a quoting problem on SunOS with tar-copy.sh
	+ correct init_pair() calls in worm.c to work when use_default_colors()
	  is not available.
	+ include <sys/types.h> in CF_SYS_TIME_SELECT to work with FreeBSD
	  2.1.5
	+ add ncv capability to FreeBSD console (cons25w), making reverse
	  work with color.
	+ correct sense of configure-test for sys/time.h inclusion with
	  sys/select.h
	+ fixes for Ada95/ada_include/Makefile.in to work with --srcdir option.
	+ remove unused/obsolete test-program rules from progs/Makefile.in
	  (the rules in ncurses/Makefile.in work).
	+ remove shared-library loader flags from test/Makefile.in, etc.
	+ simplify test/configure.in using new version of autoconf to create
	  test/ncurses_cfg.h
	+ suppress suffix rules in test/Makefile.in, provide explicit
	  dependency to work with --srcdir option and less capable 'make'
	  programs.
	> adapted from patch for QNX by Xiaodan Tang:
	+ initialize %P and %g variables set/used in tparm, and also ensure
	  that empty strings don't return a null result from tparam_internal
	+ add QNX-specific prototype for vsscanf()
	+ move initialization of SP->_keytry from init_keytry() to newterm() to
	  avoid resetting it via a keyok() call by mouse_activate().
	+ reorganized some functions in lib_mouse() to use case-statements.
	+ remove sgr string from qnx terminfo entry since it is reported to
	  turn off attributes inconsistently.

980124
	+ add f/F/b/B commands to ncurses 'b' test to toggle colors, providing
	  test for no_color_video.
	+ adjusted emx.src to use no_color_video, now works with ncurses 'b'
	  and 'k' tests.
	+ implement no_color_video attribute, and as a special case, reverse
	  colors when the reverse attribute cannot be combined with color.
	+ check for empty string in $TERM variable (reported by Brett Michaels
	  <brett@xylan.com>).
	> from reports by Fred Fish:
	+ add configure-test for isascii
	+ add configure-test for -lm library.
	+ modify CF_BOOL_SIZE to check if C++ bool types are unsigned.
	> patches by J.J.G.Ripoll
	+ add configure/makefile variables to support .exe extension on
	  OS/2 EMX (requires additional autoconf patches).
	+ explicitly initialize variables in lib_data.c to appease OS/2 linker
	> patches by Fred Fish <fnf@ninemoons.com>
	+ misc/Makefile.in (install.data):  Avoid trying to install the CVS
	  directory.
	+ aclocal.m4 (install.includes):  Remove files in the include directory
	  where we are going to install new ones, not the original source
	  files.
	+ misc/terminfo.src:  Add entry for "beterm", derived from termcap
	  distributed with BeOS PR2 using captoinfo.
	+ aclocal.m4: Wrap $cf_cv_type_of_bool with quotes (contains space)
	+ aclocal.m4: Assume bool types are unsigned.
	+ progs/infocmp.c: workaround mwcc 32k function data limit

980117
	+ correct initialization of color-pair (cf: 970524) in xmas.c, which
	  was using only one color-pair for all colors (reported by
	  J.J.G.Ripoll).
	+ add multithread options for objects build on EMX, for compatibility
	  with XFree86.
	+ split up an expression in MKlib_gen.sh to work around a problem on
	  OS/2 EMX, with 'ash' (patch by J.J.G.Ripoll).
	+ change terminfo entries xterm (xterm-xf86-v40), xterm-8bit rs1 to use
	  hard reset.
	+ rename terminfo entry xterm-xf86-v39t to xterm-xf86-v40
	+ remove bold/underline from sun console entries since they're not
	  implemented.
	+ correct _tracef calls in _tracedump(), which did not separate format
	  from parameters.
	+ correct getopt string for tic "-o" option, and add it to man-page
	  synopsis (reported by Darren Hiebert <darren@hmi.com>).
	+ correct typo in panel/Makefile.in, reversed if-statement in scrolling
	  optimization (Alexander V.  Lukyanov).
	+ test for 'remove()', use 'unlink() if not found (patch by Philippe De
	  Muyter <phdm@macqel.be>).
	> patches by Juergen Pfeifer:
	+ Improve a feature of the forms driver.  For invisible fields
	  (O_VISIBLE off) only the contents but not the attributes are cleared.
	  We now clear both.  (Reported by Javier Kohan
	  <jkohan@adan.fceia.unr.edu.ar>)
	+ The man page form_field_opts.3x makes now clear, that invisible
	  fields are also always inactive.
	+ adjust ifdef's to compile the C++ binding with the just released
	  gcc-2.8.0 c++ and the corresponding new C++ libraries.

980110
	+ correct "?" command in ncurses.c; it was performing non-screen writes
	  while the program was in screen mode.  (It "worked" in 1.9.9e because
	  that version sets OPOST and OCRNL incorrectly).
	+ return error from functions in lib_kernel, lib_raw and lib_ti if
	  cur_term is null, or if underlying I/O fails.
	+ amend change to tputs() so that it does not return an error if
	  cur_term is null, since some applications depend on being able to use
	  tputs without initializing the terminal (reported by Christian J.
	  Robinson <infynity@cyberhighway.net>).

980103
	+ add a copy of emx.src from J.J.G.Ripoll's OS/2 EMX version of ncurses
	  1.9.9e, together with fixes/additions for the "ansi" terminal type.
	+ add tic check for save/restore cursor if change_scroll_region is
	  defined (reference: O'Reilly book).
	+ modify read_termcap.c to handle EMX-style pathnames (reported by
	  J.J.G.Ripoll).
	+ modify lib_raw.c to use EMX's setmode (patch from J.J.G.Ripoll).
	  Ripoll says EMX's curses does this.
	+ modify _nc_tic_expand() to generate \0 rather than \200.
	+ move/revise 'expand()' from dump_entry.c to ncurses library as
	  _nc_tic_expand(), for use by tack.
	+ decode \a as \007 for terminfo, as per XSI.
	+ correct translation of terminfo "^@", to \200, like \0.
	+ modify next_char() to treat <cr><lf> the same as <newline>, for
	  cross-platform compatibility.
	+ use new version of autoconf (971230) to work around limited
	  environment on CLIX, due to the way autoconf builds --help message.
	> patch by Juergen Pfeifer:
	+ check that the Ada95 binding runs against the correct version of
	  ncurses.
	+ insert constants about the library version into the main spec-file of
	  the Ada95 binding.

971227
	+ modify open/fopen calls to use binary mode, needed for EMX.
	+ modify configure script to work with autoconf 2.10 mods for OS/2
	  EMX (from J.J.G.Ripoll).
	+ generated ncurses_cfg.h with patch (971222) to autoconf 2.12 which
	  bypasses limited sed buffer length.
	> several changes from Juan Jose Garcia Ripoll <worm@arrakis.es>
	  (J.J.G.Ripoll) to support OS/2 EMX:
	+ add a _scrolling flag to SP, to set when we encounter a terminal
	  that simply cannot scroll.
	+ corrected logic in _nc_add_to_try(), by ensuring that strings with
	  embedded \200 characters are matched.
	+ don't assume the host has 'link()' function, for linking terminfo
	  entries.

971220
	+ if there's no ioctl's to support sigwinch handler, disable it.
	+ add configure option --disable-ext-funcs to remove the extended
	  functions from the build.
	+ add configure option --with-termlib to generate the terminfo
	  functions as a separate library.
	+ add 'sources' rule to facilitate cross-compiling.
	+ review/fix order of mostlyclean/clean/distclean rules.
	+ modify install-rule for headers to first remove old header, in
	  case there was a symbolic link that confuses the install script.
	+ corrected substitution for NCURSES_CONST in term.h (cf: 971108)
	+ add null pointer checks in wnoutrefresh(), overlap() (patch by
	  Xiaodan Tang <xtang@qnx.com>)
	+ correct tputs(), which could dereference a null cur_term if invoked
	  before terminal is initialized (patch by Christopher Seawood
	  <cls@seawood.org>)
	> patch by Juergen Pfeifer:
	+ makes better use of "pragma Inline" in the Ada95 binding
	+ resynchronizes the generated html manpages

971213
	+ additional fixes for man-pages section-references
	+ add (for debugging) a check for ich/ich1 conflict with smir/rmir
	  to tic, etc.
	+ remove hpa/vpa from rxvt terminal description because they are not
	  implemented correctly, added sgr0.
	+ change ncurses 's' to use raw mode, so ^Q works (reported by Rudolf
	  Leitgeb <leitgeb@leland.stanford.edu>)

971206
	+ modify protection when installing libraries to (normally) not
	  executable.  HP-UX shared libraries are an exception.
	+ add configure check for 'tack'.
	+ implement script for renaming section-references in man-page install,
	  for Debian configuration.
	+ add validity-check for SP in trace code in baudrate() (reported by
	  Daniel Weaver).
	> patch by Alexander V. Lukyanov (fixes to match sol25 curses)
	+ modify 'overlay()' so that copy applies target window background to
	  characters.
	+ correct 'mvwin()' so that it does not clear the previous locations.
	+ correct lib_acs.c so that 8-bit character is not sign expanded in
	  case of wide characters in chtype.
	+ correct control-char test in lib_addch.c for use with wide chars
	+ use attribute in the chtype when adding a control character in
	  lib_addch.c control char was added with current attribute

971129
	+ save/restore errno in _tracef() function
	+ change treatment of initialize_color to use a range of 0..1000
	  (recommended by Daniel Weaver).
	+ set umask in mkinstalldirs, fixing problems reported by users who
	  have set root's umask to 077.
	+ correct bug in tic that caused capabilities to be reprinted at the
	  end of output when they had embedded comments.
	+ rewrote wredrawln to correspond to XSI, and split-out since it is
	  not often used (from report by Alexander V. Lukyanov, 970825)
	+ rewrote Dan Nelson's change to make it portable, as well as to
	  correct logic for handling backslashes.
	+ add code to _nc_tgetent() to make it work more like a real tgetent().
	  It removes all empty fields, and removes all but the first in a group
	  of duplicate caps.  The code was pulled from the BSD libtermcap code
	  in termcap.c (patch by Dan Nelson <dnelson@emsphone.com>
	+ don't include --enable-widec in the --with-develop configure option,
	  since it is not binary-compatible with 4.1 (noted by Alexander V.
	  Lukyanov)
	> patch by Juergen Pfeifer:
	+ further improvements of the usage of elaboration pragmas in the Ada95
	  binding
	+ enhanced Ada95 sample to use the user_data mechanism for panels.
	+ a fix for the configuration script to make gnat-3.10 the required
	  version.
	+ resync of the html version of the manpages

971122
	> fixes/updates for terminfo.src:
	+ add vt220-js, pilot, rbcomm, datapoint entries from esr's 27-jun-97
	  version.
	+ add hds200 description (Walter Skorski)
	+ add EMX 0.9b descriptions
	+ correct rmso/smso capabilities in wy30-mc and wy50-mc (Daniel Weaver)
	+ rename xhpterm back to hpterm.
	> patch by Juergen Pfeifer:
	+ Improves the usage of elaboration pragmas for the Ada95 binding.
	+ Adds a translation of the test/rain.c into Ada95 to the samples.
	  This has been contributed to the project by Laurent Pautet
	  (pautet@gnat.com)

971115
	+ increase MAX_NAME_SIZE to 512 to handle extremely long alias list
	  in HP-UX terminfo.
	+ correction & simplification of delay computation in tputs, based on
	  comments from Daniel Weaver.
	+ replace test for SCO with more precise header tests.
	+ add configure test for unsigned literals, use in NCURSES_BITS macro.
	+ comment-out the -PIC, etc., flags from c++, progs and test makefiles
	  since they probably are not needed, and are less efficient (noted by
	  Juergen Fluk)
	+ add -L$(libdir) to loader options, after -L../lib so that loaders
	  that record this information will tend to do the right thing if
	  the programs are moved around after installing them (suggested by
	  Juergen Fluk).
	+ add -R option to loader options for programs for Solaris if the
	  --enable-rpath option is specified for the libraries.

971112
	+ correct installed filename for shared libraries on *BSD (reported by
	  Juergen Fluk).

971108
	+ cleanup logic for deciding when tputs() should call delay_output(),
	  based on comments from Daniel Weaver.
	+ modified tputs() to avoid use of float.
	+ correct use of trailpad in tputs(), which used the wrong variable
	  in call to delay_output().
	+ correct inverted expression for null-count in delay_output()
	  (analysis by Daniel Weaver).
	+ apply --enable-rpath option to Solaris (requested by Larry Virden).
	+ correct substitution of EXTRA_CFLAGS for gcc 2.6.3
	+ correct check for error-return by _nc_tgetent(), which returns 0
	  for success.
	+ add configure test for BSD 4.4 cgetent() function, modify
	  read_termcap.c to use the host's version of that if found, using the
	  terminal database on FreeBSD (reported by Peter Wemm).
	+ add u8, u9 strings to sun-il description for Daniel Weaver.
	+ use NCURSES_CONST in panel's user-pointer.
	+ modify edit_cfg.sh and MKterm.h.awk.in to substitute NCURSES_CONST
	  so that will work on NeXT.
	+ use _nc_set_screen() rather than assignments to SP to fix port to
	  NeXT (reported by Francisco A. Tomei Torres).

971101
	+ force mandatory padding in bell and flash_screen, as specified in
	  XSI.
	+ don't allow padding_baud_rate to override mandatory delays (reported
	  by Daniel Weaver).
	+ modify delay_output() to use _nc_timed_wait() if no baudrate has been
	  defined, or if the cur_term pointer is not initialized.  XSI treats
	  this as unspecified.  (requested by Daniel Weaver).
	+ change getcap-cache ifdef's to eliminate unnecessary chdir/mkdir
	  when that feature is not configured.
	+ remove _nc_err_abort() calls when write_entry.c finds a directory but
	  cannot write to it, e.g., when translating part/all of /etc/termcap
	  (reported by Andreas Jaeger <aj@arthur.rhein-neckar.de>).
	  (this dates back to 951102 in 1.9.7a).
	+ minor ifdef fixes to compile with atac and glibc 2.0.5c
	+ add check for -lgen when configuring regexpr.h
	+ modify Solaris shared-library option "-d y" to "-dy" to workaround
	  incompatibility of gcc 2.7.2 vs vendor's tools.

971026
	+ correct ifdef's for struct winsize vs struct ttysize in lib_setup.c
	  to compile on SCO.
	+ remove dangling backslash in panel/Makefile.in
	+ modify MKkeyname.awk to work with SCO's nawk, which dumps core in the
	  length() function.
	+ correct length of allocation in _nc_add_to_try(), to allow for
	  trailing null.
	+ correct logic in _nc_remove_key(), which was discarding too many
	  nodes (patch by Alexander V. Lukyanov)

971025
	+ add definition for $(REL_VERSION) to test/Makefile.in, so *BSD
	  shared libraries link properly (see 970524).
	+ modify Linux shared-library generation to include library
	  dependencies (e.g., -lncurses and -lgpm) in the forms, menu and
	  panel libraries (suggested by Juergen Pfeifer).
	+ modify configure script to use config.guess and config.sub rather
	  than uname, which is unreliable on some systems.
	+ updated Makefile.glibc, test-built with glibc 2.0.5c
	+ modify keyname() to return values consistent with SVr4 curses (patch
	  by Juergen Fluk).
	> changes requested by Daniel Weaver:
	+ modify delay_output() so that it uses the same output function as
	  tputs() if called from that function.
	+ move _baudrate from SCREEN to TERMINAL so that low-level use of
	  tputs works when SP is not set.
	> patch by Juergen Pfeifer:
	+ factor lib_menu and lib_form into smaller modules
	+ clean up the interface between panel and SCREEN
	+ minor changes to the Ada95 mouse support implementation
	+ minor bugfix in C++ binding to ripoff windows
	+ fix a few Ada95 html documentation pages

971018
	+ split-out lib_ungetch.c, make runtime link to resizeterm() to
	  decouple those modules from lib_restart.c
	+ add xterm-xf86-v39t description to terminfo.src
	+ reset SP->_endwin in lib_tstp.c cleanup() function after calling
	  endwin() to avoid unnecessary repainting if the application has
	  established an atexit function, etc.  Encountered this problem in
	  the c++ demo, whose destructors repaint the screen.
	+ combine _nc_get_screensize() and resizeterm() calls as new function
	  _nc_update_screensize().
	+ minor fixes to allow compile with g++ (suggested by Nelson H. F.
	  Beebe).
	+ implement install-rules for Ada95 makefiles.
	+ use screen_lines or MAXLINES as needed where LINES was coded,
	  as well as screen_columns for COLS, in the ncurses library.
	> patch by Alexander V. Lukyanov:
	+ modify logic for ripped-off lines to handle several SCREENs.
	> patch by Juergen Pfeifer:
	+ factors lib_slk.c into some smaller modules
	+ factors panel.c into some smaller modules
	+ puts the static information about the current panel stack into the
	  SCREEN structure to allow different panel stacks on different
	  screens.
	+ preliminary fix for an error adjusting LINES to account for
	  ripped-off lines.

971011
	+ move _nc_max_click_interval and other mouse interface items to SCREEN
	  struct so that they are associated with a single terminal, and also
	  save memory when the application does not need a mouse (roughly 3k vs
	  0.5k on Linux).
	+ modify mouseinterval() so that a negative parameter queries the
	  click-interval without modifying it.
	+ modify ncurses 'i' test to work with ncurses' apparent extension from
	  SVr4, i.e., allows nocbreak+noecho (analysis by Alexander V.
	  Lukyanov).
	+ add configure options --with-ada-includes and --with-ada-objects,
	  to drive Ada95 binding install (not yet implemented).
	+ install C++ binding as -lncurses++ and associated headers with the
	  other ncurses headers.
	+ fix header uninstall if configure --srcdir is used.
	> minor interface changes to support 'tack' program -TD
	  (request by Daniel Weaver <danw@znyx.com>).
	+ export functions _nc_trans_string() and _nc_msec_cost().
	+ add variable _nc_nulls_sent, to record the number of padding
	  characters output in delay_output().
	+ move tests for generic_type and hard_copy terminals in setupterm()
	  to the end of that function so that the library will still be
	  initialized, though not generally useful for curses programs.
	> patches by Alexander V. Lukyanov:
	+ modify ClrBottom() to avoid using clr_eos if there is only one line
	  to erase.
	+ typo in configure --help.
	> patch by J T Conklin (with minor resync against Juergen's changes)
	+ split-out lib_flash.c from lib_beep.c
	+ split-out lib_hline.c and lib_vline.c from lib_box.c
	+ split-out lib_wattron.c, lib_wattroff.c from lib_addch.c

971005
	> patch by Juergen Pfeifer:
	+ correct source/target of c++/edit_cfg.sh

971004
	+ add color, mouse support to kterm terminfo entry.
	+ modify lib_mouse.c to recognize rxvt, kterm, color_xterm also as
	  providing "xterm"-style mouse.
	+ updated rxvt's terminfo description to correspond to 2.21b, with
	  fixes for the acsc (the box1 capability is incorrect, ech1 does not
	  work).
	+ fix logic in parse_entry.c that discarded acsc when 'synthesizing'
	  an entry from equivalents in XENIX or AIX.  This lets ncurses handle
	  the distribution copy of rxvt's terminfo.
	+ modify acsc capability for linux and linux-koi8 terminfo descriptions
	  (from Pavel Roskin <pavel@absolute.spb.su>).
	+ corrected definition in curses.h for ACS_LANTERN, which was 'I'
	  rather than 'i' (see 970802).
	+ updated terminfo.src with reformatted acsc entries, and repaired the
	  trashed entries with spurious '\' characters that this exposed.
	+ add logic to dump_entry.c to reformat acsc entries into canonical
	  form (sorted, unique mapping).
	+ add configure script to generate c++/etip.h
	+ add configure --with-develop option, to enable by default most of the
	  experimental options (requested by Alexander V. Lukyanov).
	+ rename 'deinstall' to 'uninstall', following GNU convention
	  (suggested by Alexander V. Lukyanov).
	> patches by Alexander V. Lukyanov:
	+ modify tactics 2 and 5 in onscreen_mvcur(), to allow them on the last
	  line of the screen, since carriage return will not cause a newline.
	+ remove clause from PutCharLR() that would try to use
	  eat_newline_glitch since that apparently does not work on some
	  terminals (e.g., M$ telnet).
	+ correct a limit check in scroll_csr_backward()
	> patches by Juergen Pfeifer:
	+ adds dummy implementations of methods above() and below() to the
	  NCursesPanel class.
	+ fixes missing returncode in NCursesWindow::ripoffline()
	+ fixes missing returncode in TestApplication::run() in demo.cc
	+ We should at least give a comment in etip.h why it is currently a
	  problem to install the C++ binding somewhere
	+ makes the WINDOW* argument of wenclose() a const.
	+ modifies several of the routines in lib_adabind.c to use a const
	  WINDOW* argument.

970927
	+ add 'deinstall' rules.
	+ use explicit assignments in configure --without-progs option to
	  work around autoconf bug which doesn't always set $withval.
	+ check for ldconfig, don't try to run it if not found.
	+ implement simple/unoptimized case in lib_doupdate.c to handle
	  display with magic cookie glitch, tested with ncurses.c program.
	+ correct missing _tracef in getmouse(), to balance the returnCode
	  macro.
	+ simplify show_attr() in ncurses.c using termattrs().
	> patches by Juergen Pfeifer:
	+ provides missing inlines for mvw[hv]line in cursesw.h of the C++
	  binding
	+ fixes a typo in a comment of frm_driver.c
	+ Enhances Ada95 Makefiles to fulfill the requirement of GNAT-3.10 that
	  generics should be compiled.  Proper fixes to the configuration
	  scripts are also provided.

970920
	+ several modifications to the configure script (requested by Ward
	  Horner):
	  + add configure options --without-progs, to suppress the build of the
	    utility programs, e.g., for cross-compiling.
	  + add $(HOSTCCFLAGS) and $(HOSTLDFLAGS) symbols to ncurses
	    Makefile.in, to simplify setup for cross compiling.
	  + add logic in configure script to recognize "--target=vxworks", and
	    generate load/install actions for VxWorks objects.
	+ move typedef for sigaction_t into SigAction.h to work around problem
	  generating lint library.
	+ modify fty_regex.c to reflect renaming of ifdef's for regular
	  expressions.
	+ simplify ifdef in lib_setup.c for TIOCGWINSZ since that symbol may
	  reside in <sys/ioctl.h>.
	+ merge testcurs.c with version from PDCurses 2.3, clarifying some of
	  the more obscure tests, which rely upon color.
	+ use macros getbegyx() and getmaxyx() in newdemo.c and testcurs.c
	+ modify ncurses.c to use getbegyx() and getmaxyx() macros to cover up
	  implementation difference wrt SVr4 curses, allow 's' test to work.
	+ add missing endwin() to testscanw.c program (reported by Fausto
	  Saporito <fausap@itb.it>).
	+ fixes/updates for Makefile.glibc and related files under sysdeps
	  (patch by H.J.Lu).
	> patches by Juergen Pfeifer:
	+ add checks for null pointers, especially WINDOW's throughout the
	  ncurses library.
	+ solve a problem with wrong calculation of panel overlapping (reported
	  by Ward Horner):
	  + make sure that a panel's window isn't a pad.
	  + do more error checking in module lib_touch.c
	+ missing files for Ada95 binding from the last patch
	+ synch. of generated html pages (RCS-Id's were wrong in html files)
	+ support for Key_Resize in Ada binding
	+ changed documentation style in ./c++/cursesm.h
	> patches by Alexander V. Lukyanov:
	+ undo attempt to do recursive inlining for PutChar(), noting that it
	  did not improve timing measurably, but inflated the size of
	  lib_doupdate.o

970913
	+ modify rain.c to use color.
	+ correct scroll_csr_backward() to match scroll_csr_forward().
	+ minor adjustment to llib-lncurses, to work with Solaris 2.5.1
	+ minor fixes to sysdeps/unix/sysv/linux/configure to reflect renaming
	  of configure cache variables in 970906.
	+ correct logic involving changes to O_VISIBLE option in
	  Synchronize_Options function in frm_driver.c (Tony Hoffmann
	  <Tony.Hoffmann@hia.nrc.ca>)
	+ add $(HOSTCC) symbol to ncurses Makefile.in, to simplify setup for
	  cross compiling (suggested by Chris Johns).
	+ modify ifdef in lib_setup.c to only include <sys/ioctl.h> if we can
	  use it to support screen-size calculation (reported by Chris Johns).
	+ #undef unctrl to avoid symbol conflict in port to RTEMS (reported by
	  Chris Johns <cjohns@plessey.com.au>)
	> patches by Juergen Pfeifer:
	+ simplified, made minor corrections to Ada95 binding to form
	  fieldtype.
	+ The C++ binding has been enhanced:
	  + Improve NCursesWindow class:  added additional methods to cover
	    more ncurses functionality.  Make refresh() and noutrefresh()
	    virtual members to allow different implementation in the
	    NCursesPanel class.
	  + CAUTION:  changed order of parameters in vline() and hline() of
	    NCursesWindow class.
	  + Make refresh() in NCursesPanel non-static, it is now a
	    reimplementation of refresh() in the base class.  Added
	    noutrefresh() to NCursesPanel.
	  + Added NCursesForm and related classes to support libform
	    functionality.
	  + Moved most of configuration related stuff from cursesw.h to etip.h
	  + Added NCursesApplication class to support easy configuration of
	    menu and forms related attributes as well as ripped of title lines
	    and Soft-Label-Keys for an application.
	  + Support of Auto-Cleanup for a menu's fieldlist.
	  + Change of return type for current_item() and operator[] for menus.
	  + Enhanced demo.
	+ Fixed a bug in form/fld_def.c:  take into account that copyarg and
	  freearg for a fieldtype may be NULL, makearg must not be NULL
	+ Fixed a bug in form/fld_type.c:  in set_fieldtype_arg() makearg must
	  not be NULL, copyarg and freearg may be NULL.
	+ Fixed a bug in form/frm_def.c:  Allow Disconnect_Fields() if it is
	  already disconnected.
	+ Enhance form/frm_driver.c:  Allow growth of dynamic fields also on
	  navigation requests.
	+ Fixed a bug in form/fty_enum.c:  wrong position of postincrement in
	  case-insensitiva comparison routine.
	+ Enhanced form/lib_adabind.c with function _nc_get_field() to get a
	  forms field by index.
	+ Enhanced menu/m_adabind.c with function _nc_get_item() to get a menus
	  item by index.
	+ Fixed in curses.h.in:  make chtype argument for pechochar() constant.
	  Mark wbkgdset() as implemented, remove wbkgdset macro, because it was
	  broken (didn't handle colors correctly).
	+ Enhanced lib_mouse.c: added _nc_has_mouse() function
	+ Added _nc_has_mouse() prototype to curses.priv.h
	+ Modified lib_bkgd.c:  hopefully correct implementation of wbkgdset();
	  streamlined implementation of wbkgd()
	+ Modified lib_mvwin.c:  Disable move of a pad.  Implement (costly)
	  move of subwindows.  Fixed update behavior of movements of regular
	  windows.
	+ Fixed lib_pad.c:  make chtype argument of pechochar() const.
	+ Fixed lib_window.c:  dupwin() is not(!) in every bit a really clone
	  of the original.  Subwindows become regular windows by doing a
	  dupwin().
	+ Improved manpage form_fieldtype.3x
	> patches by Alexander V. Lukyanov:
	+ simplify the PutChar() handling of exit_am_mode, because we already
	  know that auto_right_margin is true.
	+ add a check in PutChar() for ability to insert to the case of
	  shifting character to LR corner.
	+ in terminal initialization by _nc_screen_resume(), make sure that
	  terminal right margin mode is known.
	+ move logic that invokes touchline(), or does the equivalent, into
	  _nc_scroll_window().
	+ modify scrolling logic use of insert/delete line capability, assuming
	  that they affect the screen contents only within the current
	  scrolling region.
	+ modify rain.c to demonstrate SIGWINCH handler.
	+ remove logic from getch() that would return an ERR if the application
	  called getch() when the cursor was at the lower-right corner of the
	  physical screen, and the terminal does not have insert-character
	  ability.
	+ change view.c so that it breaks out of getch() loop if a KEY_RESIZE
	  is read, and modify logic in getch() so this fix will yield the
	  desired behavior, i.e., the screen is repainted automatically when
	  the terminal window is resized.

970906
	+ add configure option --enable-sigwinch
	+ modify view.c to test KEY_RESIZE logic, with "-r" option.
	+ modify testcurs.c to eliminate misleading display wrt cursor type
	  by testing if the terminal supports cnorm, civis, cvvis.
	+ several fixes for m68k/NeXT 4.0, to bring cur_term, _nc_curr_line and
	  _nc_curr_col variables into linked programs:  move these variables,
	  making new modules lib_cur_term and trace_buf (reported by Francisco
	  Alberto Tomei Torres <fatomei@sandburg.unm.edu>).
	> patches by Alexander V. Lukyanov:
	+ add pseudo-functionkey KEY_RESIZE which is returned by getch() when
	  the SIGWINCH handler has been called since the last call to
	  doupdate().
	+ modify lib_twait.c to hide EINTR only if HIDE_EINTR is defined.
	+ add SIGWINCH handler to ncurses library which is used if there is no
	  application SIGWINCH handler in effect when the screen is
	  initialized.
	+ make linked list of all SCREEN structures.
	+ move curses.h include before definition of SCREEN to use types in
	  that structure.
	+ correction to ensure that wgetstr uses only a newline to force a
	  scroll (970831).

970831
	+ add experimental configure option --enable-safe-sprintf; the normal
	  mode now allocates a buffer as large as the screen for the
	  lib_printw.c functions.
	+ modify wgetch to refresh screen when reading ungetch'd characters,
	  since the application may require this - SVr4 does this.
	+ refine treatment of newline in wgetstr to echo only when this would
	  force the screen to scroll.

970830
	+ remove override in wgetstr() that forces keypad(), since SVr4 does
	  not do this.
	+ correct y-reference for erasure in wgetstr() when a wrap forces a
	  scroll.
	+ correct x-position in waddch() after a wrap forces a scroll.
	+ echo newline in wgetstr(), making testscanw.c scroll properly when
	  scanw is done.
	+ modify vwscanw() to avoid potential buffer overflow.
	+ rewrote lib_printw.c to eliminate fixed-buffer limits.
	> patches by Alexander V. Lukyanov:
	+ correct an error in handling cooked mode in wgetch(); processing
	  was in the wrong order.
	+ simplified logic in wgetch() that handles backspace, etc., by using
	  wechochar().
	+ correct wechochar() so that it interprets the output character as
	  in waddch().
	+ modify pechochar() to use prefresh() rather than doupdate(), since
	  the latter does not guarantee immediate refresh of the pad.
	+ modify pechochar() so that if called with a non-pad WINDOW, will
	  invoke wechochar() instead.
	+ modify fifo indices to allow fifo to be longer than 127 bytes.

970823
	+ add xterm-8bit to terminfo.src
	+ moved logic for SP->_fifohold inside check_pending() to make it
	  work properly when we add calls to that function.
	+ ensure that bool functions return only TRUE or FALSE, and TRUE/FALSE
	  are assigned to bool values (patch by H.J.Lu).
	> patches by Alexander V. Lukyanov:
	+ several fixes to getch:
	  1.  Separate cooked and raw keys in fifo
	  2.  Fix the case of ungetch'ed KEY_MOUSE
	  3.  wrap the code for hiding EINTR with ifdef HIDE_EINTR
	  4.  correctly handle input errors (i.e., EINTR) without loss of raw
	      keys
	  5.  recognize ESC KEY_LEFT and similar
	  6.  correctly handle the case of reception of KEY_MOUSE from gpm
	+ correct off-by-one indexing error in _nc_mouse_parse(), that caused
	  single mouse events (press/release) to be ignored in favor of
	  composed events (click).  Improves on a fix from integrating gpm
	  support in 961229.
	+ add another call to check_pending, before scrolling, for
	  line-breakout optimization
	+ improve hashmap.c by
	  1.  fixed loop condition in grow_hunks()
	  2.  not marking lines with offset 0
	  3.  fixed condition of 'too far' criteria, thus one-line hunks are
	  ignored and two lines interchanged won't pass.
	+ rewrote/simplified _nc_scroll_optimize() by separating into two
	  passes, forward/backward, looking for chunks moving only in the given
	  direction.
	+ move logic that emits sgr0 when initializing the screen to
	  _nc_screen_init(), now invoked from newterm.
	+ move cursor-movement cleanup from endwin() into _nc_mvcur_wrap()
	  function and screen cleanup (i.e., color) into _nc_screen_wrap()
	  function.
	+ add new functions _nc_screen_init(), _nc_screen_resume() and
	  _nc_screen_wrap().
	+ rename _nc_mvcur_scrolln() to _nc_scrolln().
	+ add a copy of acs_map[] to the SCREEN structure, where it can be
	  stored/retrieved via set_term().
	+ move variables _nc_idcok, _nc_idlok, _nc_windows into the SCREEN
	  structure.

970816
	+ implement experimental _nc_perform_scroll().
	+ modify newterm (actually _nc_setupscreen()) to emit an sgr0 when
	  initializing the screen, as does SVr4 (reported by Alexander V.
	  Lukyanov).
	+ added test_progs rule to ncurses/Makefile.
	+ modify test/configure.in to check if initscr is already in $LIBS
	  before looking for (n)curses library.
	+ correct version-number in configure script for OSF1 shared-library
	  options (patch by Tim Mooney).
	+ add -DNDEBUG to CPPFLAGS for --enable-assertions (as Juergen
	  originally patched) since the c++ demo files do not necessarily
	  include ncurses_cfg.h
	+ supply default value for --enable-assertions option in configure
	  script (reported by Kriang Lerdsuwanakij <lerdsuwa@scf-fs.usc.edu>).
	> patches by Alexander V. Lukyanov:
	+ correct/simplify logic of werase(), wclrtoeol() and wclrbot().  See
	  example firstlast.c
	+ optimize waddch_literal() and waddch_nosync() by factoring out
	  common subexpressions.
	+ correct sense of NDEBUG ifdef for CHECK_POSITION macro.
	+ corrections to render_char(), to make handling of colored blanks
	  match SVr4 curses, as well as to correct a bug that xor'd space
	  against the background character.
	+ replaced hash function with a faster one (timed it)
	+ rewrote the hashmap algorithm to be one-pass, this avoids multiple
	  cost_effective() calls on the same lines.
	+ modified cost_effective() so it is now slightly more precise.
	> patches for glibc integration (H.J.Lu):
	+ add modules define_key, keyok, name_match, tries
	+ add makefile rules for some of the unit tests in ncurses (mvcur,
	  captoinfo, hardscroll, hashmap).
	+ update Linux configure-script for wide-character definitions.

970809
	+ modify _tracebits() to show the character size (e.g., CS8).
	+ modify tparm() to emit '\200' where the generated string would have a
	  null (reported by From:  Ian Dall <Ian.Dall@dsto.defence.gov.au> for
	  terminal type ncr7900).
	+ modify install process so that ldconfig is not invoked if the
	  package is built with an install-prefix.
	+ correct test program for chtype size (reported by Tim Mooney).
	+ add configure option --disable-scroll-hints, using this to ifdef the
	  logic that computes indices for _nc_scroll_optimize().
	+ add module ncurses/softscroll.c, to perform single-stage computation
	  of scroll indices used in _nc_scroll_optimize().  This is faster than
	  the existing scrolling algorithm, but tends to make too-small hunks.
	+ eliminate fixed buffer size in _nc_linedump().
	+ minor fixes to lib_doupdate.c to add tradeoff between clr_eol (el)
	  and clr_bol (el1), refine logic in ClrUpdate() and ClrBottom() (patch
	  by Alexander V. Lukyanov).
	+ add test/testaddch.c, from a pending patch by Alexander V. Lukyanov.
	+ correct processing of "configure --enable-assertions" option (patch
	  by Juergen Pfeifer).

970802
	+ add '-s' (single-step) option too test/hashtest.c, correct an error
	  in loop limit for '-f' (footer option), toggle scrollok() when
	  writing footer to avoid wrap at lower-right corner.
	+ correct behavior of clrtoeol() immediately after wrapping cursor,
	  which was not clearing the line at the cursor position (reported by
	  Liviu Daia <daia@stoilow.imar.ro>).
	+ corrected mapping for ACS_LANTERN, which was 'I' rather than 'i'
	  (reported by Klaus Weide <kweide@tezcat.com>).
	+ many corrections to make progs/capconvert work, as well as make it
	  reasonably portable and integrated with ncurses 4.1 (reported by Dave
	  Furstenau <df@ravine.binary.net>).

970726
	+ add flag SP->_fifohold, corresponding logic to modify the behavior of
	  the line breakout logic so that if the application does not read
	  input, refreshes will not be stopped, but only slowed.
	+ generate slk_attr_off(), slk_attr_on(), slk_attr_set(), vid_attr(),
	  ifdef'd for wide-character support, since ncurses' WA_xxx attribute
	  masks are identical with the A_xxx masks.
	+ modify MKlib_gen.sh to generate ifdef'd functions to support optional
	  configuration of wide-characters.
	+ modify tset to behave more like SVr4's tset, which does not modify
	  the settings of intr, quit or erase unless they are given as command
	  options (reported by Nelson H. F. Beebe <beebe@math.utah.edu>).
	+ modify tset to look in /etc/ttys or /etc/ttytype if the configuration
	  does not have getttynam().
	+ extend baudrate table in tset.c to match baudrate() function.
	+ add table entries for B230400 and B460800 to baudrate() function.
	+ improve breakout logic by allowing it before the first line updated,
	  which is what SVr4 curses does (patch by Alexander V. Lukyanov).
	+ correct initialization of vcost in relative_move(), for cursor-down
	  case (patch by Alexander V. Lukyanov).
	> nits gleaned from Debian distribution of 1.9.9g-3:
	+ install symbolic link for intotocap.
	+ reference libc directly when making shared libraries.
	+ correct renaming of curs_scr_dmp.3x in man_db.renames.
	+ guard tgetflag() and other termcap functions against null cur_term
	  pointer.

970719
	+ corrected initial state of software echo (error in 970405, reported
	  by Alexander V. Lukyanov).
	+ reviewed/added messages to configure script, so that all non-test
	  options should be accompanied by a message.
	+ add configure check for long filenames, using this to determine if
	  it is safe to allow long aliases for terminal descriptions as does
	  SVr4.
	+ add configure options for widec (wide character), hashmap (both
	  experimental).
	> patch by Alexander V. Lukyanov:
	+ hashmap.c - improved by heuristic, so that scroll test works much
	  better when csr is not available.
	+ hardscroll.c - patched so that it continues to scroll other chunks
	  after failure to scroll one.
	+ lib_doupdate.c - _nc_mvcur_scrolln extended to handle more cases; csr
	  is avoided as it is relative costly.  Fixed wrong coordinates in one
	  case and wrong string in TRACE.
	> patch by Juergen Pfeifer:
	+ modify C++ binding to compile on AIX 4.x with the IBM C-SET++
	  compiler.

970712
	+ remove alternate character set from kterm terminfo entry; it uses the
	  shift-out control for a purpose incompatible with curses, i.e., font
	  switching.
	+ disentangle 'xterm' terminfo entry from some derived entries that
	  should be based on xterm-r6 instead.
	+ add cbt to xterm-xf86-xv32 terminfo entry; I added the emulation for
	  XFree86 3.1.2F, but overlooked its use in terminfo then - T.Dickey.
	+ correct logic in lib_mvcur.c that uses back_tab.

970706
	+ correct change from 970628 to ClrUpdate() in lib_doupdate.c so that
	  contents of curscr are saved in newscr before clearing the screen.
	  This is needed to make repainting work with the present logic of
	  TransformLine().
	+ use napms() rather than sleep() in tset.c to avoid interrupting I/O.

970705
	+ add limit checks to _nc_read_file_entry() to guard against overflow
	  of buffer when reading incompatible terminfo format, e.g, from OSF/1.
	+ correct some loop-variable errors in xmc support in lib_doupdate.c
	+ modify ncurses 'b' test to add gaps, specified by user, to allow
	  investigation of interaction with xmc (magic cookie) code.
	+ correct typo in 970524 mods to xmas.c, had omitted empty parameter
	  list from has_colors(), which gcc ignores, but SVr4 does not
	  (reported by Larry Virden).
	+ correct rmso capability in wy50-mc description.
	+ add configure option "--enable-hard-tabs", renamed TABS_OK ifdef to
	  USE_HARD_TABS.
	> patch by Juergen Pfeifer:
	+ Add bindings for keyok() and define_key() to the Ada95 packages.
	+ Improve man pages menu_post.3x and menu_format.3x
	+ Fix the HTML pages in the Ada95/html directory to reflect the above
	  changes.

970628
	+ modify change from 970101 to ClrUpdate() in lib_doupdate.c so that
	  pending changes to both curscr and newscr are flushed properly.
	  This fixes a case where the first scrolling operation in nvi would
	  cause the screen to be cleared unnecessarily and repainted before
	  doing the indexing, i.e., by repeatedly pressing 'j' (reported by
	  Juergen Pfeifer).
	+ correct error in trans_string() which added embedded newlines in a
	  terminfo description to the stored strings.
	+ remove spurious newlines from sgr in wyse50 (and several other)
	  terminfo descriptions.
	+ add configure option for experimental xmc (magic cookie) code,
	  "--enable-xmc-glitch".  When disabled (the default), attributes that
	  would store a magic cookie are suppressed in vidputs().  The magic
	  cookie code is far from workable at this stage; the configuration
	  option is a stopgap.
	+ move _nc_initscr() from lib_initscr.c to lib_newterm.c
	+ correct path for invoking make_keys (a missing "./").

970621
	+ correct sign-extension problem with "infocmp -e", which corrupted
	  acsc values computed for linux fallback data.
	+ correct dependency on ncurses/names.c (a missing "./").
	+ modify configure script to use '&&' even for cd'ing to existing
	  directories to work around broken shell interpreters.
	+ correct a loop-limit in _nc_hash_map() (patch by Alexander V.
	  Lukyanov).

970615
	+ restore logic in _nc_scroll_optimize() which marks as touched the
	  lines in curscr that are shifted.
	+ add new utility 'make_keys' to compute keys.tries as a table rather
	  than a series of function calls.
	+ correct include-dependency for tic.h used by name_match
	+ removed buffer-allocation for name and description from m_item_new.c,
	  since this might result in incompatibilities with SVr4.  Also fixed
	  the corresponding Ada95 binding module (patch by Juergen Pfeifer,
	  report by Avery Pennarun <apenwarr@foxnet.net>)
	+ removed the mechanism to timestamp the generated Ada95 sources.  This
	  resulted always in generating patches for the HTML doc, even when
	  nothing really changed (patch by Juergen Pfeifer).
	+ improve man page mitem_new.3x (patch by Juergen Pfeifer).

970614
	+ remove ech capability from rxvt description because it does not work.
	+ add missing case logic for infocmp -I option (reported by Lorenzo M.
	  Catucci <lorenzo@argon.roma2.infn.it>)
	+ correct old bug in pnoutrefresh() unmasked by fix in 970531; this
	  caused glitches in the ncurses 'p' test since the area outside the
	  pad was not compared when setting up indices for _nc_scroll_optimize.
	+ rewrote tracebits() to workaround misdefinition of TOSTOP on Ultrix
	  4.4, as well as to eliminate fixed-size buffer (reported by Chris
	  Tanner <tannerc@aecl.ca>)
	+ correct prototype for termattrs() as per XPG4 version 2.
	+ add placeholder prototypes for color_set(), erasewchar(),
	  term_attrs(), wcolor_set() as per XPG4 version 2.
	+ correct attribution for progs/progs.priv.h and lib_twait.c
	+ improve line-breakout logic by checking based on changed lines rather
	  than total lines (patch by Alexander V. Lukyanov).
	+ correct loop limits for table-lookup of enumerated value in form
	  (patch by Juergen Pfeifer).
	+ improve threshold computation for determining when to call ClrToEOL
	  (patch by Alexander V. Lukyanov).

970531
	+ add configure option --disable-database to force the library to
	  use only the fallback data.
	+ add configure option --with-fallbacks, to specify list of fallback
	  terminal descriptions.
	+ add a symbolic link for ncurses.h during install; too many programs
	  still assume there's an ncurses.h
	+ add new terminfo.src entry for xterm-xf86-v33.
	+ restore terminfo.src entry for emu to using setf/setb, since it is
	  not, after all, generating ANSI sequences.  Corrected missing comma
	  that caused setf/setb entries to merge.
	+ modify mousemask() to use keyok() to enable/disable KEY_MOUSE, so
	  that applications can disable ncurses' mouse and supply their own
	  handler.
	+ add extensions keyok() and define_key().  These are designed to allow
	  the user's application better control over the use of function keys,
	  e.g., disabling the ncurses KEY_MOUSE.  (The define_key idea was from
	  a mailing-list thread started by Kenneth Albanowski
	  <kjahds@kjahds.com> Nov'1995).
	+ restore original behavior in ncurses 'g' test, i.e., explicitly
	  set the keypad mode rather than use the default, since it confuses
	  people.
	+ rewrote the newdemo banner so it's readable (reported by Hugh
	  Daniel).
	+ tidy up exit from hashtest (reported by Hugh Daniel).
	+ restore check for ^Q in ncurses 'g' test broken in 970510 (reported
	  by Hugh Daniel)
	+ correct tput program, checking return-value of setupterm (patch by
	  Florian La Roche).
	+ correct logic in pnoutrefresh() and pechochar() functions (reported
	  by Kriang Lerdsuwanakij <lerdsuwa@scf.usc.edu>).  The computation
	  of 'wide' date to eric's #283 (1.9.9), and the pechochar bug to the
	  original implementation (1.9.6).
	+ correct typo in vt102-w terminfo.src entry (patch by Robert Wuest
	  <rwuest@sire.vt.com>)
	+ move calls of _nc_background() out of various loops, as its return
	  value will be the same for the whole window being operated on (patch
	  by J T Conklin).
	+ add macros getcur[xy] getbeg[xy] getpar[xy], which are defined in
	  SVr4 headers (patch by J T Conklin <jtc@NetBSD.ORG>)
	+ modify glibc addon-configure scripts (patch by H.J.Lu).
	+ correct a bug in hashmap.c: the size used for clearing the hashmap
	  table was incorrect, causing stack corruption for large values of
	  LINES, e.g., >MAXLINES/2 (patch by Alexander V. Lukyanov).
	+ eric's terminfo 9.13.23 & 9.13.24 changes: replaced minitel-2 entry,
	  added MGR, ansi-nt (note: the changes described for 9.13.24 have not
	  been applied).
	> several changes by Juergen Pfeifer:
	+ correct a missing error-return in form_driver.c when wrapping of a
	  field is not possible.
	+ correct logic in form_driver.c for configurations that do not have
	  memccpy() (reported by Sidik Isani <isani@cfht.hawaii.edu>)
	+ change several c++ binding functions to inline.
	+ modify c++ menu binding to inherit from panels, for proper
	  initialization.
	+ correct freeing of menu items in c++ binding.
	+ modify c++ binding to reflect removal of const from user data pointer
	  in forms/menus libraries.

970524
	+ add description of xterm-16color.
	+ modify name of shared-library on *BSD to end with $(REL_VERSION)
	  rather than $(ABI_VERSION) to match actual convention on FreeBSD
	  (cf: 960713).
	+ add OpenBSD to shared-library case, same as NetBSD and FreeBSD
	  (reported by Hugh Daniel <hugh@rat.toad.com>).
	+ corrected include-dependency in menu/Makefile so that "make install"
	  works properly w/o first doing "make".
	+ add fallback definition for isascii, used in infocmp.
	+ modify xmas to use color, and to exit right away when a key is
	  pressed.
	+ modify gdc so that the scrolled digits function as described (there
	  was no time delay between the stages, and the digits overwrote the
	  bounding box without tidying up).
	+ modify lib_color.c to use setaf/setab only for the ANSI color codes
	  0 through 7.  Using 16 colors requires setf/setb.
	+ modify ncurses 'c' test to work with 16 colors, as well as the normal
	  8 colors.
	+ remove const qualifier from user data pointer in forms and menus
	  libraries (patch by Juergen Pfeifer).
	+ rewrote 'waddchnstr()' to avoid using the _nc_waddch_nosync()
	  function, thereby not interpreting tabs, etc., as per spec (patch by
	  Alexander V. Lukyanov).

970517
	+ suppress check for pre-existing ncurses header if the --prefix
	  option is specified.
	+ add configure options "--with-system-type" and
	  "--with-system-release" to assist in checking the generated
	  makefiles.
	+ add configure option "--enable-rpath" to allow installers to specify
	  that programs linked against shared libraries will have their library
	  path embedded, allowing installs into nonstandard locations.
	+ add flags to OSF1 shared-library options to specify version and
	  symbol file (patch by Tim Mooney <mooney@dogbert.cc.ndsu.NoDak.edu>)
	+ add missing definition for ABI_VERSION to c++/Makefile.in (reported
	  by Satoshi Adachi <adachi@wisdom.aa.ap.titech.ac.jp>).
	+ modify link flags to accommodate HP-UX linker which embeds absolute
	  pathnames in executables linked against shared libraries (reported by
	  Jason Evans <jasone@mrc.uidaho.edu>, solved by Alan Shutko
	  <ats@hubert.wustl.edu>).
	+ drop unnecessary check for attribute-change in onscreen_mvcur() since
	  mvcur() is the only caller within the library, and that check in turn
	  is exercised only from lib_doupdate.c (patch by Alexander V.
	  Lukyanov).
	+ add 'blank' parameter to _nc_scroll_window() so _nc_mvcur_scrolln()
	  can use the background of stdscr as a parameter to that function
	  (patch by Alexander V. Lukyanov).
	+ moved _nc_mvcur_scrolln() from lib_mvcur.c to lib_doupdate.c, to use
	  the latter's internal functions, as well as to eliminate unnecessary
	  cursor save/restore operations (patch by Alexander V. Lukyanov).
	+ omit parameter of ClrUpdate(), since it is called only for newscr,
	  further optimized/reduced by using ClearScreen() and TransformLine()
	  to get rid of duplicate code (patch by Alexander V. Lukyanov).
	+ modify scrolling algorithm in _nc_scroll_optimize() to reject hunks
	  that are smaller than the distance to be moved (patch by Alexander V.
	  Lukyanov).
	+ correct a place where the panel library was not ifdef'd in ncurses.c
	  (Juergen Pfeifer)
	+ documentation fixes (Juergen Pfeifer)

970515	4.1 release for upload to prep.ai.mit.edu
	+ re-tag changes since 970505 as 4.1 release.

970510
	+ modify ncurses 'g' test to allow mouse input
	+ modify default xterm description to include mouse.
	+ modify configure script to add -Wwrite-strings if gcc warnings are
	  enabled while configuring --enable-const (and fixed related
	  warnings).
	+ add toggle, status display for keypad mode to ncurses 'g' test to
	  verify that keypad and scrollok are not inherited from parent window
	  during a call to newwin.
	+ correction to MKexpanded.sh to make it work when configure --srcdir
	  is used (reported by H.J.Lu).
	+ revise test for bool-type, ensuring that it checks if builtin.h is
	  available before including it, adding test for sizeof(bool) equal
	  to sizeof(short), and warning user if the size cannot be determined
	  (reported by Alexander V. Lukyanov).
	+ add files to support configuration of ncurses as an add-on library
	  for GNU libc (patch by H.J.Lu <hjl@lucon.org>)

970506
	+ correct buffer overrun in lib_traceatr.c
	+ modify change to lib_vidattr.c to avoid redundant orig_pair.
	+ turn on 'echo()' in hanoi.c, since it is initially off.
	+ rename local 'errno' variable in etip.h to avoid conflict with global
	  (H.J.Lu).
	+ modify configure script to cache LD, AR, AR_OPTS (patch by H.J.Lu
	  <hjl@lucon.org>)

970505	4.1 pre-release
	+ regenerate the misc directory html dumps without the link list, which
	  is not useful.
	+ correct dependency in form directory makefile which caused
	  unnecessary recompiles.
	+ correct substitution for ABI_VERSION in test-makefile
	+ modify install rules for shared-library targets to remove the target
	  before installing, since some install programs do not properly handle
	  overwrite of symbolic links.
	+ change order of top-level targets so that 'include' immediate
	  precedes the 'ncurses' directory, reducing the time between new
	  headers and new libraries (requested by Larry Virden).
	+ modify lib_vidattr.c so that colors are turned off only before
	  modifying other attributes, turned on after others.  This makes the
	  hanoi.c program display correctly on FreeBSD console.
	+ modify debug code in panel library to print user-data addresses
	  rather than the strings which they (may) point to.
	+ add check to ensure that C++ binding and demo are not built with g++
	  versions below 2.7, since the binding uses templates.
	+ modify c++ binding and demo to build and run with SGI's c++ compiler.
	  (It also compiles with the Sun SparcWorks compiler, but the demo does
	  not link, due to a vtbl problem).
	+ corrections to demo.cc, to fix out-of-scope variables (Juergen
	  Pfeifer).

970503
	+ correct memory leak in _nc_trace_buf().
	+ add configure test for regexpr.h, for Unixware 1.x.
	+ correct missing "./" prefixing names of generated files in ncurses
	  directory.
	+ use single-quotes in configure scripts assignments for MK_SHARED_LIB
	  to workaround shell bug on FreeBSD 2.1.5
	+ remove tabs from intermediate #define's for GCC_PRINTF, GCC_SCANF
	  that caused incorrect result in ncurses_cfg.h
	+ correct initialization in lib_trace.c, which omitted version info.
	+ remove ech, el1 attributes from cons25w description; they appear to
	  malfunction in FreeBSD 2.1.5
	+ correct color attributes in terminfo.src and lib_color.c to match
	  SVr4 behavior by interchanging codes 1,4, 3,6 in the setf/setb
	  capabilities.
	+ use curs_set() rather than checks via tigetstr() for test programs
	  that hide the cursor: firework, rain, worm.
	+ ensure that if the terminal lacks change_scroll_region, parm_index
	  and parm_rindex are used only to scroll the whole screen (patch by
	  Peter Wemm).
	+ correct curs_set() logic, which did not return ERR if the requested
	  attributes did not exist, nor did it assume an unknown initial state
	  for the cursor (patch by Alexander V. Lukyanov).
	+ combine IDcTransformLine and NoIDcTransformLine to new TransformLine
	  function in lib_doupdate.c (patch by Alexander V. Lukyanov).
	+ correct hashmap.c, which did not update index information (patch by
	  Alexander V. Lukyanov).
	+ fixes for C++ binding and demo (see c++/NEWS) (Juergen Pfeifer).
	+ correct index in lib_instr.c (Juergen Pfeifer).
	+ correct typo in 970426 patch from Tom's cleanup of lib_overlay.c
	  (patch by Juergen Pfeifer).

970426
	+ corrected cost computation in PutRange(), which was using
	  milliseconds compared to characters by adding two new members to the
	  SCREEN struct, _hpa_ch_cost and _cup_ch_cost.
	+ drop ncurses/lib_unctrl.c, add ncurses/MKunctrl.awk to generate a
	  const array of strings (suggested by Alexander V. Lukyanov).  The
	  original suggestion in 970118 used a perl script.
	+ rewrote ncurses 'b' test to better exercise magic-cookie (xmc), as
	  well as noting the attributes that are not supported by a terminal.
	+ trace the computation of cost values in lib_mvcur.c
	+ modify _nc_visbuf() to use octal rather than hex, corrected sign
	  extension bug in that function that caused buffer overflow.
	+ modify trace in lib_acs.c to use _nc_visbuf().
	+ suppress trace within _traceattr2().
	+ correct logic of _tracechtype2(), which did not account for repeats
	  or redefinition within an acsc string.
	+ modify debug-library version baudrate() to use environment variable
	  $BAUDRATE to override speed computation.  This is needed for
	  regression testing.
	+ correct problems shown by "weblint -pedantic".
	+ update mailing-list information (now ncurses@bsdi.com).

970419
	+ Improve form_field_validation.3x manpage to better describe the
	  precision parameter for TYPE_NUMERIC and TYPE_INTEGER.  Provide more
	  precise information how the range checking can be avoided.  (patch by
	  Juergen Pfeifer, reported by Bryan Henderson)
	+ change type of min/max value of form types TYPE_INTEGER to long to
	  match SVr4 documentation.
	+ set the form window to stdscr in set_form_win() so that form_win()
	  won't return null (patch by Juergen Pfeifer, reported by Bryan
	  Henderson <bryanh@giraffe.netgate.net>).

970412
	+ corrected ifdef'ing of inline (cf: 970321) for TRACE vs C++.
	+ corrected toggle_attr_off() macro (patch by Andries Brouwer).
	+ modify treatment of empty token in $MANPATH to /usr/man (reported by
	  <Andries.Brouwer@cwi.nl>)
	+ modify traces that record functions-called so that chtype and attr_t
	  values are expressed symbolically, to simplify reuse of generated
	  test-scripts on SVr4 regression testing.
	+ add new trace functions _traceattr2() and _tracechtype2()

970405
	+ add configure option --enable-const, to support the use of 'const'
	  where XSI should have, but did not, specify.  This defines
	  NCURSES_CONST, which is an empty token otherwise, for strict
	  compatibility.
	+ make processing of configure options more verbose by echoing the
	  --enable/--with values.
	+ add configure option --enable-big-core
	+ set initial state of software echo off as per XSI.
	+ check for C++ builtin.h header
	+ correct computation of absolute-path for $INSTALL that dropped "-c"
	  parameter from the expression.
	+ rename config.h to ncurses_cfg.h to avoid naming-conflict when
	  ncurses is integrated into larger systems (adapted from diffs by
	  H.J.Lu for libc).
	+ correct inequality in lib_doupdate.c that caused a single-char to not
	  be updated when the char on the right-margin was not blank, idcok()
	  was true (patch by Alexander V Lukyanov (in 970124), reported
	  by Kriang Lerdsuwanakij <lerdsuwa@scf-fs.usc.edu> in 970329).
	+ modify 'clean' rule in include/Makefile so that files created by
	  configure script are removed in 'distclean' rule instead.

970328
	+ correct array limit in tparam_internal(), add case to interpret "%x"
	  (patch by Andreas Schwab)
	+ rewrote number-parsing in ncurses.c 'd' test; it did not reset the
	  value properly when non-numeric characters were given (reported by
	  Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>)

970321
	+ move definition of __INTERNAL_CAPS_VISIBLE before include for
	  progs.priv.h (patch by David MacKenzie).
	+ add configuration summary, reordered check for default include
	  directory to better accommodate a case where installer is configuring
	  a second copy of ncurses (reported by Klaus Weide
	  <kweide@tezcat.com>)
	+ moved the #define for 'inline' as an empty token from the
	  $(CFLAGS_DEBUG) symbol into config.h, to avoid redefinition warning
	  (reported by Ward Horner).
	+ modify test for bool builtin type to use 'unsigned' rather than
	  'unknown' when cross-compiling (reported by Ward Horner).

970315
	+ add header dependencies so that "make install.libs" will succeed
	  even if "make all" is not done first.
	+ moved some macros from lib_doupdate.c to curses.priv.h to use in
	  expanded functions with ATAC.
	+ correct implementation of lib_instr.c; both XSI and SVr4 agree that
	  the winnstr functions can return more characters than will fit on one
	  line.

970308
	+ modify script that generates lib_gen.c to support traces of called &
	  return.
	+ add new configure option "--disable-macros", for testing calls within
	  lib_gen.c
	+ corrected logic that screens level-checking of called/return traces.

970301
	+ use new configure macro NC_SUBST to replace AC_PATH_PROG, better
	  addressing request by Ward Horner.
	+ check for cross-compiling before trying to invoke the autoconf
	  AC_FUNC_SETVBUF_REVERSED macro (reported by Ward Horner)
	+ correct/simplify loop in _nc_visbuf(), 970201 changes omitted
	  a pointer-increment.
	+ eliminate obsolete symbol SHARED_ABI from dist.mk (noted by
	  Florian La Roche).

970215
	+ add configure option --enable-expanded, together with code that
	  implements an expanded form of certain complex macros, for testing
	  with ATAC.
	+ disable CHECK_POSITION unless --with-assertions is configured
	  (Alexander V Lukyanov pointed out that this is redundant).
	+ use keyname() to show traced chtype values where applicable rather
	  than _tracechar(), which truncates the value to 8-bits.
	+ minor fixes to TRACE_ICALLS, added T_CREATE, TRACE_CCALLS macros.
	+ modify makefiles in progs and test directories to avoid using C
	  preprocessor options on link commands (reported by Ward Horner)
	+ correct ifdef/include-order for nc_alloc.h vs lib_freeall.c (reported
	  by Ward Horner)
	+ modify ifdef's to use configure-defined symbols consistently
	  (reported by Ward Horner)
	+ add/use new makefile symbols AR, AR_OPTS and LD to assist in non-UNIX
	  ports (reported by Ward Horner <whorner@tsi-telsys.com>)
	+ rename struct try to struct tries, to avoid name conflict with C++
	  (reported by Gary Johnson).
	+ modify worm.c to hide cursor while running.
	+ add -Wcast-qual to gcc warnings, fix accordingly.
	+ use PutChar rather than PutAttrChar in ClrToEOL to properly handle
	  wrapping (Alexander V Lukyanov).
	+ correct spurious echoing of input in hanoi.c from eric's #291 & #292
	  patches (reported by Vernon C. Hoxie <vern@zebra.alphacdc.com>).
	+ extend IRIX configuration to IRIX64
	+ supply missing install.libs rule needed after restructuring
	  test/Makefile.in

970208
	+ modify "make mostlyclean" to leave automatically-generated source
	  in the ncurses directory, for use in cross-compiles.
	+ autogenerated object-dependencies for test directory
	+ add configure option --with-rcs-ids
	+ modify configuration scripts to generate major/minor/patch versions
	  (suggested by Alexander V Lukyanov).
	+ supply missing va_end's in lib_scanw.c
	+ use stream I/O for trace-output, to eliminate fixed-size buffer
	+ add TRACE_ICALLS definition/support to lib_trace.c
	+ modify Ada95 binding to work with GNAT 3.09 (Juergen Pfeifer).

970201
	+ add/modify traces for called/return values to simplify extraction
	  for test scripts.
	+ changed _nc_visbuf to quote its result, and to dynamically allocate
	  the returned buffer.
	+ invoke ldconfig after installing shared library
	+ modify install so that overwrite applies to shared library -lcurses
	  in preference to static library (reported by Zeyd M Ben-Halim 960928).
	+ correct missing ';' in 961221 mod to overwrite optional use of $(LN_S)
	  symbol.
	+ fixes to allow "make install" to work without first doing a "make
	  all" (suggested by Larry Virden).

970125
	+ correct order of #ifdef for TABS_OK.
	+ instrumented toe.c to test memory-leaks.
	+ correct memory-deallocation in toe.c (patch by Jesse Thilo).
	+ include <sys/types.h> in configuration test for regex.h (patch by
	  Andreas Schwab)
	+ make infocmp recognize -I option, for SVr4 compatibility (reported by
	  Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>)

970118
	+ add extension 'use_default_colors()', modified test applications that
	  use default background (firework, gdc, hanoi, knight, worm) to
	  demonstrate.
	+ correct some limit checks in lib_doupdate.c exposed while running
	  worm.
	+ use typeCalloc macro for readability.
	+ add/use definition for CONST to accommodate testing with Solaris
	  (SVr4) curses, which doesn't use 'const' in its prototypes.
	+ modify ifdef's in test/hashtest.c and test/view.c to compile with
	  Solaris curses.
	+ modify _tracedump() to pad colors & attrs lines to match change
	  in 970101 showing first/last changes.
	+ corrected location of terminating null on dynamically allocated forms
	  fields (patch by Per Foreby).

970111
	+ added headers to make view.c compile on SCO with the resizeterm()
	  code (i.e., struct winsize) - though this compiles, I don't have a
	  suitable test configuration since SIGWINCH doesn't pass my network to
	  that machine - T.Dickey.
	+ update test/configure.in to supply some default substitutions.
	+ modify configure script to add -lncurses after -lgpm to fix problem
	  linking against static libraries.
	+ add a missing noraw() to test/ncurses.c (places noted by Jeremy
	  Buhler)
	+ add a missing wclear() to test/testcurs.c (patch by Jeremy Buhler
	  <jbuhler@cs.washington.edu>)
	+ modify headers to accommodate compilers that don't allow duplicate
	  "#define" lines for NCURSES_VERSION (reported by Larry W. Virden
	  <lvirden@cas.org>)
	+ fix formatting glitch in curs_getch.3x (patch by Jesse Thilo).
	+ modify lib_doupdate to make el, el1 and ed optimization use the
	  can_clear_with macro, and change EmitRange to allow leaving cursor at
	  the middle of interval, rather than always at the end (patch by
	  Alexander V Lukyanov).  This was originally 960929, resync 970106.

970104
	+ workaround defect in autoconf 2.12 (which terminates configuration
	  if no C++ compiler is found) by adding an option --without-cxx.
	+ modify several man-pages to use tbl, where .nf/.fi was used (reported
	  by Jesse Thilo).
	+ correct font-codes in some man-pages (patch by Jesse Thilo
	  <Jesse.Thilo@pobox.com>)
	+ use configure script's knowledge of existence of g++ library for the
	  c++ Makefile (reported by Paul Jackson).
	+ correct misleading description of --datadir configuration option
	  (reported by Paul Jackson <pj@sam.engr.sgi.com>)

970101
	+ several corrections to _nc_mvcur_scrolln(), prompted by a bug report
	  from Peter Wemm:
	> the logic for non_dest_scroll_region was interchanged between the
	  forward & reverse scrolling cases.
	> multiple returns from the function allowed certain conditions to do
	  part of an operation before discovering that it couldn't be
	  completed, returning an error without restoring the cursor.
	> some returns were ERR, where the function had completed the
	  operation, because the insert/delete line logic was improperly
	  tested (this was probably the case Peter saw).
	> contrary to comments, some scrolling cases were tested after the
	  insert/delete line method.
	+ modify _tracedump() to show first/last changes.
	+ modify param of ClrUpdate() in lib_doupdate.c to 'newscr', fixes
	  refresh problem (reported by Peter Wemm) that caused nvi to not show
	  result of ":r !ls" until a ^L was typed.

961229	(internal alpha)
	+ correct some of the writable-strings warnings (reported by Gary
	  Johnson <gjohnson@season.com>).  Note that most of the remaining ones
	  are part of the XSI specification, and can't be "fixed".
	+ improve include-dependencies in form, menu, panel directories.
	+ correct logic of delay_output(), which would return early if
	  there is data on stdin.
	+ modify interface & logic of _nc_timed_wait() to support 2 file
	  descriptors, needed for GPM.
	+ integrate patch by Andrew Kuchling <amk@magnet.com> for GPM (mouse)
	  support, correcting logic in wgetch() and _nc_mouse_parse() which
	  prevented patch from working properly -TD
	+ improve performance of panel algorithm (Juergen Pfeifer 961203).
	+ strip RCS id's from generated .html files in Ada95 subtree.
	+ resync with generated .html files (Juergen Pfeifer 961223).
	+ terminfo.src 10.1.0 (ESR).

961224	4.0 release
	+ release as 4.0 to accommodate Linux ld.so.1.8.5
	+ correct syntax/spelling, regenerated .doc files from .html using
	  lynx 2.5
	+ refined forms/menus makefiles (Juergen Pfeifer 961223).

961221	- snapshot
	+ remove logic in read_entry.c that attempts to refine errno by using
	  'access()' for the directory (from patch by Florian La Roche).
	+ correct configure test/substitution that inhibits generating
	  include-path to /usr/include if gcc is used (reported by Florian La
	  Roche).
	+ modify setupterm() to allocate new TERMINAL for each call, just as
	  solaris' curses does (Alexander V Lukyanov 960829).
	+ corrected memory leaks in read_entry.c
	+ add configure options --with-dbmalloc, --with-dmalloc, and
	  --disable-leaks, tested by instrumenting infocmp, ncurses programs.
	+ move #include's for stdlib.h and string.h to *.priv.h to accommodate
	  use of dbmalloc.
	+ modify use of $(LN_S) to follow recommendation in autoconf 2.12,
	  i.e., set current directory before linking.
	+ split-out panel.priv.h, improve dependencies for forms, menus
	  (Juergen Pfeifer 961204).
	+ modify _nc_freewin() to reset globals curscr/newscr/stdscr when
	  freeing the corresponding WINDOW (found using Purify).
	+ modify delwin() to return ERR if the window to be deleted has
	  subwindows, needed as a side-effect of resizeterm() (found using
	  Purify).  Tested and found that SVr4 curses behaves this way.
	+ implement logic for _nc_freeall(), bringing stub up to date.

961215
	+ modify wbkgd() so that it doesn't set nulls in the rendered text,
	  even if its argument doesn't specify a character (fixes test case by
	  Juergen Pfeifer for bug-report).
	+ set window-attributes in wbkgd(), to simplify comparison against
	  Solaris curses, which does this.

961214	- snapshot
	+ replace most constants in ncurses 'o' test by expressions, making it
	  work with wider range of screen sizes.
	+ add options to ncurses.c to specify 'e' test softkey format, and the
	  number of header/footer lines to rip-off.
	+ add ^R (repaint after resize), ^L (refresh) commands to ncurses 'p'
	  test.
	+ add shell-out (!) command to ncurses 'p' test to allow test of
	  resize between endwin/refresh.
	+ correct line-wrap case in mvcur() by emitting carriage return,
	  overlooked in 960928, but needed due to SVr4 compatibility changes to
	  terminal modes in 960907.
	+ correct logic in wresize that causes new lines to be allocated,
	  broken for the special case of increasing rows only in 960907's fix
	  for subwindows.
	+ modify configure script to generate $(LDFLAGS) with -L and -l options
	  in preference to explicit library filenames.  (NOTE: this may
	  require further amending, since I vaguely recall a dynamic loader
	  that did not work properly without the full names, but it should be
	  handled as an exception to the rule, since some linkers do bulk
	  inclusion of libraries when given the full name - T.Dickey).
	+ modify configure script to allow user-supplied $CFLAGS to set the
	  debug-option in all libraries (requested by lots of people) -TD
	+ use return consistently from main(), rather than exit (reported by
	  Florian La Roche).
	+ add --enable-getcap-cache option to configure, normally disabled
	  (requested by Florian La Roche).
	+ make configure test for gettimeofday() and possibly -lbsd more
	  efficient (requested by Florian La Roche <florian@knorke.saar.de>)
	+ minor adjustments to Ada95 binding (patches by Juergen Pfeifer)
	+ correct attributes after emitting orig_pair in lib_vidattr.c (patch
	  by Alexander V Lukyanov).

961208
	+ corrected README wrt Ada95 (Juergen Pfeifer)

961207	- snapshot
	+ integrate resizeterm() into doupdate(), so that if screen size
	  changes between endwin/refresh, ncurses will resize windows to fit
	  (this needs additional testing with pads and softkeys).
	+ add, for memory-leak testing, _nc_freeall() entrypoint to free all
	  data used in ncurses library.
	+ initialize _nc_idcok, _nc_idlok statically to resolve discrepancy
	  between initscr() and newwin() initialization (reported by
	  Alexander V Lukyanov).
	+ test built VERSION=4.0, SHARED_ABI=4 with Linux ld.so.1.8.5
	  (set beta versions to those values -- NOTE that subsequent pre-4.0
	  beta may not be interchangeable).
	+ modify configure script to work with autoconf 2.12

961130	1.9.9g release
	+ add copyright notices to configuration scripts (written by Thomas
	  Dickey).

961127
	> patch, mostly for panel (Juergen Pfeifer):
	+ cosmetic improvement for a few routines in the ncurses core library
	  to avoid warning messages.
	+ the panel overlap detection was broken
	+ the panel_window() function was not fool-proof.
	+ Some inlining...
	+ Cosmetic changes (also to avoid warning messages when compiling with
	  -DTRACE).

961126
	> patch by Juergen Pfeifer:
	+ eliminates warning messages for the compile of libform.
	+ inserts Per Foreby's new field type TYPE_IPV4 into libform.
	+ Updates man page and the Ada95 binding to reflect this.
	+ Improves inlining in libmenu and libform.

961120
	+ improve the use of the "const" qualifier in the
	  panel library (Juergen Pfeifer)
	+ change set_panel_userptr() and panel_userptr() to use void*
	  (Juergen Pfeifer)

961119
	+ change ABI to 3.4
	+ package with 961119 version of Ada95 binding (fixes for gnat-3.07).
	  (Juergen Pfeifer)
	+ correct initialization of the stdscr pseudo panel in panel library
	  (Juergen Pfeifer)
	+ use MODULE_ID (rcs keywords) in forms and menus libraries (Juergen
	  Pfeifer).
	> patch #324 (ESR):
	+ typo in curs_termcap man page (reported by Hendrik Reichel
	  <106065.2344@compuserve.com>)
	+ change default xterm entry to xterm-r6.
	+ add entry for color_xterm

961116	- snapshot
	+ lint found several functions that had only #define implementations
	  (e.g., attr_off), modified curses.h.in to generate them as per XSI
	  Curses requirement that every macro be available as a function.
	+ add check in infocmp.c to guard against string compare of
	  CANCELLED_STRING values.
	+ modify firework.c, rain.c to hide cursor while running.
	+ correct missing va_end in lib_tparm.c
	+ modify hanoi.c to work on non-color terminals, and to use timing
	  delays when in autoplay mode.
	+ correct 'echochar()' to refresh immediately (reported by Adrian
	  Garside <94ajg2@eng.cam.ac.uk>)
	> patch #322 (ESR):
	+ reorganize terminfo.src entries for xterm.

961109	- snapshot
	+ corrected error in line-breakout logic (lib_doupdate.c)
	+ modified newdemo to use wgetch(win) rather than getch() to eliminate
	  a spurious clear-screen.
	+ corrected ifdef's for 'poll()' configuration.
	+ added modules to ncurses, form, menu for Ada95 binding (Juergen
	  Pfeifer).
	+ modify set_field_buffer() to allow assignment of string longer than
	  the initial buffer length, and to return the complete string rather
	  than only the initial size (Juergen Pfeifer and Per Foreby
	  <perf@efd.lth.se>).

961102	- snapshot
	+ configure for 'poll()' in preference to 'select()', since older
	  systems are more likely to have a broken 'select()'.
	+ modified render_char() to avoid OR'ing colors.
	+ minor fixes to testcurs.c, newdemo.c test programs: ifdef'd out the
	  resize test, use wbkgd and corrected box() parameters.
	+ make flushinp() test work in ncurses.c by using napms() instead of
	  sleep().
	+ undo ESR's changes to xterm-x11r6 (it no longer matched the X11R6.1
	  distribution, as stated)
	+ terminfo 9.13.18 resync (ESR)
	+ check for getenv("HOME") returning null (ESR).
	+ change buffer used to decode xterm-mouse commands to unsigned to
	  handle displays wider than 128 chars (Juergen Pfeifer).
	+ correct typo curs_outopts.3x (Juergen Pfeifer).
	+ correct limit-checking in wenclose() (Juergen Pfeifer).
	+ correction to Peter Wemm's newwin change (Thomas Fehr
	  <fehr@suse.de>).
	+ corrections to logic that combines colors and attributes; they must
	  not be OR'd (Juergen Pfeifer, extending from report/patch by Rick
	  Marshall).

961026	- snapshot
	+ reset flags in 'getwin()' that might cause refresh to attempt to
	  manipulate the non-existent parent of a window that is read from a
	  file (lib_screen.c).
	+ restructure _nc_timed_wait() to log more information, and to try to
	  recover from badly-behaved 'select()' calls (still testing this).
	+ move define for GOOD_SELECT into configure script.
	+ corrected extra '\' character inserted before ',' in comp_scan.c
	+ corrected expansion of %-format characters in dump_entry.c; some were
	  rendered as octal constants.
	+ modify dump_entry.c to make terminfo output more readable and like
	  SVr4, by using "\s" for spaces (leading/trailing only), "\," for
	  comma, "\^" and "\:" as well.
	+ corrected some memory leaks in ncurses.c, and a minor logic error
	  in the top-level command-parser.
	+ correction for label format 4 (PC style with info line), a
	  slk_clear(), slk_restore() sequence didn't redraw the info line
	  (Juergen Pfeifer).
	+ modified the slk window (if simulated) to inherit the background and
	  default character attributes from stdscr (Juergen Pfeifer).
	+ corrected limit-check in set_top_row (Juergen Pfeifer).

961019	- snapshot
	+ correct loop-limit in wnoutrefresh(), bug exposed during pipe-testing
	  had '.lastchar' entry one beyond '._maxx'.
	+ modify ncurses test-program to work with data piped to it.
	+ corrected pathname computation in run_tic.sh, removing extra "../"
	  (reported by Tim Mooney).
	+ modified configure script to use previous install's location for
	  curses.h
	+ added NetBSD and FreeBSD to platforms that use --prefix=/usr as
	  a default.

961013
	+ revised xterm terminfo descriptions to reflect the several versions
	  that are available.
	+ corrected a pointer reference in dump_entry.c that didn't test if
	  the pointer was -1.

961005	- snapshot
	+ correct _nc_mvcur_scrolln for terminals w/o scrolling region.
	+ add -x option to hashtest to control whether it allows writes to the
	  lower-right corner.
	+ ifdef'd (NCURSES_TEST) the logic for _nc_optimize_enable to make it
	  simpler to construct tests (for double-check of _nc_hash_map tests).
	+ correct ifdef's for c++ in curses.h
	+ change default xterm type to xterm-x11r6.
	+ correct quoting in configure that made man-pages installed with
	  $datadir instead of actual terminfo path.
	+ correct whitespace in include/Caps, which caused kf11, clr_eol and
	  clr_end to be omitted from terminfo.5
	+ fix memory leaks in delscreen() (adapted from Alexander V Lukyanov).
	+ improve appearance of marker in multi-selection menu (Juergen
	  Pfeifer)
	+ fix behavior for forms with all fields inactive (Juergen Pfeifer)
	+ document 'field_index()' (Juergen Pfeifer)
	> patch #321 (ESR):
	+ add some more XENIX keycap translations to include/Caps.
	+ modify newwin to set initial state of each line to 'touched'
	  (from patch by Peter Wemm <peter@spinner.dialix.com>)
	+ in SET_TTY, replace TCSANOW with TCSADRAIN (Alexander V Lukyanov).

960928	- snapshot
	+ ifdef'd out _nc_hash_map (still slower)
	+ add graphic characters to vt52 description.
	+ use PutAttrChar in ClrToEOL to ensure proper background, position.
	+ simplify/correct logic in 'mvcur()' that does wrapping; it was
	  updating the position w/o actually moving the cursor, which broke
	  relative moves.
	+ ensure that 'doupdate()' sets the .oldindex values back to a sane
	  state; this was causing a spurious refresh in ncurses 'r'.
	+ add logic to configure (from vile) to guard against builders who
	  don't remove config.cache & config.status when doing new builds -TD
	+ corrected logic for 'repeat_char' in EmitRange (cf: eric #317), which
	  did not follow the 2-parameter scheme specified in XSI.
	+ corrected logic of wrefresh, wnoutrefresh broken in #319, making
	  clearok work properly (report by Michael Elkins).
	+ corrected problem with endwin introduced by #314 (removing the
	  scrolling-region reset) that broke ncurses.c tests.
	+ corrected order of args in AC_CHECK_LIB (from report by Ami Fischman
	  <fischman@math.ucla.edu>).
	+ corrected formatting of terminfo.5 tables (Juergen Ehling)
	> patch 320 (ESR):
	+ change ABI to 3.3
	+ emit a carriage-return in 'endwin()' to workaround a kernel bug in
	  BSDI.  (requested by Mike Karels <karels@redrock.bsdi.com>)
	+ reverse the default o configure --enable-termcap (consensus).
	> patch 319 (ESR):
	+ modified logic for clearok and related functions (from report by
	  Michael Elkins) - untested
	> patch 318 (ESR):
	+ correction to #317.
	> patch 317 (ESR):
	+ re-add _nc_hash_map
	+ modify EmitRange to maintain position as per original design
	  (patch by A. Lukyanov).
	+ modify test/ncurses.c and tputs, etc., to allow trace counting
	  output characters.
	+ add hashtest.c program to time the hashmap optimization.
	> patch 316 (ESR):
	+ add logic to deal with magic-cookie (how was this tested?)
	  (lib_doupdate.c).
	+ add ncurses.c driver for magic-cookie, some fixes to ncurses.c
	> patch 315 (ESR):
	+ merge changes to lib_doupdate.c to use ech and rep - untested
	  (patch by Alexander V Lukyanov).
	+ modified handling of interrupted system calls - untested
	  (lib_getch.c, lib_twait.c).
	+ new function _nc_mvcur_resume()
	+ fix return value for 'overlay()', 'overwrite()'

960914	- snapshot
	+ implement subwindow-logic in wresize, minor fixes to ncurses 'g'
	  test.
	+ corrected bracketing of fallback.c (reported/suggested fix by Juergen
	  Ehling <eh@eclipse.aball.de>).
	+ update xterm-color to reflect XFree86 3.1.3G release.
	+ correct broken dtterm description from #314 patch (e.g., spurious
	  newline.  The 'pairs' change might work, but no one's tested it
	  either ;-)
	+ clarify the documentation for the builtin form fieldtypes (Juergen
	  Pfeifer)
	> patch 314 (ESR):
	+ reset scroll region on startup rather than at wrapup time
	  (enhancement suggested by Alexander V Lukyanov).
	+ make storage of palette tables and their size counts per-screen for
	  multi-terminal applications (suggested by Alexander V Lukyanov).
	+ Improved error reporting for infotocap translation errors.
	+ Update terminfo.src to 9.13.14.

960907	- snapshot
	+ rewrote wgetstr to make it erase control chars and also fix bogus use
	  of _nc_outstr which caused the display to not wrap properly (display
	  problem reported by John M. Flinchbaugh <glynis@netrax.net>)
	+ modify ncurses 'f' test to accommodate terminal responses to C1 codes
	  (and split up this screen to accommodate non-ANSI terminals).
	+ test enter_insert_mode and exit_insert_mode in has_ic().
	+ removed bogus logic in mvcur that assumes nl/nonl set output modes
	  (XSI says they are input modes; SVr4 implements this).
	+ added macros SET_TTY, GET_TTY to term.h
	+ correct getstr() logic that altered terminal modes w/o restoring.
	+ disable ICRNL, etc., during initialization to match SVr4, removing
	  the corresponding logic from raw, cbreak, etc.
	+ disable ONLCR during initialization, to match SVr4 (this is needed
	  for cursor optimization when the cursor-down is a newline).
	+ replaced ESR's imitation of wresize with my original (his didn't
	  work).

960831	- snapshot
	+ memory leaks (Alexander V. Lukyanov).
	+ modified pnoutrefresh() to be more tolerant of too-large screen
	  size (reported by Michael Elkins).
	+ correct handling of terminfo files with no strings (Philippe De
	  Muyter)
	+ correct "tic -s" to take into account -I, -C options.
	+ modify ncurses 'f' test to not print codes 80 through 9F, since they
	  are considered control codes by ANSI terminals.

960824	- snapshot
	+ correct speed variable-type in 'tgetent()' (reported by Peter Wemm)
	+ make "--enable-getcap" configuration-option work (reported by
	  Peter Wemm <peter@spinner.DIALix.COM>)

960820
	+ correct err in 960817 that changed return-value of tigetflag()
	  (reported by Alexander V. Lukyanov).
	+ modify infocmp to use library default search-path for terminfo
	  directory (Alexander V. Lukyanov).

960817	- snapshot
	+ corrected an err in mvcur that broke resizing-behavior.
	+ correct fall-thru behavior of _nc_read_entry(), which was not finding
	  descriptions that existed in directories past the first one searched
	  (reported by Alexander V. Lukyanov)
	+ corrected typo in dtterm description.
	> patch 313 (ESR):
	+ add dtterm description
	+ clarify ncurses 'i' test (drop mvwscanw subtest)

960810	- snapshot
	+ correct nl()/nonl() to work as per SVr4 & XSI.
	+ minor fixes to ncurses.c (use 'noraw()', mvscanw return-code)
	+ refine configure-test for "-g" option (Tim Mooney).
	+ correct interaction between O_BLANK and NEW_LINE request in form
	  library (Juergen Pfeifer)

960804
	+ revised fix to tparm; previous fix reversed parameter order.
	> patch 312 (ESR):
	  correct terminfo.src corrupted by #310
	> patch 311 (ESR):
	+ fix idlok() and idcok() and the default of the idlok switch (report
	  by Ville Sulko).

960803	- snapshot
	+ corrected tparm to handle capability strings without explicit pop
	  (reported by William P Setzer)
	+ add fallback def for GCC_NORETURN, GCC_UNUSED for termcap users
	  (reported by Tim Mooney).
	> patch 310 (ESR):
	+ documentation and prototyping errors for has_color, immedok and idcok
	  (reported by William P Setzer <wsetzer@pams.ncsu.edu>)
	+ updated qnx terminfo entry (patch by Michael Hunter)

960730
	+ eliminate quoted includes in ncurses subdirectory, ensure config.h
	  is included first.
	+ newterm initializes terminal settings the same as initscr (reported
	  by Tim Mooney).

960727	- snapshot
	+ call cbreak() in initscr(), as per XSI & SVr4.
	+ turn off hardware echo in initscr() as per XSI & SVr4
	> patch 309 (ESR):
	+ terminfo changes (9.3.9), from BRL
	+ add more checks to terminfo parser.
	+ add more symbols to infocmp.

960720	- snapshot
	+ save previous-attribute in lib_vidattr.c if SP is null (reported by
	  Juergen Fluk <louis@dachau.marco.de>)
	+ corrected calls on _nc_render so that background character is set
	  as per XSI.
	+ corrected wbkgdset macro (XSI allows background character to be
	  null), and tests that use it.
	+ more corrections to terminfo (xterm & rxvt)
	+ undid change to mcprint prototype (cannot use size_t in curses.h
	  because not all systems declare it in the headers that we can safely
	  include therein).
	+ move the ifdefs for errno into curses.priv.h
	> patch 308 (ESR):
	+ terminfo changes (9.3.8)
	+ modified logic of error-reporting in terminfo parser
	+ fix option-processing bug in toe.

960713	- snapshot
	+ always check for <sys/bsdtypes.h> since ISC needs it to declare
	  fd_set (Juergen Pfeifer)
	+ install shared-libraries on NetBSD/FreeBSD with ABI-version (reported
	  by Juergen Pfeifer, Mike Long)
	+ add LOCAL_LDFLAGS2 symbol (Juergen Pfeifer)
	+ corrected prototype for delay_output() -- bump ABI to 3.2
	+ patch 307 (ESR):
	+ enable more translations of nonstandard caps, and document them.
	+ misc/terminfo.src update to 9.13.8
	+ patch 306 (ESR):
	+ moved logic that filters out rmul and rmso from setupterm to newterm
	  where it is less likely to interfere with termcap applications.
	+ cosmetic fixes to test/ncurses.c
	+ modify open() call in ncurses/read_entry.c to use O_RDONLY symbol
	  rather than constant (report by mib).
	+ misc/terminfo.src sgr0 and acsc changes (report by Philippe De
	  Muyter).
	+ modify ncurses/comp_parse.c so that entries containing a "+" can
	  have missing rmcup vs smcup.

960707
	+ rollback ESR's #305 change to terminfo.src (it breaks existing
	  applications, e.g., 'less 290').
	+ correct path of edit_man.sh, and fix typo that made all man-pages
	  preformatted.
	+ restore man/menu_requestname.3x omitted in Zeyd's resync (oops).
	+ auto-configure the GCC_PRINTFLIKE/GCC_SCANFLIKE macros (reported by
	  Philippe De Muyter).

960706	- snapshot
	+ make lib_vidattr.c more readable using macros.
	+ filter out rmul, rmso that conflict with sgr0 when reading terminal
	  descriptions.
	+ work around autoconf bug, force $INSTALL to absolute path
	  (reported by Zeyd).
	+ modify man-page install for BSDI to install preformatted .0 files
	  (reported by David MacKenzie).
	+ add/use gcc __attribute__ for printf and scanf in curses.h
	+ added SGR attributes test-case to ncurses
	+ revised ncurses 't' logic to show trace-disable effect in the menu.
	+ use getopt in ncurses program to process -s and -t options.
	+ make ncurses 'p' legend toggle with '?'
	+ disable scrollok during the ncurses 'p' test; if it is enabled the
	  stdscr will scroll when putting the box-corners in the lower-right
	  of the screen.
	> patch 305 (ESR):
	+ added sanity-checking of various paired string attributes.
	+ misc/terminfo.src update to 9.13.7 (report by A. Lukyanov).
	+ modify man/Makefile.in to make terminfo.5 during normal build.
	> patch 304 (ESR):
	+ corrected allocation-length for $HOME/.terminfo path.

960629	- snapshot
	+ check return code of _nc_mvcur_scrolln() in _nc_scroll_optimize() for
	  terminals with no scrolling-support (reported by Nikolay Shadrin
	  <queen@qh.mirea.ac.ru>)
	+ added ^S scrollok-toggle to ncurses 'g' test.
	+ added ^T trace-toggle to ncurses tests.
	+ modified ncurses test program to use ^Q or ESC consistently for
	  terminating tests (rather than ^D), and to use control keys rather
	  than function keys in 'g' test.
	+ corrected misplaced wclrtoeol calls in addch to accommodate wrapping
	  (reported by Philippe De Muyter).
	+ modify lib_doupdate.c to use effective costs to tradeoff between
	  delete-character/insert-character vs normal updating (reported by
	  David MacKenzie).
	+ compute effective costs for screen update operations (e.g., clr_eos,
	  delete_character).
	+ corrected error in knight.c exposed by wrap fixes in 960622; the
	  msgwin needed scrollok set.
	+ corrected last change to IDcTransformLine logic to avoid conflict
	  between PutRange and InsStr
	+ modified run_tic.sh to not use /usr/tmp (reported by David
	  MacKenzie), and further revised it and aclocal.m4 to use $TMPDIR if
	  set.
	+ corrected off-by-one in RoomFor call in read_entry.c

960622	- snapshot
	+ modified logic that wraps cursor in addch to follow the XSI spec,
	  (implemented in SVr4) which states that the cursor position is
	  updated when wrapping.  Renamed _NEED_WRAP to _WRAPPED to reflect the
	  actual semantics.
	+ added -s option to tic, to provide better diagnostics in run_tic.sh
	+ improved error-recovery for tabset install.
	+ change ABI to 3.1 (dropped tparam, corrected getbkgd(), added
	  _yoffset to WINDOW).
	+ modified initialization of SP->_ofp so that init_acs() is called with
	  the "right" file pointer (reported by Rick Marshall <rjm@nlc.net.au>
	+ documentation fixes (Juergen Pfeifer).
	+ corrected, using new SCREEN and WINDOW members, the behavior of
	  ncurses if one uses ripoffline() to remove a line from the top of the
	  screen (Juergen Pfeifer).
	+ modified autoconf scripts to prepare for Ada95 (GNAT) binding to
	  ncurses (Juergen Pfeifer).
	+ incorrect buffer-size in _nc_read_entry, reported by ESR.

960617
	+ corrected two logic errors in read_entry.c, write_entry.c (called by
	  tic, the write/read of terminfo entries used inconsistent rules for
	  locating the entries; the $TERMINFO_DIRS code would find only the
	  first entry in a list).
	+ refined pathname computation in run_tic.sh and shlib.
	+ corrected initialization of $IP in misc/run_tic.sh

960615	- snapshot
	+ ifdef'd out _nc_hash_map() call because it does not improve speed.
	+ display version of gcc if configure script identifies it.
	+ modify configure script to use /usr as Linux's default prefix.
	+ modify run_tic.sh to use shlib script, fixes some problems installing
	  with a shared-library configuration.
	+ adjusted configure script so that it doesn't run tests with the
	  warnings turned on, which makes config.log hard to read.
	+ added 'lint' rule to top-level Makefile.
	+ added configure option '--with-install-prefix' for use by system
	  builders to install into staging locations (requested by
	  Charles Levert <charles@comm.polymtl.ca>).
	+ corrected autoconfigure for Debian man program; it's not installed
	  as "man_db".
	+ set noecho in 'worm'; it was ifdef'd for debug only
	+ updated test/configure.in for timing-display in ncurses 'p' test
	+ corrected misspelled 'getbkgd()'.
	+ corrected wbkgdset to work like observed syvr4 (sets A_CHARTEXT part
	  to blank if no character given, copies attributes to window's
	  attributes).
	+ modified lib_doupdate.c to use lower-level SP's current_attr state
	  instead of curscr's state, since it is redundant.
	+ correction to IDcTransformLine logic which controls where InsStr is
	  invoked (refined by Alexander V Lukyanov).
	> patch 303 (ESR):
	+ conditionally include Chris Torek's hash function _nc_hash_map().
	+ better fix for nvi refresh-bug (Rick Marshall)
	+ fix for bug in handling of interrupted keystroke waits,
	  (Werner Fleck).
	+ misc/ncurses-intro.html syntax fix (Kajiyama Tamito).

960601	- snapshot
	+ auto-configure man-page compression-format and renames for Debian.
	+ corrected several typos in curses.h.in (i.e., the mvXXXX macros).
	+ re-order curses.priv.h for lint.
	+ added rules for lintlib, lint
	+ corrected ifdef for BROKEN_LINKER in MKnames.awk.in
	+ corrected missing INSTALL_DATA in misc/Makefile.in
	+ flush output when changing cursor-visibility (Rick Marshall)
	+ fix a minor bug in the _nc_ripoff() routine and improve error
	  checking when creating the label window (Juergen Pfeifer).
	+ enhancement to the control over the new PC-style soft key format.
	  allow caller now to select whether or not one wants to have
	  the index-line; see curs_slk.3x for documentation (Juergen Pfeifer).
	+ typos, don't use inline with "-g" (Philippe De Muyter)
	+ fixes for menus & wattr-, slk-functions (Juergen Pfeifer)

960526	- snapshot
	+ removed --with-ticdir option altogether, maintain compatibility with
	  existing applications via symbolic link in run_tic.sh
	+ patch for termio.h, signal (Philippe De Muyter)
	+ auto-configure gcc warning options rather than infer from version.
	+ auto-configure __attribute__ for different gcc versions.
	+ corrected special use of clearok() in hardscroll.c by resetting flag
	  in wrefresh().
	+ include stdlib.h before defs for EXIT_SUCCESS, for OSF/1.
	+ include sys/types.h in case stdlib.h does not declare size_t.
	+ fixes for makefile (Tim Mooney)
	+ fixes for menus & forms (Juergen Pfeifer)
	> patch 302 (ESR):
	+ improve hash function (suggested by Alexander V Lukyanov).
	+ 9.13.4 update for terminfo.src

960518	- snapshot
	+ revised ncurses.c panner test, let pad abut all 4 sides of screen.
	+ refined case in lib_doupdate.c for ClrToEOL().
	+ corrected prior change for PutRange (Alexander V Lukyanov
	  <lav@yars.free.net>).
	+ autoconf mods (Tim Mooney <mooney@dogbert.cc.ndsu.NoDak.edu>).
	+ locale fix for forms (Philippe De Muyter <phdemuyt@ulb.ac.be>)
	+ renamed "--with-datadir" option to "--with-ticdir" to avoid
	  confusion, and made this check for the /usr/lib/terminfo pre-existing
	  directory.
	> patches 299-301 (ESR):
	+ html fixes (Phillippe de Muyter).
	+ fix typo in ncurses-intro.html (report by Fabrizio Polacco).
	+ added hashmap.c
	+ mods to tracing, especially for ACS chars.
	+ corrected off-by-one in IDCtransform.
	+ corrected intermittent mouse bug by using return-value from read().
	+ mods to parse_entry.c, for smarter defaults.

960512
	+ use getopt in 'tic'; added -L option and modified -e option to allow
	  list from a file.

960511
	+ don't use fixed buffer-size in tparm().
	+ modified tic to create terminfo directory if it doesn't exist.
	+ added -T options to tic and infocmp (for testing/analysis)
	+ refined the length criteria for termcap and terminfo
	+ optimize lib_doupdate with memcpy, PutRange
	> patches 297, 298 (ESR):
	+ implement TERMINFO_DIRS, and -o option of tic
	+ added TRACE_IEVENT
	+ fix REQ_TOGGLE_ITEM in menu/menu_driver.c; it could select but not
	  deselect.
	+ added lib_print.c (request by Rick Marshall).
	+ added has_key() (request by Juergen Pfeifer).
	+ do not issue clrtoeol or clrtobot if the relevant portion of the line
	  is already blank (analysis by Keith Bostic).
	+ add parentheses for parameters of COLOR_PAIR and PAIR_NUMBER macros
	  (analysis by Jurgen Eidt).
	+ update screen's notion of cursor position in endwin() (analysis by
	  Alexander Lukyanov).
	+ added 't' to ncurses.c test.
	+ moved delay_output() to lib_tputs.c
	+ removed tparam() (was added in 1.9.9, but conflicts with emacs and
	  is not part of X/Open Curses).
	+ removed boolean version of 'getm'.
	+ misc cursor & optimization fixes.

960504	- snapshot
	+ modified ncurses 'p' test to allow full-screen range for panner size.
	+ fixes for locale (Philippe De Muyter <phdm@labauto1.ulb.ac.be>)
	+ don't use fixed buffer-size in fmt_entry().
	+ added usage-message to 'infocmp'.
	+ modified install.includes rules to prepend subdirectory-name to
	  "#include" if needed.

960430
	+ protect wrefresh, wnoutrefresh from invocation with pad argument.
	+ corrected default CCFLAGS in test/Makefile.

960428	- snapshot
	+ implemented logic to support terminals with background color erase
	  (e.g., rxvt and the newer color xterm).
	+ improved screen update logic (off-by-one logic error; use clr_eos if
	  possible)

960426	- snapshot
	+ change ncurses 'a' test to run in raw mode.
	+ make TIOCGWINSZ configure test less stringent, in case user
	  configures via terminal that cannot get screen size.
	> patches 295, 296 (ESR):
	+ split lib_kernel.c, lib_setup.c and names.c in order to reduce
	  overhead for programs that use only termcap features.
	+ new "-e" and "-h" options of tic (request by Tony Nugent).
	+ fix bug in mandatory-delay logic in lib_tputs.c (report by Sven
	  Verdoolaege).
	+ fix for "infocmp -e" to emit correct initializers (reported by Manual
	  J Novoa III).
	+ restore working-directory in read_termcap.c (report by Kayvan
	  Sylvan).
	+ use "-h" option on Solaris when generating shared libraries on
	  Solaris 2.5 to record the library name in the file, for assisting
	  the loader (patch by Scott Kramer).
	+ undo patch #294 changes to form and menu libraries (request by
	  Juergen Pfeifer).

960418	- snapshot
	+ use autoconf 2.9
	+ fix for AIX 3.2.5 (must define _POSIX_SOURCE to get termios struct
	  definitions via <termios.h>, modified macros in lib_raw.c to avoid
	  K&R-style substitution)
	> patches 293, 294 (ESR):
	+ rewrite wsyncup(), wsyncdown(), as well as small fixes to form and
	  menu libraries to fix echo-breakage introduced by 1.8.9, 1.9.9e
	  changes (patches by Juergen Pfeifer).
	+ fix compile under QNX 4.2 by defining ONLCR in lib_raw.c when
	  __QNX__ is defined (patch by Michael Hunter).
	+ modify setupterm() to match documentation for its return value, fix
	  newterm to work with this change (report by Emmet Lazich).
	+ add checks in getch() for error, return ERR as appropriate (report by
	  Emmet Lazich).
	+ mods to wgetch() in cooked mode (report by Pete Seebach).
	+ corrected askuser() logic in tset (patch by Remco Treffkorn).
	+ correct interaction of endwin() with mouse processing (report by
	  Michael Elkins).
	+ added trace support for TTY flags
	+ update terminfo.src to 9.13.1
	+ FreeBSD console entries (patch by Andrew Chernov).

960406
	+ fixes for NeXT, ISC and HPUX auto-configure
	+ autogenerate development header-dependencies (config.h, *.priv.h)
	+ corrected single-column formatting of "use=" (e.g., in tic)
	+ modify tic to read full terminfo-names
	+ corrected divide-by-zero that caused hang (or worse) when redirecting
	  output
	+ modify tic to generate directories only as-needed (and corrected
	  instance of use of data from function that had already returned).

### ncurses-1.9.8a -> 1.9.9e

* fixed broken wsyncup()/wysncdown(), as a result wnoutrefresh() now has
  copy-changed-lines behavior.
* added and documented wresize() function.
* more fixes to LOWER-RIGHT corner handling.
* changed the line-breakout optimization code to allow some lines to be
  emitted before the first check.
* added option for tic to use symbolic instead of hard links (for AFS)
* fix to restore auto-wrap mode.
* trace level can be controlled by environment variable.
* better handling of NULs in terminal descriptions.
* improved compatibility with observed SVR4 behavior.
* the refresh behavior of over-lapping windows is now more efficient and
  behaves like SVR4.
* use autoconf 2.7, which results in a working setup for SCO 5.0.
* support for ESCDELAY.
* small fixes for menu/form code.
* the test directory has its own configure.
* fixes to pads when optimizing scrolling.
* fixed several off-by-one bugs.
* fixes for termcap->terminfo translation; less restrictions more correct
  behavior.

### ncurses-1.9.7 -> 1.9.8a

* teach infocmp -i to recognize ECMA highlight sequences
* infocmp now dumps all SVr4 termcaps (not just the SVr4 ones) on -C
* support infocmp -RBSD.
* satisfy XSI Curses requirement that every macro be available as a function.
* This represents the last big change to the public interface of ncurses. The
  ABI_VERSION has now been set at 3.0 and should stay there barring any great
  catastrophies or acts of God.
* The C++ has been cleaned up in reaction to the changes to satisfy XSI's
  requirements.
* libncurses now gets linked to libcurses to help seamless emulation
  (replacement) of a vendor's curses. --disable-overwrite turns this behavior
  off.

### ncurses-1.9.6 -> 1.9.7

* corrected return values of setupterm()
* Fixed some bugs in tput (it does padding now)
* fixed a bug in tic that made it do the wrong thing on entries with more than
  one `use' capability.
* corrected the screen-size calculation at startup time to alter the
  numeric capabilities as per SVr4, not just LINES and COLS.
* toe(1) introduced; does what infocmp -T used to.
* tic(1) can now translate AIX box1 and font[0123] capabilities.
* tic uses much less core, the dotic.sh kluge can go away now.
* fix read_entry() and write_entry() to pass through cancelled capabilities OK.
* Add $HOME/.terminfo as source/target directory for terminfo entries.
* termcap compilation now automatically dumps an entry to $HOME/.terminfo.
* added -h option to toe(1).
* added -R option to tic(1) and infocmp(1).
* added fallback-entry-list feature.
* added -i option to infocmp(1).
* do a better job at detecting if we're on SCO.

### ncurses-1.9.5 -> 1.9.6

* handling of TERMCAP environment variables now works correctly.
* various changes to shorten termcap translations to less that 1024 chars.
* tset(1) added
* mouse support for xterm.
* most data tables are now const and accordingly live in shareable text space.
* Obey the XPG4/SVr4 practice that echo() is initially off.
* tic is much better at translating XENIX and AIX termcap entries now.
* tic can interpret ko capabilities now.
* integrated Juergen Pfeifer's forms library.
* taught write_entry() how not to write more than it needs to; this change
  reduces the size of the terminfo tree by a full 26%!
* infocmp -T option added.
* better warnings about historical tic quirks from tic.

### ncurses 1.9.4 -> 1.9.5

* menus library is now included with documentation.
* lib_mvcur has been carefully profiled and tuned.
* Fixed a ^Z-handling bug that was tanking lynx(1).
* HJ Lu's patches for ELF shared libraries under Linux
* terminfo.src 9.8.2
* tweaks for compiling in separate directories.
* Thomas Dickey's patches to support NeXT's brain-dead linker
* Eric Raymond's patches to fix problems with long termcap entries.
* more support for shared libraries under SunOS and IRIX.

### ncurses 1.9.3 -> 1.9.4

* fixed an undefined-order-of-evaluation bug in lib_acs.c
* systematically gave non-API public functions and data an _nc_ prefix.
* integrated Juergen Pfeifer's menu code into the distribution.
* totally rewrote the knight test game's interface

### ncurses 1.9.2c -> 1.9.3

* fixed the TERMCAP_FILE Support.
* fixed off-by-one errors in scrolling code
* added tracemunch to the test tools
* took steps to cut the running time of make install.data

### ncurses 1.9.2c -> 1.9.2d

* revised 'configure' script to produce libraries for normal, debug,
  profile and shared object models.

### ncurses 1.9.1 -> 1.9.2

* use 'autoconf' to implement 'configure' script.
* panels support added
* tic now checks for excessively long termcap entries when doing translation
* first cut at eliminating namespace pollution.

### ncurses 1.8.9 -> 1.9

* cleanup gcc warnings for the following: use size_t where 'int' is not
  appropriate, fixed some shadowed variables, change attr_t to compatible with
  chtype, use attr_t in some places where it was confused with 'int'.
* use chtype/attr_t casts as appropriate to ensure portability of masking
  operations.
* added-back waddchnstr() to lib_addstr.c (it had been deleted).
* supplied missing prototypes in curses.h
* include <termcap.h> in lib_termcap.c to ensure that the prototypes
  are consistent (they weren't).
* corrected prototype of tputs in <termcap.h>
* rewrote varargs parsing in lib_tparm.c (to avoid referencing memory
  that may be out of bounds on the stack) -- Purify found this.
* ensure that TRACE is defined in lib_trace.c (to solve prototype
  warnings from gcc).
* corrected scrolling-region size in 'mvcur_wrap()'
* more spelling fixes
* use 'calloc()' to allocate WINDOW struct in lib_newwin.c (Purify).
* set default value for SP->_ofp in lib_set_term.c (otherwise SunOS dumps
  core in init_acs()).
* include <errno.h> in write_entry.c (most "braindead" includes declare errno
  in that file).

### ncurses 1.8.8 -> 1.8.9

* compile (mostly) clean with gcc 2.5.8 -Wall -Wstrict-prototypes
  -Wmissing-prototypes -Wconversion and using __attribute__ to flush out
  non-portable use of "%x" for pointers, or for chtype data (which is declared
  as a long).
* modified doupdate to ensure that typahead was turned on before attempting
  select-call (otherwise, some implementations hang).
* added trace mask TRACE_FIFO, use this in lib_getch.c to allow finer
  resolution of traces.
* improved bounds checking on several critical functions.
* the data directory has been replaced by the new master terminfo file.
* -F file-comparison option added to infocmp.
* compatibility with XSI Curses is now documented in the man bages.
* wsyncup/wsyncdown functions are reliable now; subwindow code in general
  is much less flaky.
* capabilities ~msgr, tilde_glitch, insert_padding, generic_type, no_pad_char,
  memory_above, memory_below, and hard_copy are now used properly.
* cursor-movement optimization has been completely rewritten.
* vertical-movement optimization now uses hardware scrolling, il, dl.

### ncurses 1.8.7 -> 1.8.8
* untic no longer exists, infocmp replaces it.
* tic can understand termcap now, especially if it is called captoinfo.
* The Linux Standard Console terminfo entry is called linux insead of console.
  It also uses the kernel's new method of changing charsets.
* initscr() will EXIT upon error (as the docs say) This will mostly happen if
  you try to run on an undefined terminal.
* I can get things running on AIX but tic can't compile terminfo. I have to
  compile entries on another machine. Volunteers to hunt this bug are welcome.
* wbkgd() and wbkgdset() can be used to set a windows background to color.
  wclear()/werase() DO NOT use the current attribute to clear the screen.
  This is the way SVR4 curses works. PDCurses 2.1 is broken in this respect,
  though PDCurses 2.2 has been fixed.
* cleaned up the test/ directory.
* test/worm will segfault after quite a while.
* many spelling corrections courtesy of Thomas E. Dickey

### ncurses 1.8.6 -> 1.8.7
* cleaned up programs in test/ directory.
* fixed wbkgdset() macro.
* modified getstr() to stop it from advancing cursor in noecho mode.
* modified linux terminfo entry to work with the latest kernel to get
  the correct alternate character set.
* also added a linux-mono entry for those running on monochrome screens.
* changed initscr() so that it behaves like the man page says it does.
  this fixes the problem with programs in test/ crashing with SIGSEV if
  a terminal is undefined.
* modified addch() to avoid using any term.h #define's
* removed duplicate tgoto() in lib_tparm.c
* modified dump_entry.c so that infocmp deals correctly with ',' in acsc
* modified delwin() to correctly handle deleting subwindows.
* fixed Makefile.dist to stop installing an empty curses.h
* fixed a couple of out-of-date notes in man pages.

### ncurses 1.8.5 -> 1.8.6
* Implemented wbkgd(), bkgd(), bkgdset(), and wbkgdset().
* The handling of attributes has been improved and now does not turn off color
  if other attributes are turned off.
* scrolling code is improved. Scrolling in subwindows is still broken.
* Fixes to several bugs that manifest them on platforms other than Linux.
* The default to meta now depends on the status of the terminal when ncurses
  is started.
* The interface to the tracing facility has changed.  Instead of the pair of
  functions traceon() and traceoff(), there is just one function trace() which
  takes a trace mask argument.  The trace masks, defined in curses.h, are
  as follows:

	#define TRACE_DISABLE   0x00    /* turn off tracing */
	#define TRACE_ORDINARY  0x01    /* ordinary trace mode */
	#define TRACE_CHARPUT   0x02    /* also trace all character outputs */
	#define TRACE_MAXIMUM   0x0f    /* maximum trace level */

  More trace masks may be added, or these may be changed, in future releases.
* The pad code has been improved and the pad test code in test/ncurses.c has
  been improved.
* The prototype ansi entry has been changed to work with a wider variety
  of emulators.
* Fix to the prototype ansi entry that enables it to work with PC emulators
  that treat trailing ";m" in a highlight sequence as ";0m"; this doesn't
  break operation with any emulators.
* There are now working infocmp, captoinfo, tput, and tclear utilities.
* tic can now compile entries in termcap syntax.
* Core-dump bug in pnoutrefresh fixed.
* We now recognize and compile all the nonstandard capabilities in Ross
  Ridge's mytinfo package (rendering it obsolete).
* General cleanup and documentation improvements.
* Fixes and additions to the installation-documentation files.
* Take cursor to normal mode on endwin.

### ncurses 1.8.4 -> 1.8.5
* serious bugs in updating screen which caused erratic non-display,
  fixed.
* fixed initialization for getch() related variable which cause
  unpredictable results.
* fixed another doupdate bug which only appeared if you have
  parm_char.
* implemented redrawln() and redrawwin().
* implemented winsnstr() and related functions.
* cleaned up insertln() and deleteln() and implemented (w)insdeln().
* changed Makefile.dist so that installation of man pages will
  take note of the terminfo directory.
* fixed Configure (removed the mysterious 'X').
* Eric S. Raymond fixed the script.* files so that they work with
  stock awk.

#### ncurses 1.8.3 -> 1.8.4 #### ####
* fixed bug in refreshing the screen after return from shell_mode.
  There are still problems but they don't manifest themselves on
  my machine (Linux 0.99.14f).
* added wgetnstr() and modified things accordingly.
* fixed the script.src script.test to work with awk not just gawk.
* Configure can now take an argument of the target system.
* added test/ncurses.c which replaces several other programs and
  performs more testing.
[Thanks to Eric S Raymond for the last 4]
* more fixes to lib_overlay.c and added test/over.c to illustrate
  how it works.
* fixed ungetch() to take int instead of ch.
* fixes to cure wgetch() if flushinp() is called.

One note I forgot to mention in 1.8.3 is that tracing is off by
default starting in the version. If you want tracing output, put
traceon(); in your code and link with -ldcurses.

#### ncurses 1.8.2 -> ncurses 1.8.3 #### ####
MAJOR CHANGES:
1) The order of capabilities has been changed in order to achieve
binary compatibility with SVR4 terminfo database. This has the
unfortunate effect of breaking application currently linked with
ncurses. To ensure correct behavior, recompile all such programs.
Most programs using color or newer capabilities will break, others
will probably continue to work ok.

2) Pavel Curtis has renounced his copyright to the public domain.
This means that his original sources (posted to comp.sources.unix,
volume 1) are now in the public domain.  The current sources are
NOT in the public domain, they are copyrighted by me.  I'm
entertaining ideas on what the new terms ncurses is released under.

3) Eric S. Raymond has supplied a complete set of man pages for
ncurses in ?roff format. They will eventually replace most of the
current docs. Both sets are included in this release.

Other changes and notes from 1.8.2 include:
* SIGSEGV during scrolling no longer occurs.
* Other problems with scrolling and use of idl have been corrected.
* lib_getch.c has been re-written and should perform flawlessly.
  please use test/getch.c and any other programs to test this.
* ripoffline() is implemented (Thanks to Eric) and slk_ functions
  changed accordingly.
* I've added support for terminals that scroll if you write in the
  bottom-right corner.
* fixed more bugs in pads code. If anybody has a program that uses
  pads I'd love a copy.
* correct handling for terminal with back_color_erase capability
  (such as Linux console, and most PC terminals)
* ^Z handling apparently didn't work (I should never trust code
  sent me to me without extensive testing). It now seems to be
  fixed. Let me know if you have problems.
* I've added support for Apollo and NeXT, but it may still be
  incomplete, especially when dealing with the lack of POSIX
  features.
* scrolling should be more efficient on terminals with idl
  capabilities. Please see src/lib_scroll.c for more notes.
* The line drawing routines were offset by 1 at both ends. This
  is now fixed.
* added a few missing prototypes and macros (e.g. setterm())
* fixed code in src/lib_overlay.c which used to crash.
* added a few more programs in test/ The ones from the PDCurses
  package are useful, especially if you have SVR4 proper. I'm
  interested in the results you get on such a systems (Eric? ;-).
  They already exposed certain bugs in ncurses.
* See src/README for porting notes.
* The C++ code should really replace ncurses.h instead of working
  around it. It should avoid name-space clashes with nterm.h (use
  rows instead of lines, etc.)
* The C++ should compile ok. I've added explicit rules to the
  Makefile because no C++ defaults are documented on the suns.
* The docs say that echo() and nocbreak() are mutually exclusive.
  At the moment ncurses will switch to cbreak() if the case above
  occurs. Should it continue to do so? How about echo() and noraw()?
* PDCurses seem to assume that wclear() will use current attribute
  when clearing the screen. According to Eric this is not the case
  with SVR4.
* I have discovered, to my chagrin, SunOS 4.x (and probably other systems)
  * doesn't have vsscanf and God knows what else!  I've will do a vsscanf().
* I've also found out that the src/script.* rely on gawk and will not
  work with stock awk or even with nawk. Any changes are welcome.
* Linux is more tolerant of NULL dereferences than most systems. This
  fact was exposed by hanoi.
* ncurses still seems inefficient in drawing the screen on a serial
  link between Linux and suns. The padding may be the culprit.
* There seems to be one lingering problem with doupdate() after shelling
  out. Despite the fact the it is sending out the correct information
  to the terminal, nothing takes effect until you press ^L or another
  refresh takes place. And yes, output does get flushed.

#### ncurses 1.8.1 -> ncurses 1.8.2 #### Nov 28, 1993 ####

* added support for SVR4 and BSDI's BSD/386.
* major update and fix to scrolling routine.
* MORE fixes to stuff in lib_getch.c.
* cleaned-up configuration options and can now generate
	Config.* files through an awk script.
* changed setupterm() so it can be called more than once,
	add added set_curterm(), del_curterm().
* a few minor cleanups.
* added more prototypes in curses.h

#### ncurses 1.8 -> ncurses 1.8.1 #### Nov 4, 1993 ####

* added support for NeXTStep 3.0
* added termcap emulation (not well tested).
* more complete C++ interface to ncurses.
* fixed overlay(), overwrite(), and added copywin().
* a couple of bug fixes.
* a few code cleanups.

#### ncurses 0.7.2/0.7.3 -> ncurses 1.8 #### Aug 31, 1993 ####

* The annoying message "can't open file." was due to missing
  terminfo entry for the used terminal. It has now been
  replaced by a hopefully more helpful message.
* Problems with running on serial lines are now fixed.
* Added configuration files for SunOS, Linux, HP/UX, Ultrix,
  386bsd/BSDI (if you have others send'em to me)
* Cleaner Makefile.
* The documentation in manual.doc is now more uptodate.
* update optimization and support for hp terminals, and 386bsd
  console driver(s).
* mvcur optimization for terminals without cursor addressing
  (doesn't work on Linux)
* if cursor moved since last update, getch() will refresh the
  screen before working.
* getch() & alarm() can now live together. in 0.7.3 a signal
  interrupted getch() (bug or feature?) now the getch is
  restarted.
* scanw() et all were sick, now fixed.
* support for 8-bit input (use meta()).
* added default screen size to all terminfos.
* added c++ Ncursesw class.
* several minor bug fixes.

#### ncurses 0.7.2 -> ncurses 0.7.3 #### May 27, 1993 ####

* Config file to cope with different platforms (386BSD, BSDI, Ultrix, SunOS)
* more fixes to lib_getch.c
* changes related to Config

#### ncurses 0.7 -> ncurses 0.7.2 #### May 22, 1993 ####

* docs updated slightly (color usage is now documented).
* yet another fix for getch(), this one fixes problems with ESC being swallowed
  if another character is typed before the 1 second timeout.
* Hopefully, addstr() and addch() are 8-bit clean.
* fixed lib_tparm.c to use stdarg.h (should run on suns now)
* order of capabilities changed to reflect that specified in SYSV
  this will allow for binary-compatibility with existing terminfo dbs.
* added halfdelay()
* fixed problems with asc_init()
* added A_PROTECT and A_INVIS
* cleaned up vidputs()
* general cleanup of the code
* more attention to portability to other systems
* added terminfos for hp70092 (won't work until changes to lib_update.c are
  made) and 386BSD pcvt drivers.

Thanks to Hellmuth Michaelis for his help.
optimization code is slated for the next major release, stay tuned!

#### ncurses 0.6/0.61 -> ncurses 0.7 #### April 1, 1993
Please note that the next release will be called 1.8. If you want to know about
the rationale drop me a line.

Included are several test programs in test/.
I've split up the panels library, reversi, tetris, sokoban. They are now
available separately from netcom.com:pub/zmbenhal/

* color and ACS support is now fully compatible with SYSV at the terminfo
  level.
* Capabilities now includes as many SYSV caps I could find.
* tigetflag,tigetnum,tigetstr functions added.
* boolnames, boolfnames, boolcodes numnames, numfnames, numcodes,
  strnames, strfnames, strcodes arrays are now added.
* keyname() is added.
* All function keys can be defined in terminfo entries.
* fixed lin_tparm.c to behave properly.
* terminfo entries for vt* and xterm are included (improvements are welcome)
* more automation in handling caps and keys.
* included fixes from 0.6.1
* added a few more missing functions.
* fixed a couple of minor bugs.
* updated docs JUST a little (still miles behind in documenting the newer
	features).

#### ncurses 0.6 -> ncurses 0.61 ####

1) Included the missing data/console.

2) allow attributes when drawing boxes.

3) corrected usage of win->_delay value.

4) fixed a bug in lib_getch.c. if it didn't recognize a sequence it would
	simply return the last character in the sequence. The correct
	behavior is to return the entire sequence one character at a time.

#### ncurses0.5 -> ncurses0.6 #### March 1, 1993 ####
* removed _numchngd from struct _win_st and made appropriate changes.
* rewritten kgetch() to remove problems with interaction between alarm and
  read(). It caused SIGSEGV every now and then.
* fixed a bug that miscounted the numbers of columns when updating.
  (in lib_doupdate.c(ClrUpdate() -- iterate to columns not columns-1)
* fixed a bug that cause the lower-right corner to be incorrect.
  (in lib_doupdate.c(putChar() -- check against columns not columns-1)
* made resize() and cleanup() static to lib_newterm.c
* added notimeout().
* added timeout() define in curses.h
* added more function prototypes and fixed napms.
* added use_env().
* moved screen size detection to lib_setup.c.
* fixed newterm() to confirm to prototype.
* removed SIGWINCH support as SYSV does not define its semantics.
* cleaned-up lib_touch.c
* added waddnstr() and relatives.
* added slk_* support.
* fixed a bug in wdeleteln().
* added PANEL library.
* modified Makefile for smoother installation.
* terminfo.h is really term.h

#### ncurses 0.4 -> ncurses 0.5 #### Feb 14, 1993 ####
* changed _win_st structure to allow support for missing functionality.
* Addition of terminfo support for all KEY_*.
* Support for nodelay(), timeout(), notimeout().
* fixed a bug with the keypad char reading that did not return ESC until
  another key is pressed.
* nl mapping no longer occur on output (as should be)
  fixed bug '\n' no causing a LF.
* fixed bug that reset terminal colors regardless of whether we use color
  or not.
* Better support for ACS (not quite complete).
* fixed bug in wvline().
* added curs_set().
* changed from signal() to sigaction().
* re-included the contents of important.patch into source.

#### ncurses 0.3 -> ncurses 0.4 #### Feb 3, 1993 ####
* Addition of more KEY_* definitions.
* Addition of function prototypes.
* Addition of several missing functions.
* No more crashes if screen size is undefined (use SIGWINCH handler).
* added a handler to cleanup after SIGSEGV (hopefully never needed).
* changed SRCDIR from /etc/term to /usr/lib/terminfo.
* renamed compile/dump to tic/untic.
* New scrolling code.
* fixed bug that reversed the sense of nl() and nonl().

#### ncurses 0.2 -> ncurses 0.3 #### Jan 20, 1993 ####
* more support for color and graphics see test/ for examples.
* fixed various files to allow correct update after shelling out.
* more fixes for updates.
* no more core dumps if you don't have a terminfo entry.
* support for LINES and COLUMNS environment variables.
* support for SIGWINCH signal.
* added a handler for SIGINT for clean exits.

#### ncurses 0.1 -> ncurses 0.2 #### Aug 14, 1992 ####
* support for color.
* support for PC graphic characters.
* lib_trace.c updated to use stdarg.h and vprintf routines.
* added gdc.c (Great Digital Clock) as an example of using color.

#### ncurses -> ncurses 0.1 #### Jul 31, 1992 ####
* replacing sgtty stuff by termios stuff.
* ANSIfication of some functions.
* Disabling cost analysis 'cause it's incorrect.
* A quick hack for a terminfo entry.

-- vile:txtmode:
