Gcc 4.6 on SunOS >= 5.10 defines _XOPEN_SOURCE=600 (and other things)
for c++ to enable c99 features. Things start to fall apart if
_XOPEN_SOURCE is redefined to some lower value.
Interface changes
* turn on _XOPEN_CURSES definition in curses.h.
* change _nc_has_mouse to has_mouse, reflect its use in C++ and Ada95.
* add is_pad and is_subwin functions for opaque access to the WINDOW structure.
* add tiparm, based on review of X/Open Curses Issue 7.
Library Improvements
* add a terminal driver for Windows console, which supports a MinGW port to
Windows.
* add extended functions which specify the SCREEN pointer for several curses
functions which use the global SP.
* improve the NCURSES_NO_UTF8_ACS feature by adding a check for an extended
terminfo capability U8.
* improve performance of tigetstr, etc., by using hashing code from tic.
* add WACS_xxx definitions to wide-character configuration for thick- and
double-lines.
* modify init_pair to allow caller to create extra color pairs beyond the
color_pairs limit, which use default colors.
Improvements to Programs
* add tabs program.
* modify tic's -I/-C dump to reformat acsc strings into canonical form (sorted,
unique mapping).
* add checks in tic for inconsistent cursor-movement controls, and for
inconsistent printer-controls.
* add special case to _nc_infotocap (used by tic and infocmp) to recognize the
setaf/setab strings from xterm+256color and xterm+88color, and provide a
reduced version which works with termcap.
New features and improvements:
* library
o new flavor of the ncurses library provides rudimentary
support for POSIX threads. Several functions are reentrant,
but most require either a window-level or screen-level
mutex.
(This is API-compatible, but not ABI-compatible with
the normal library).
o add NCURSES_OPAQUE symbol to curses.h, will use to make
structs opaque in selected configurations.
o add NCURSES_EXT_FUNCS and NCURSES_EXT_COLORS symbols
to curses.h to make it simpler to tell if the extended
functions and/or colors are declared.
o add wresize to C++ binding
o eliminate fixed-buffer vsprintf calls in C++ binding.
o add several functions to C++ binding which wrap C
functions that pass a WINDOW* parameter.
o adapt mouse-handling code from menu library in form-library
o improve tracing for form library, showing created forms, fields, etc.
o make $NCURSES_NO_PADDING feature work for termcap interface .
o add check to trace-file open, if the given name is a
directory, add ".log" to the name and try again.
o several new manpages: curs_legacy.3x, curs_memleaks.3x,
curs_opaque.3x and curs_threads.3x
* programs:
o modified three test-programs to demonstrate the threading
support in this version: ditto, rain, worm.
o several new test-programs: demo_panels, dots_mvcur,
inch_wide, inchs, key_name, key_names, savescreen,
savescreen.sh test_arrays, test_get_wstr, test_getstr,
test_instr, test_inwstr and test_opaque.
o add adacurses-config to the Ada95 install.
o modify tic -f option to format spaces as \s to prevent
them from being lost when that is read back in unformatted
strings.
o The tack program is now distributed separately from
ncurses.
* terminal database
o added entries:
+ Eterm-256color, Eterm-88color and rxvt-88color
+ aterm
+ konsole-256color
+ mrxvt
+ screen.mlterm
+ screen.rxvt
+ teraterm4.59 is now the primary primary teraterm
entry, renamed original to teraterm2.3
+ 9term terminal
+ Newbury Data entries
o updated/improved entries:
+ gnome to version 2.22.3
+ h19, z100
+ konsole to version 1.6.6
+ mlterm, mlterm+pcfkeys
+ xterm, and building-blocks for function-keys to
xterm patch #230.
Major bug fixes:
* add logic to tic for cancelling strings in user-defined
capabilities (this is needed for current konsole terminfo
entry).
* 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.
* correct check for notimeout in wgetch.
* fix a sign-extension bug in infocmp's repair_acsc function.
* change winnstr to stop at the end of the line.
* make Ada95 demo_panels example work.
* fix for adding a non-spacing character at the beginning of a line.
* fill in extended-color pair to make colors work for
wide-characters using extended-colors.
* improve refresh of window on top of multi-column characters,
taking into account split characters on left/right window
boundaries.
* modify win_wchnstr to ensure that only a base cell is returned
for each multi-column character.
* 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.
* restore curs_set state after endwin/refresh
* 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.
* 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.
* improve resizeterm by moving ripped-off lines, and repainting
the soft-keys.
* modify form library to accept control characters such as
newline in set_field_buffer, which is compatible with Solaris.
* use NCURSES_MOUSE_MASK in definition of BUTTON_RELEASE, etc.,
to make those work properly with the --enable-ext-mouse
configuration
* correct some functions in Ada95 binding which were using
return value from C where none was returned.
* reviewed/fixed issues reported by Coverity and Klocwork tools.
Portability:
* configure script:
o new options:
--disable-big-strings
control whether static string tables are generated
as single large strings (to improve startup
performance), or as array of individual strings.
--disable-relink
control whether shared libraries are relinked
(during install) when rpath is enabled.
--disable-tic-depends
make explicit whether tic library depends on
ncurses/ncursesw library.
--enable-mixed-case
override the configure script's check if the
filesystem supports mixed-case filenames. This
allows one to control how the terminal database
maps to the filesystem. For filesystems that do
not support mixed-case, the library uses generate
2-character (hexadecimal) codes for the lower-level
of the filesystem terminfo database
--enable-reentrant
builds a different flavor of the ncurses library
(ncursest) which improves reentrant use of the
library by reducing global and static variables
(see the "--with-pthread" option for the threaded
support).
--enable-weak-symbols
use weak-symbols for linking to the POSIX thread
library, and use the same soname for the ncurses
shared library as the normal library (caveat: the
ABI is for the threaded library, which makes global
data accessed via functions).
--with-pthread
build with the POSIX thread library (tested with
AIX, GNU/Linux, FreeBSD, OpenBSD, HPUX, IRIX64,
Solaris, Tru64).
--with-ticlib
build/install the tic-support functions in a separate
library
o improved options:
--enable-ext-colors
requires the wide-character configuration.
--with-chtype
ignore option value "unsigned" is always added to
the type in curses.h; do the same for --with-mmask-t.
--with-dmalloc
build-fix for redefinition of strndup.
--with-hashed-db
+ accepts a parameter which is the install-prefix
of a given Berkeley Database.
+ the $LIBS environment variable overrides the
search for the db library.
--without-hashed-db
assumed when "--disable-database" is used.
* other configure/build issues:
o build-fixes for LynxOS
o modify shared-library rules to allow FreeBSD 3.x to use rpath.
o build-fix for FreeBSD "contemporary" TTY interface.
o build-fixes for AIX with libtool.
o build-fixes for Darwin and libtool.
o modify BeOS-specific ifdef's to build on Haiku.
o corrected gcc options for building shared libraries on
Solaris and IRIX64.
o change shared-library configuration for OpenBSD, make rpath work.
o build-fixes for using libutf8, e.g., on OpenBSD 3.7
o add "-e" option in ncurses/Makefile.in when generating
source-files to force earlier exit if the build environment
fails unexpectedly.
o add support for shared libraries for QNX.
o change delimiter in MKlib_gen.sh from '%' to '@', to
avoid substitution by IBM xlc to '#' as part of its
extensions to digraphs.
* library:
o 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.
o add/use configure script macro CF_SIG_ATOMIC_T, use
the corresponding type for data manipulated by signal
handlers.
o set locale in misc/ncurses-config.in since it uses a
range
o 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.
o reset mouse file-descriptor when unloading GPM library.
* test programs:
o update test programs to build/work with various UNIX
curses for comparisons.
Hashed-databases are supported for storing terminal descriptions.
Support for magic-cookies such as hpterm was improved.
Support for rpath in shared libraries was revised.
Many bugfixes were made for memory leaks, wide-character support, portability,
and more.
This release is designed to be upward compatible from ncurses 5.0
through 5.4; very few applications will require recompilation,
depending on the platform. These are the highlights from the
change-log since ncurses 5.4 release.
Interface changes:
* terminfo installs "xterm-new" as "xterm" entry rather than
"xterm-old" (aka xterm-r6).
* terminfo data is installed using the tic -x option (few systems
still use ncurses 4.2).
* modify C++ binding to work with newer C++ compilers by providing
initializers and using modern casts. Old-style header names are
still used in this release to allow compiling with not-so-old
compilers.
* modify parameter type in c++ binding for insch() and mvwinsch() to
be consistent with underlying ncurses library (was char, is
chtype).
* change NCursesWindow::err_handler() to a virtual function.
* form and menu libraries now work with wide-character data.
Applications which bypassed the form library and manipulated the
FIELD.buf data directly will not work properly with libformw,
since that no longer points to an array of char. The
set_field_buffer() and field_buffer() functions translate to/from
the actual field data.
* 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>
* 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.
* winnstr() now returns multibyte character strings for the
wide-character configuration.
* assume_default_colors() no longer requires that
use_default_colors() be called first.
* data_ahead() now works with wide-characters.
* slk_set() and slk_wset() now accept and store multibyte or
multicolumn characters.
* start_color() now returns OK if colors have already been started.
start_color() also returns ERR if it cannot allocate memory.
* pair_content() now returns -1 for consistency with init_pair() if
it corresponds to the default-color.
* unctrl() now returns null if its parameter does not correspond to
an unsigned char.
New features and improvements:
* library
+ environment variable NCURSES_NO_UTF8_ACS supports
miscellaneous terminal emulators which ignore alternate
character set escape sequences when in UTF-8 mode.
+ modify initialization of key lookup table so that if an
extended capability (tic -x) string is defined, and its name
begins with 'k', ncurses will automatically treat it as a
key.
+ change GPM initialization, using dl library to load it
dynamically at runtime.
+ form, menu and panel libraries support debug-tracing.
* add NCURSES-Programming-HOWTO.html by Pradeep Padala (see
http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/).
* programs:
* infocmp:
+ The -i option now matches 8-bit controls against its table
entries, e.g., so it can analyze the xterm-8bit entry.
+ 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.
* tic:
+ modify termcap-parsing to retain 2-character aliases at the
beginning of an entry if the "-x" option is used in tic.
+ filter out long extended names when translating to termcap
format. Only two characters are permissible for termcap
capability names.
+ correct translation of "%%" in terminfo format to termcap,
e.g., using "tic -C".
+ modify the "-c -v" options 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.
+ add a check for improperly ended strings, i.e., where a
following line begins in column 1.
+ 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.
+ add check (with debug configuration) that provides about the
runtime changes that would be made to sgr0 for termcap
applications.
* tset:
+ add -c and -w options 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.
Major bug fixes:
* improve logic in tgetent() which adjusts the termcap "me" string
to work with ISO-2022 string used in xterm-new. This is a feature
that was incompletely implemented in ncurses 5.3. ncurses attempts
to provide termcap clients with the portion of the sgr0 (termcap
"me") string that does not reset line-drawing.
* cells in the WINDOW which are continuations of a multicolumn
character are encoded differently, making repainting more
reliable.
* amend change to setupterm() in ncurses 5.4 (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.
* make setcchar() now works when its wchar_t* parameter is pointing
to a string which contains more data than can be converted.
* win_wchnstr() now works for more than one cell.
* resizeterm() now processes all levels of window hierarchy.
* 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.
* 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.
Portability:
* configure script:
+ new options:
--enable-largefile
set compiler and linker flags to use largefile
support.
--enable-ext-colors
Allow encoding of 256 foreground and background
colors, e.g., with the xterm-256color or
xterm-88color terminfo entries. This requires ABI 6
because it changes the size of cchar_t.
--enable-ext-mouse
This 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 terminal emulators. This requires
ABI 6 because it changes the encoding of mouse
events.
--with-chtype
overriding of the non-LP64 model's use of chtype
--with-mmask-t
overriding of the non-LP64 model's use of mmask_t
--without-xterm-new
Installs "xterm-old" as the "xterm" entry of the
terminfo database.
+ The --with-termlib option now accepts 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
+ fixes/improvements for cross-compiling:
o 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.
o correct BUILD_CPPFLAGS substitution in
ncurses/Makefile.in, to allow cross-compiling from a
separate directory tree.
* library:
+ 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.
+ modify C++ binding to use some C internal functions to make
it compile properly on Solaris (and other platforms).
+ remove check in newwin() that prevents allocating windows
that extend beyond the screen (Solaris does this).
+ check for nl_langinfo(CODESET), use it if available. This
replaces ad hoc tests of environment variables to check if
the terminal is setup for UTF-8 encoding. Applications which
do not call setlocale() should be corrected, to make them
work properly with UTF-8 encoding.
In particular, applications which assume (and do not call
setlocale()) that Latin-1 codes are printable will no longer
work in a UTF-8 locale since the ad hoc check of environment
variables to see if the locale was UTF-8 is not used when
nl_langinfo(CODESET) is available.
+ use setlocale() to query the program's current locale rather
than using getenv(). This supports applications which rely
upon legacy treatment of 8-bit characters when the locale is
not initialized.
buildlink2.mk files back into the main trunk. This provides sufficient
buildlink2 infrastructure to start merging other packages from the
buildlink2 branch that have already been converted to use the buildlink2
framework.
into LDFLAGS. This makes building of ncurses on a system already having
ncurses installed possible. This is just another chapter of the continuing
buildlink saga.
needed for the xerces-p package, but ended up not being necessary. By
removing this hack, we reduce the number of places in pkgsrc where we depend
upon libtool internals.
but mostly comprises patches to ease building on NetBSD pkgsrc. Tom Dickey
has been kind enough to accept our patches back into the main source tree.
Many thanks to him.
We decided to release ncurses as a new whole number release (5.0)
because it incorporates several interface changes, including some that
would invalidate existing shared libraries. These are the highlights
from the change-log since ncurses 4.2 release.
Interface changes:
* The principal source of changes to the interface comes from the
release of X/Open Curses in 1997. Earlier versions of ncurses (4.0
and before) were based on a draft version of the specification.
The release version adds parameters to some functions to support
the evolving internationalization of curses. These summarize the
impact:
+ modified several prototypes to correspond with 1997 version
of X/Open Curses (affects ABI since developers have used
attr_get).
+ corrected prototypes for slk_* functions, using chtype rather
than attr_t.
+ the slk_attr_{set,off,on} functions need an additional void*
parameter according to XSI.
+ 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.
+ 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.
+ reviewed/corrected macros in curses.h as per XSI document.
+ add set_a_attributes and set_pglen_inch to terminfo
structure, as per XSI and Solaris 2.5.
* The newest version of the X/Open Curses is implemented on Solaris
and other vendor's systems. It adds new features to the terminfo
descriptions:
+ implement tparm %l format.
+ implement tparm printf-style width and precision for %s, %d,
%x, %o as per XSI.
* We made additional changes to reduce impact by future interface
changes:
+ rename key_names[] array to _nc_key_names since it is not
part of the curses interface.
+ move macro winch to a function, to hide details of struct
ldat
* modify configure script to embed ABI in shared libraries for HP-UX
10.x (detailed request by Tim Mooney).
* 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).
New features:
* enable sigwinch handler by default.
* turn on hashmap scrolling code by default
* improved support for termcap applications
+ modify tput to accept termcap names as an alternative to
terminfo names.
+ provide support for termcap PC variable by copying it from
terminfo data and using it as the padding character in tputs.
+ 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.
+ change name-comparisons in lib_termcap to compare no more
than 2 characters.
+ add configure option --enable-tcap-names, which essentially
allows users to define new capabilities as in termcap.
* add mouse support to ncurses menus.
* add mouse and dll support for OS/2 EMX
* modify terminfo parsing to accept octal and hexadecimal constants
* 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.
* 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 -f option to infocmp and tic, which formats the terminfo
if/then/else/endif so that they are readable (with newlines and
tabs).
* modify tic to compile into %'char' form in preference to
%{number}, since that is a little more efficient.
Major bug fixes:
* 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.
* 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.
* 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.
* modify setupterm so that cancelled strings are treated the same as
absent strings, cancelled and absent booleans false (does not
affect tic, infocmp).
* 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.
* 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.
* 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.