-------------------------------------------------------------------------------
-- Copyright (c) 1998-2007,2008 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.1320 2008/11/02 00:56:22 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.

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
	+ update 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 Bugzilla
	  #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 ports/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 Bugzilla
	  #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 Bugzilla #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 Bugzilla #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 Bugzilla #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 Bugzilla #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, #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 Bugzilla #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
	  Bugzilla #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
	  Koblinger Egmont).

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.
	+ update 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 bugzilla #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
	  bugzilla #68199 dated 2002-07-07.
	+ 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, #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.
	+ update 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 bug report #99550).
	+ add configure check if cast for _IO_va_list is needed to compile
	  C++ vscan code (Debian bug report #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 bug report #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
	  bug #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 bug #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 bug report #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 230400 and 460800 bd 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.
	+ 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):
	+ merged Alexander V Lukyanov's patch to use ech and rep - untested
	  (lib_doupdate.c).
	+ 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 vscanf 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.

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 (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.10), 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

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
	+ terminfo patches #306/307 (ESR).
	+ moved logic that filters out rmul and rmso from setupterm to newterm
	  where it is less likely to interfere with termcap applications.

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.
	+ added sanity-checking of various paired string attributes (ESR).
	+ 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.

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

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)

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):
	+ 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
	+ removed boolean version of 'getm'
	+ added lib_print.c (for Rick Marshall)
	+ added has_key()
	+ 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).
	+ 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):
	+ new "-e" option of tic.
	+ fix for "infocmp -e".
	+ restore working-directory in read_termcap.c
	+ split lib_kernel.c, lib_setup.c and names.c in order to reduce
	  overhead for programs that use only termcap features.

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):
	+ mods to wgetch() in cooked mode
	+ corrected askuser() logic in tset
	+ correct interaction of endwin() with mouse processing
	+ added trace support for TTY flags

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:
