-------------------------------------------------------------------------------
-- Copyright (c) 1998-2014,2015 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.2476 2015/08/08 23:29:51 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 are given in this file by their initials.
They each account for 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.

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://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 compatbility 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-Han).

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 improvments 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 configuraton.
	  + 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 commmand-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 additonal
	  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 improvments 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://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
	  $COLORTERM 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 resonse 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 incompatiblity 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 compatiblity - 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
	  parameterizes some existing logic in the configure script, and is
	  intended for compatiblity 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 compatibilty
	  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 ambigous 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 implemenation
	+ 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 comparision 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 receiption 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 threshhold 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 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 initally 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 seperate 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 wil 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 (wont 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:
