X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=announce.html.in;h=89fb3ebeb4622d3121cdf68190348d4c95538c1a;hp=58be91d0d189e7d918acf377510962dbdf98a20f;hb=c3b21f65a2687f3894a0d3217006c23f162c893a;hpb=c633e5103a29a38532cf1925257b91cea33fd090 diff --git a/announce.html.in b/announce.html.in index 58be91d0..89fb3ebe 100644 --- a/announce.html.in +++ b/announce.html.in @@ -1,593 +1,2421 @@ - - -
-- -In mid-June 1995, the maintainer of 4.4BSD curses declared that he -considered 4.4BSD curses obsolete, and is encouraging the keepers of -Unix releases such as BSD/OS, freeBSD and netBSD to switch over to -ncurses.
- -The ncurses code was developed under GNU/Linux. It should port easily to -any ANSI/POSIX-conforming UNIX. It has even been ported to OS/2 Warp!
- -The distribution includes the library and support utilities, including a -terminfo compiler tic(1), a decompiler infocmp(1), clear(1), tput(1), tset(1), -and a termcap conversion tool captoinfo(1). Full manual pages are provided for -the library and tools.
-
-The ncurses distribution is available via anonymous FTP at
-the GNU distribution site
-ftp://ftp.gnu.org/pub/gnu/ncurses.
-
It is also available at
-ftp://dickey.his.com/ncurses.
-
-
-Interface changes: -
ospeed
variable back to
- short
to match its use in legacy applications. It was
- altered after ncurses 4.2 to speed_t
to repair a type
- mismatch which was introduced after 1.9.4 in 1995. The principal
- users of termcap continued to use short
, which is
- not the same size.
-
- NOTE: A few applications will have to be recompiled
- (about 1% of the programs in a typical Linux distribution,
- 10% of the programs that use ncurses). These are easy to
- identify with nm
or strings
.
-
-
_nc_can_clear_with()
, which
- was built with the configure --enable-expanded option but not used.
-
- chtype
values in the debug library, and for better
- access and buffer limit checking.
-tgoto()
to make it better support existing
- termcap applications which use hardcoded strings rather than obtain
- all of their information from the termcap file. If the string does
- not appear to be a terminfo string (i.e., does not refer to a "%p"
- parameter, or terminfo-style padding), and termcap support is configured, tgoto()
- will interpret it as termcap. Otherwise, as before, it will use
- tparm()
.
-
- tgoto()
changes work properly,
- added checks to tic
which report capabilities that do
- not reference the expected number of parameters.
-
- --disable-root-environ
adds runtime checks
- which tell ncurses to disregard $TERMINFO and similar environment
- variables if the current user is root, or running setuid/setgid.
-
- --disable-assumed-color
allows you to use the
- pre-5.1 convention of default colors used for color-pair 0 to be
- configured (see assume_default_colors()).
-
- --program-prefix
, including the
- manpage names and cross references.
-
- --with-database
allows you to specify a
- different terminfo source-file to install. On OS/2 EMX, the
- default is misc/emx.src, otherwise misc/terminfo.src
-
- --with-default-terminfo-dir
allows you to
- specify the default terminfo database directory.
-
- --with-libtool
allows you to build with
- libtool
. NOTE: libtool
- uses a different notation for numbering shared library versions
- from the existing ncurses configuration.
-
-
--with-manpage-tbl
causes the manpages to be
- preprocessed by tbl(1) prior to installation,
-
- --without-curses-h
causes the installation
- process to install curses.h as ncurses.h and make appropriate
- changes to headers and manpages.
- --install-prefix
configure
- option from INSTALL_PREFIX
to DESTDIR
- (the latter has become common usage although the name is
- misleading).
-
- ld -rpath
options (e.g., Linux, and Solaris)
- to use an absolute pathname for the build tree's lib directory,
- avoiding confusion with directories relative to the current one
- with the installed programs.
-
- misc/run_tic.in
to use
- tic -o
, to eliminate dependency on
- $TERMINFO
variable for installs.
- screen
's terminfo entry
- since otherwise the FreeBSD port makes it pass termcap equivalents
- to tgoto
, which would be misinterpreted by older
- versions of ncurses.
- 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.
-
- 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
.
-
- no_color_video
with a logic expression which is faster.
- manlinks.sed
script introduced in ncurses 5.1
- to avoid using ERE "\+", which is not understood by standard versions
- of sed
. This happens to work with GNU sed
,
- but is not portable, and was the initial motivation for this release.
-
- tparm()
to disallow arithmetic on strings,
- analyze the varargs list to read strings as strings and numbers as
- numbers.
-
- tparm()
's internal function
- spop()
to treat a null pointer as an empty string.
-
- parse_format()
in lib_tparm.c to ignore
- precision if it is longer than 10000.
-
- _nc_safe_strcat()
, etc. Made other related changes to
- check lengths used for strcat()
and
- strcpy()
.
- 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.
-
- rs2
capability in xterm-r6 and similar entries
- where cursor save/restore bracketed the sequence for resetting video
- attributes. The cursor restore would undo that.
- _nc_utf8_outch()
to avoid sign-extension when
- checking for out-of-range value.
- $HOME
environment
- variable, to avoid retrieving terminfo descriptions from
- ./.terminfo
.
-
- _nc_parse_entry()
and
- postprocess_termcap()
to avoid using
- strtok()
, because it is non-reentrant.
-
- 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.
-
- Make_Enum_Type()
.
-
- -fno-builtin
option.
- fgets()
in
- comp_scan.c next_char()
function, in case
- tic
is run on a non-text file (fixes a core dump).
-
- tic
to verify that its inputs are really files,
- in case someone tries to read a directory (or
- /dev/zero
).
-
- open_tempfile()
- in tic.c which made "tic -I" give an ambiguous error message about
- tmpnam
.
-
- adjust_cancels()
, which did not check
- both alternatives when reclassifying an extended name between
- boolean, number and string, causing an infinite loop in
- tic
.
- tic
for parameter counts in
- capability strings, found/fixed several errors both in the
- terminfo database and in the include/Caps file.
- --srcdir
and --with-install-prefix
.
-
- $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.
-
- configure --target
- will set a default program-prefix.
-
- tcgetattr()
to allow for
- old implementations, e.g., on BeOS, which only defined it as a
- macro.
-
- test
in
- configure script to use quotes, for instance fixing a problem in the
- --disable-database
option.
-
- _nc_tracebits()
for CSIZE
- with a table to simplify working around implementations that define
- random combinations of the related macros to zero.
-
- _nc_basename()
, used to
- consolidate related code in progs, as well as accommodating OS/2 EMX
- pathnames.
-
- wresize()
allows you to resize windows, preserving
-their data.
-use_default_colors()
allows you to
-use the terminal's default colors for the default color pair,
-achieving the effect of transparent colors.
-keyok()
-and define_key()
allow
-you to better control the use of function keys,
-e.g., disabling the ncurses KEY_MOUSE,
-or by defining more than one control sequence to map to a given key code.
-#undef
.
-- -The ncurses code has been tested with a wide variety of applications -including (versions starting with those noted): -
- -The ncurses distribution includes a selection of test programs (including -a few games). - -
-
-To join the ncurses mailing list, please write email to
-bug-ncurses-request@gnu.org
containing the line:
-
- subscribe <name>@<host.domain> -- -This list is open to anyone interested in helping with the development and -testing of this package.
- -Beta versions of ncurses and patches to the current release are made available at -ftp://dickey.his.com/ncurses. - -
- -You can find lots of information on terminal-related topics -not covered in the terminfo file at -Richard Shuford's -archive. - - - + + + +
+ + +The ncurses (new curses) library + is a free software emulation of curses in System V Release 4.0 + (SVr4), and more. It uses terminfo format, supports pads and + color and multiple highlights and forms characters and + function-key mapping, and has all the other SVr4-curses + enhancements over BSD curses. SVr4 curses is better known today + as X/Open Curses.
+ +In mid-June 1995, the maintainer of 4.4BSD curses declared + that he considered 4.4BSD curses obsolete, and encouraged the + keepers of unix releases such as + BSD/OS, FreeBSD and NetBSD to switch over to ncurses.
+ +Since 1995, ncurses has been + ported to many systems:
+ +The distribution includes the library and support utilities, + including
+ +Full manual pages are provided for the library and tools.
+ +The ncurses distribution is + available via anonymous FTP at the GNU distribution site
+ ++ +It is also available at + +
+ ++ +
These notes are for ncurses + @VERSION@, released August 8, 2015.
+ +This release is designed to be source-compatible with + ncurses 5.0 through 5.9; providing a + new application binary interface (ABI). Although the source can + still be configured to support the ncurses 5 ABI, the intent of the release is to + provide extensions which are generally useful, but + binary-incompatible with ncurses + 5:
+ +Extend the cchar_t
structure to allow more
+ than 16 colors to be encoded.
Modify the encoding of mouse state to make room for a 5th + mouse button. That allows one to use ncurses with a wheel mouse with xterm or + similar X terminal emulators.
+There are, of course, numerous other improvements, + including
+ +fixes made based on the Clang and Coverity static + analyzers.
+memory leak fixes using Valgrind
+The release notes mention some bug-fixes, but are focused on + new features and improvements to existing features log since + ncurses 5.9 release.
+ +While the intent of the release is to provide a new stable + ABI, there are other development activities which are summarized + below.
+ +The original release plan, e.g., for "5.10" was to improve
+ the MinGW port. Ultimately that was completed (wide-character
+ support, mouse, etc), but was deferred to focus on termcap
+ support and performance issues. Also, pinpointing the
+ problems with Console2
took a while.
A review of termcap compatibility in 2011 led to several + minor fixes in the library and improvements to utilities. To + do this properly, a review of the various extent termcap + implementations was needed.
+ +The termcap + library checker (tctest) (not part of ncurses) was one result. A followup review + of performance using ncurses-examples + in 2014 led to additional improvements.
+Output buffering provided a further, but worthwhile
+ distraction. A bug report in 2012 regarding the use of signal
+ handlers in ncurses) pointed out
+
+ a problem with the use of unsafe functions for handling
+ SIGTSTP
. Other signals could be addressed with
+ workarounds; repairing SIGTSTP
required a
+ different approach. The solution required changing internal
+ behavior of the library: how it handles output buffering.
Now ncurses buffers its own + output, independently of the standard output. A few + applications relied upon the library's direct reuse of the + standard output buffering; however that is + unspecified behavior and has never been a + recommended practice. Identifying these applications as well + as refining the change to permit low-level applications to + work consistently took time.
+Since the introduction of the experimental support for 256 + colors early in 2005 + (released in ncurses + 5.5), there has been increased user interest. Almost all + packagers continue providing the ncurses ABI 5 which cannot + support 256 colors.
+Symbol versioning, or the lack of it in ncurses, is the + main reason why packagers would be reluctant to add a new + ncurses ABI.
+ +This release provides the new ABI along with + script-generated lists of versioned symbols which can be used + for both ABI 5 and 6 (with distinct names to keep the two + separate). This took time to development, as reported in + Symbol + versioning in ncurses.
+X/Open curses provides more than one initialization + function:
+ +They are documented in X/Open as if
+ initscr
calls newterm
using
+ stdout
for output stream, and in turn
+ newterm
calls setupterm
using
+ fileno(stdout)
for the file descriptor. As long as
+ an implementation acts as if it does this, it conforms.
+ In practice, implementations do what is implied. This creates a
+ problem: the low-level setupterm
function's file
+ descriptor is unbuffered, while newterm
implies
+ buffered output. X/Open Curses says that all output is done
+ through the file descriptor, and does not say how the output
+ stream is actually used.
Initially, ncurses used the file
+ descriptor (obtained from the output stream passed to
+ newterm
) for changing the terminal modes, and relied
+ upon the output parameter of newterm
for buffered
+ output. Later (to avoid using unsafe buffered I/O in signal
+ handlers), ncurses was modified to
+ use the file descriptor (unbuffered output) when cleaning up on
+ receipt of a signal. Otherwise (when not handling a signal), it
+ continued to use the buffered output.
That approach worked reasonably well and as a side effect,
+ using the same buffered output as an application might use for
+ printf
meant that no flushing was needed when
+ switching between normal- and screen-modes.
There were a couple of problems:
+ +to get good performance, curses (not only ncurses, but SVr4 curses in general) set an
+ output buffer using setbuf
or similar function.
+ There is no standard (or portable) way to turn that output
+ buffer off, and revert to line-buffering. The
+ NCURSES_NO_SETBUF
environment variable did make it
+ optional.
to handle SIGTSTP
(the “stop”
+ signal), ncurses relied upon
+ unsafe functions. That is, due to the complexity of the
+ feature, it relied upon reusing existing functions which
+ should not have been called via the signal handler.
Conveniently, solving the second problem (by making ncurses do its own output buffering) + also fixed the first one. But there were special cases to + resolve: + low-level functions such as mvcur, putp, vidattr + explicitly use the standard output. Those functions were reused + internally, and required modification to distinguish whether they + were used by the high-level or low-level interfaces.
+ +Finally, there may still be a few programs which should be + modified to improve their portability, e.g., adding an
+ +++ ++fflush(stdout); ++
when switching from “shell”
+ mode to “program”
+ (curses) mode. Those are fairly rare because most programmers
+ have learned not to mix printf
and printw
.
This release introduces symbol-versioning to ncurses because without it, the change of ABI + would be less successful. A lengthy discussion will be presented + in Symbol + versioning in ncurses. These + notes summarize what has changed, and what can be done with the + new release.
+ +Symbol-versioning allows the developers of a library to mark + each public symbol (both data and functions) with an identifier + denoting the library name and the version for which it was built. + By doing this, users of the library have a way to help ensure + that applications do not accidentally load an incompatible + library. In addition, private symbols can be hidden entirely.
+ +This release provides sample files for the four principal
+ configurations of ncurses libraries:
+ ncurses
, ncursesw
,
+ ncursest
and ncursestw
. Each sample is
+ given in two forms:
++ ++
+- “
+ +.map
”- These list all public symbols, together with version + names.
+ +- “
+ +.sym
”- These list all public symbols, without version + names.
+
The sample files are generated by scripts which take
+ into account a few special cases such as tack to omit
+ many of the ncurses private symbols
+ (beginning with “_nc_
”). Here are
+ counts of globals versus locals:
++ ++
++ + +Config + +Symbols + +Globals + +Locals + +"_nc_" ++ + +ncurses + +976 + +796 + +180 + +332 ++ + +ncursesw + +1089 + +905 + +184 + +343 ++ + +ncursest + +979 + +804 + +175 + +358 ++ +ncursestw + +1098 + +914 + +184 + +372 +
Although only four sample configurations are presented, each + is formed by merging symbols from several combinations of + configure-script options, taking into account advice from + downstream packagers. Because they are formed by merging, the + sample files may list a symbol which is not in a given package. + That is expected. The samples have been tested and are working + with systems (such as Fedora, FreeBSD and Debian) which fully + support this feature. There are other systems which do + not support the feature, and a few (such as Solaris) + which provide incomplete support.
+ +The version-naming convention used allows these sample files + to build distinct libraries for ABI 5 and 6. Version names + consist of
+ +configuration name, e.g.,
+ “NCURSESW
” for the wide-character
+ libraries
ABI version (if not 5)
+library name for two special cases which have the same
+ interface across configurations:
+ “TINFO
” and
+ “TIC
”
release version
+patch date (for the release version)
+For example, running nm -D
on the libraries in
+ the ncurses6 test package shows these symbol-versions:
++ ++0000000000000000 A NCURSES6_TIC_5.0.19991023 +0000000000000000 A NCURSES6_TIC_5.1.20000708 +0000000000000000 A NCURSES6_TIC_5.5.20051010 +0000000000000000 A NCURSES6_TIC_5.7.20081102 +0000000000000000 A NCURSES6_TIC_5.9.20150530 +0000000000000000 A NCURSES6_TINFO_5.0.19991023 +0000000000000000 A NCURSES6_TINFO_5.1.20000708 +0000000000000000 A NCURSES6_TINFO_5.2.20001021 +0000000000000000 A NCURSES6_TINFO_5.3.20021019 +0000000000000000 A NCURSES6_TINFO_5.4.20040208 +0000000000000000 A NCURSES6_TINFO_5.5.20051010 +0000000000000000 A NCURSES6_TINFO_5.6.20061217 +0000000000000000 A NCURSES6_TINFO_5.7.20081102 +0000000000000000 A NCURSES6_TINFO_5.8.20110226 +0000000000000000 A NCURSES6_TINFO_5.9.20150530 +0000000000000000 A NCURSESW6_5.1.20000708 +0000000000000000 A NCURSESW6_5.3.20021019 +0000000000000000 A NCURSESW6_5.4.20040208 +0000000000000000 A NCURSESW6_5.5.20051010 +0000000000000000 A NCURSESW6_5.6.20061217 +0000000000000000 A NCURSESW6_5.7.20081102 +0000000000000000 A NCURSESW6_5.8.20110226 +0000000000000000 A NCURSESW6_5.9.20150530 ++
As a special case, this release (which makes the final change + for ABI 5) is marked with release version 5.9 and patch date + 20150530.
+ +The new release has several improvements for performance and + building. For instance:
+ +several files in ncurses- and progs-directories were
+ modified to allow const
data used in internal
+ tables to be put by the linker into the readonly text
+ segment.
various improvements were made to building the Ada95
+ binding, both in simplifying the generated files as well as
+ improving the way it uses gnatmake
There are also new features in the libraries:
+ +added + wgetdelay to retrieve _delay member of WINDOW if it + happens to be opaque, e.g., in the pthread configuration.
+added + A_ITALIC extension.
+added form library extension + O_DYNAMIC_JUSTIFY option which can be used to override + the different treatment of justification for static versus + dynamic fields .
+rewrote + putwin and + getwin, making an extended version which is capable of + reading screen-dumps between the wide/normal ncurses configurations. These are text + files, except for a magic code at the beginning:
+ ++++0 string \210\210 Screen-dump (ncurses) ++
several changes to mouse support include:
+ +%u
” format to terminfo.There are a few new configure options dealing with library + customization:
+ +add “--enable-ext-putwin
”
+ configure option to turn on the extended putwin/getwin. By
+ default, this is enabled for ABI 6 and disabled with ABI
+ 5.
add “--enable-string-hacks
”
+ option to control whether strlcat and strlcpy may be used.
+ Because ncurses already does the
+ requisite buffer-limit checks, this feature is mainly of
+ interest to quiet compiler-warnings on a few systems.
add configure option
+ “--with-tparm-arg
” to allow
+ tparm's parameters to be something more likely to be the
+ same size as a pointer, e.g., intptr_t
(again,
+ the default is set for ABI 6).
Most of the termcap-related changes based on development of
+ tctest
+ (termcap library checker) are implemented in the tic and
+ infocmp programs rather than affecting the library. As noted in
+ the
+ discussion of tctest
, ncurses's ability to translate between terminfo
+ and termcap formats has been improved at different times, but
+ subject to feedback from "real" termcap users. There are very few
+ of those. Nowadays, virtually all termcap users are
+ using ncurses (or NetBSD, with its
+ own terminfo library) and their programs are actually using
+ terminfo rather than termcap data.
Still, there are a few. A comment about the translation of the
+ ASCII NUL
character prompted a review:
Both terminfo and termcap store string capabilities as
+ NUL
-terminated strings.
In terminfo, a \0
in a terminal description
+ is stored as \200
.
There are no (known) terminals which would behave
+ differently when sent \0
or
+ \200
.
When translating to terminfo format (or displaying a
+ printable version of an entry using infocmp), ncurses shows \200
as
+ \0
.
It has done this since 1998 (quoting from the NEWS + file):
+ ++++980103 +... + + modify _nc_tic_expand() to generate \0 rather than \200. +... + + correct translation of terminfo "^@", to \200, like \0. ++
However, the _nc_tic_expand
function (which
+ optionally produces terminfo or termcap format) did not
+ address this special case for termcap. Even the later 4.4BSD
+
+ cgetstr interprets a \0
literally, ending
+ that string (rather than using the terminfo
+ improvement).
As a result of the review, several improvements were made to + ncurses translation to/from termcap + format — and improving the checks made in tic for + consistency of entries. Most of these are not of general + interest, except for two new command-line options for tic and + infocmp:
+ +the “-0
” option generates
+ termcap/terminfo source on a single line.
the “-K
” option provides stricter
+ BSD-compatibility for termcap output.
Other user-visible improvements and new features include:
+ +added “-D
” option to tic and
+ infocmp, to show the database locations that it could
+ use.
added “-s
” option to toe, to sort
+ its output.
extended “-c
” and
+ “-n
” options of infocmp to allow
+ comparing more than two entries.
modified toe's report when “-a
”
+ and “-s
” options are combined, to
+ add a column showing which entries belong to a given
+ database.
modified the clear program to take into account the
+ “E3
” extended capability to clear
+ the terminal's scrollback buffer.
Along with the library and utilities, many improvements were + made to the ncurses-examples. + Some were made to allow building (and comparison-testing) against + NetBSD curses and PDCurses. Both lack some of the X/Open Curses + features, necessitating customization. But this activity was + useful because it showed some remaining performance issues (which + have been resolved in this release).
+ +These changes were made to verify compatibility or compare + performance of ncurses:
+ +made workarounds for compiling test-programs with NetBSD + curses, though it lacks some common functions such as + + use_env.
+added dots_termcap test-program
+added dots_curses test-program, for comparison with the + low-level examples.
+added test_setupterm test-proram to demonstrate + normal/error returns from the setupterm and restartterm + functions.
+added “-d
”,
+ “-e
” and
+ “-q
” options to the demo_terminfo
+ and demo_termcap test-programs.
added “-y
” option to demo_termcap
+ and test/demo_terminfo test-programs to demonstrate behavior
+ with/without extended capabilities.
modified demo_termcap and demo_terminfo test-programs to
+ make their options more directly comparable, and add
+ “-i
” option to specify a terminal
+ description filename to parse for names to lookup.
rewrote the tests for + mvderwin and test for recursive + mvwin in the movewindow test-program.
+These changes were made to help with the MinGW port:
+ +added test-screens to the ncurses test-program to show + 256-characters at a time, to help with MinGW port.
+modified the view test-program to load UTF-8 when built + with MinGW by using regular win32 API because the MinGW + functions mblen and mbtowc do not work.
+added “-s
” option to the view
+ test-program to allow it to start in single-step mode,
+ reducing size of trace files when it is used for debugging
+ MinGW changes.
These changes were made to verify new extensions in ncurses:
+ +added + form_driver_w entrypoint to wide-character forms library, + as well as form_driver_w test-program.
+modified ncurses test-program's b/B tests to display lines + only for the attributes which a given terminal supports, to + make room for an italics test.
+modified ncurses test-program, adding
+ “-E
” and
+ “-T
” options to demonstrate use_env
+ versus use_tioctl.
modified ncurses test-program's c/C tests to cycle through + subsets of the total number of colors, to better illustrate + 8/16/88/256-colors by providing directly comparable + screens.
+modified the ncurses test-program to also show position + reports in 'a' test.
+These changes were made to make the examples more useful:
+ +added scripts for building dpkg and rpm test-packages
+modified the hanoi test-program to show the minimum number + of moves possible for the given number of tiles.
+modified the knight test-program to show the number of + choices possible for each position in automove option, e.g., + to allow user to follow Warnsdorff's rule to solve the + puzzle.
+This release provides improvements to tic's
+ “-c
” checking option, which was used for
+ example to
make sgr
in several entries agree with other
+ caps.
correct padding in some entries where earlier versions had + miscounted the number of octal digits.
+There are several new terminal descriptions:
+ +A few entries use extensions (user-defined terminal + capabilities):
+ +E3
, used in linux, putty and xterm-basic is
+ tested in the clear
+ program to erase a terminal's scrollback.
TS
is used in the
+ xterm+sl building block to help deprecate the misuse of
+ tsl
for xterm's title-string.
XT
is used in some terminfo entries to
+ improve usefulness for other applications than screen, which
+ would like to pretend that xterm's title is a
+ status-line.
xm
is used in examples
+ xterm-1005 and
+ xterm-1006 to illustrate a way to make mouse handling
+ more general
A few terminals support italics and/or dim capabilities. In
+ particular, screen does not. Documented that, and accommodated
+ the terminals where this feature works with the
+ A_ITALIC
extension.
As usual, this release
+ +improves documentation by describing new features,
+attempts to improve the description of features which + users have found confusing
+fills in overlooked descriptions of features which were + described in the NEWS file + but treated sketchily in manual pages.
+In addition, the mechanism for producing HTML versions of the + documentation has been improved:
+ +use an improved version of man2html + to generate html manpages.
+regenerated + NCURSES-Programming-HOWTO.html to fix some of the broken + html emitted by docbook.
+Ada95 binding:
+ +modify makefile rules to ensure that the PIC option is + not used when building a static library
+make Ada95 build-fix for big-endian architectures such
+ as sparc. This undoes one of the fixes from
+ 20110319, which added an
+ “Unused
” member to
+ representation clauses, replacing that with pragmas to
+ suppress warnings about unused bits.
Color and attributes:
+ +parenthesize parameter of COLOR_PAIR
and
+ PAIR_NUMBER
in curses.h in case it happens
+ to be a comma-expression.
improve
+ 20021221 workaround for broken acs, handling a case
+ where that ACS_xxx character is not in the
+ acsc
string but there is a known
+ wide-character which can be used.
modify + init_pair to accept -1's for color value after + + assume_default_colors has been called.
+add a check in + start_color to limit color-pairs to 256 when extended + colors are not supported.
+Resizing the screen:
+ +propagate error-returns from wresize, i.e., the + internal increase_size and decrease_size functions + through + resize_term.
+add check for zero/negative dimensions for
+ resizeterm
and resize_term
.
modify resizeterm
to always push a
+ KEY_RESIZE
onto the fifo, even if screensize
+ is unchanged. Modify library to push a
+ KEY_RESIZE
if there was a SIGWINCH, even if
+ it does not call resizeterm
). These changes
+ eliminate the case where a SIGWINCH is received, but ERR
+ is returned from wgetch
or
+ wgetnstr
because the screen dimensions did
+ not change.
Low-level interfaces
+ +fix an old bug in the termcap emulation;
+ “%i
” was ignored in
+ tparm
because the parameters to be
+ incremented were already on the internal stack.
change “%l
” behavior in tparm
+ to push the string length onto the stack rather than
+ saving the formatted length into the output buffer.
modify name-comparison for tgetstr, etc., to + accommodate legacy applications as well as to improve + compatbility with BSD 4.2 termcap implementations (see + note for 980725).
+modify internal recursion in wgetch
which
+ handles cooked mode to check if the call to
+ wgetnstr
returned an error. This can happen
+ when both nocbreak
and nodelay
+ are set, for instance (see note for 960418).
add a check in internal function
+ waddch_nosync
to ensure that tab characters
+ are treated as control characters; some broken locales
+ claim they are printable.
modify menu library to ensure that a menu's top-row is + adjusted as needed to ensure that the current item is on + the screen
+fix special case where double-width character + overwrites a single- width character in the first + column.
+The ncurses 6.0 configure script
+ makes changes to the default value of several configure
+ options, depending on the --with-abi-version
option
+ (i.e., whether its value is “5” or
+ “6”):
--enable-const
Feature introduced in 970405
+ supports the use of const
where X/Open Curses
+ should have, but did not. NetBSD curses does something
+ similar with const
.
--enable-ext-colors
Extends the cchar_t
structure to allow more
+ than 16 colors to be encoded. This applies only to the
+ wide-character (--enable-widec
)
+ configuration.
--enable-ext-mouse
Modifies the encoding of mouse state to make room for a + 5th mouse button. That allows one to use ncurses with a wheel + mouse with xterm or similar X terminal emulators.
+--enable-ext-putwin
Modifies the file-format written by putwin
to
+ use printable text rather than binary files, allowing
+ getwin
to read screen dumps written by
+ differently-configured ncurses libraries. The extended
+ getwin
can still read binary screen dumps from
+ the same configuration of ncurses. This does not
+ change the ABI (the binary interface seen by calling
+ applications).
--enable-interop
Modifies the FIELDTYPE
structure used for the
+ form library to make it more generic.
--enable-lp64
Allows an application to define _LP64
to
+ declare chtype
and mmask_t
as
+ simply “unsigned
” rather than the
+ configured types using the --with-chtype
and
+ --with-mmask_t
options.
--enable-sp-funcs
Compile-in support for extended functions which accept a + SCREEN pointer, reducing the need for juggling the global SP + value with + set_term and + delscreen.
+--with-chtype=uint32_t
Makes chtype
explicitly a 32-bit unsigned
+ value.
--with-mmask_t=uint32_t
Makes mmask_t
explicitly a 32-bit unsigned
+ value.
--with-tparm-arg=intptr_t
X/Open Curses declares
+ tparm using long
for each of the parameters
+ aside from the formatting string, presuming that
+ long
and char*
are the same size.
+ This configure option uses intptr_t
which
+ provides a better guarantee of the sizes.
The configure script no longer checks for antique compilers;
+ c89
is assumed as a minimum. There are a few
+ features from later revisions which are used when available. The
+ configure script makes checks to turn on useful warnings from
+ clang, gcc and icc. You should be able to build ncurses 6.0 with any of the current (or not so
+ current) C compilers available in 2015.
The configure script, by the way, makes changes which do not
+ work with systems whose /bin/sh
is non-POSIX. This
+ mainly affects Solaris (the other vendor unix systems have followed the POSIX guidelines
+ for the past twenty years). If you must build on Solaris, its
+ xpg4
+ binaries suffice, e.g.,
+ + ++ ++ #!/bin/sh
+
+ WHAT=`hostname|sed -e 's/\..*//'`
+ + OUT=configure.out
+ cat >>$OUT <<EOF/
+ ** `date`
+ ** node: $WHAT
+ ** user: `id`
+ ** conf: $*
+ EOF/
+
+ SHELL=/bin/sh
+ if test -f /usr/xpg4/bin/sh
+ + then
+ CONFIG_SHELL=/usr/xpg4/bin/sh
+ export CONFIG_SHELL
+ + SHELL=$CONFIG_SHELL
+ fi
+
+ rm -f config.status config.cache
+ TOP=$HOME/$WHAT
+ $SHELL ./configure --verbose \
+ + --disable-echo \
+ + --disable-overwrite \
+ + --enable-warnings \
+ + --with-warnings \
+ + --prefix=$TOP $* 2>&1 | tee -a $OUT
+ +
Other major changes to the configure script include:
+ +ABI 6 is now the default, intending that the existing ABI
+ 5 should build as before using the
+ “--with-abi-version=5
” option.
added --with-extra-suffix
option to help with
+ installing nonconflicting ncurses6 packages, e.g., avoiding
+ header- and library-conflicts.
NOTE: as a side-effect, this renames
+ ++++
adacurses-config
to +adacurses5-config
and
+adacursesw-config
to +adacursesw5-config
the configure script looks for gnatgcc if the Ada95 + binding is built, in preference to the default gcc/cc. The + script also ensures that the Ada95 binding is built with the + level of optimization as the C libraries.
+the configure script captures define's related to + -D_XOPEN_SOURCE from the configure check and adds those to + the *-config and *.pc files, to simplify use for the + wide-character libraries.
+There are several new (or extended) configure options:
+ +--disable-db-install
Do not install the terminal database. This is used to omit
+ features for packages, as done with
+ --without-progs
. The option simplifies building
+ cross-compile support packages.
--disable-gnat-projects
This option is used for regression testing
+--disable-lib-suffixes
Suppress the “w”, “t” or
+ “tw” suffixes which normally would be added to
+ the library names for the --enable-widec
and
+ --with-pthread
options.
--with-cxx-shared
When --with-shared
is set, build libncurses++
+ as a shared library. This implicitly relies upon building
+ with gcc/g++, since other compiler suites may have
+ differences in the way shared libraries are built. libtool by
+ the way has similar limitations.
--with-hashed-db
Extended this configure option to simplify building with + different versions of Berkeley database using FreeBSD + ports.
+--with-pc-suffix
If ".pc" files are installed, optionally add a suffix to + the files and corresponding package names to separate unusual + configurations. If no option value is given (or if it is + "none"), no suffix is added. This option is used in the test + package for ncurses6.
+--with-xterm-kbs
Configure xterm's terminfo entries to use either BS
+ (^H
, i.e., ASCII backspace) or DEL
+ (^?
, or 127).
Most of the portability-related work since + ncurses 5.9 extended and improved the MinGW port + introduced in + ncurses 5.8.
+ +The MinGW port can be readily cross-compiled:
+ +modified configure script to allow creating dll's for + MinGW when cross-compiling.
+enforced Windows-style path-separator if + cross-compiling,
+added scripts for test-builds of cross-compiled packages + for ncurses6 to MinGW.
+added pc-files to the MinGW cross-compiling + test-packages.
+added script for building test-packages of binaries + cross-compiled to MinGW using NSIS.
+added nc_mingw.h
to installed headers for
+ MinGW port; this is needed for cross-compiling ncurses-examples.
added test-packages for cross-compiling ncurses-examples + using the MinGW test-packages.
+The MinGW-specific Windows driver accounts for several + changes:
+ +wide-character display is made usable by replacing MinGW's
+ non-working wcrtomb
and wctomb
+ functions.
implemented some display features: beep, + flash, + + curs_set.
+the driver handles repainting on endwin/refresh + combination.
+modified treatment of TERM
variable for MinGW
+ port to allow explicit use of the Windows console driver by
+ checking if $TERM
is set to
+ “#win32console
” or an abbreviation
+ of that.
the Windows driver also matches the special
+ TERM
value “unknown”
the driver now returns characters for special keys, (like
+ ansi.sys
does), when keypad mode is off, rather
+ than returning nothing at all.
the driver checks a new environment variable
+ NCURSES_CONSOLE2 to optionally work around a deficiency
+ in Console2
(and its descendent
+ ConsoleZ
) which hang when an application creates
+ a console buffer.
Finally, there are other improvements:
+ +MinGW is one of the configurations where ncurses installs by default into /usr
+extend Windows support to work with MSYS2;
+ +this works with a scenario where there is an
+ ANSI-escape handler such as ansicon
running
+ in the console window.
isatty
calls with a macro, provide a
+ corresponding set of support routines to address
+ differences between MinGW and MSYS2.ensure WINVER
is defined in makefiles rather
+ than using headers.
add check for the gnatprep
+ “-T
” option.
work around a bug introduced by + gcc 4.8.1 in MinGW which breaks "trace" feature.
+add a driver-name method to each of the drivers.
+These changes affect certain platforms (ports):
+ +the configure script knows how to build shared libraries + with DragonFlyBSD and Interix.
+support for AIX shared libraries is improved, tested with + AIX 5.3, 6.1 and 7.1 with both gcc 4.2.4 and cc:
+ +the shared-library suffix for AIX 5 and 6 is now + ".so"
+the -brtl
option is used with AIX 5-7; it
+ is needed to link with the shared libraries.
the configure --enable-pc-files
option takes
+ into account the PKG_CONFIG_PATH
+ variable.
the configure option --with-pkg-config-libdir
+ provides control over the actual directory into which
+ pc-files are installed.
the build scripts add explicit -ltinfo, etc., to the
+ generated ".pc" file when ld
option
+ “--as-needed
” is used, or when
+ ncurses and tinfo are installed without using rpath.
the configure script disallows conflicting options
+ “--with-termlib
” and
+ “--enable-term-driver
”.
the check for missing c++ compiler to work when no error + is reported, and no variables set is improved (see note for + 20021206).
+the misc/gen_edit.sh script selects a "linux" entry which + works with the current kernel rather than assuming it is + always "linux3.0"
+the test/configure script makes it simpler to override + names of curses-related libraries, to help with linking with + pdcurses in MinGW environment.
+the configure-script/ifdef's allow the BSD OLD_TTY feature
+ to be suppressed if the type of ospeed
is
+ configured using the option --with-ospeed
to not
+ be a short
. By default, it is a
+ short
for termcap-compatibility.
the MKlib_gen.sh script works around a recent change in
+ gcc 5 (released mid-2015) which essentially
+ emits multiple #line
statements for the same
+ position in a file.
the configure script works with Minix3.2 (see note + on portability)
+OS/2 redux:
+ +the configure script supports OS/2 kLIBC.
+the --with-lib-prefix
option allows
+ configuring for old/new flavors of OS/2 EMX.
improved configure-script checks for
+ _XOPEN_SOURCE
:
the definition works starting with Solaris 10.
+the definition is suppressed for IRIX64, since its
+ header files have a conflict versus
+ _SGI_SOURCE
.
The ncurses package is fully + upward-compatible with SVr4 (System V Release 4) curses:
+ +All of the SVr4 calls have been implemented (and are + documented).
+ncurses supports all of the + for SVr4 curses features including keyboard mapping, color, + forms-drawing with ACS characters, and automatic recognition + of keypad and function keys.
+ncurses provides these SVr4 + add-on libraries (not part of X/Open Curses):
+ +the panels library, supporting a stack of windows with + backing store.
+the menus library, supporting a uniform but flexible + interface for menu programming.
+the form library, supporting data collection through + on-screen forms.
+ncurses's terminal database is + fully compatible with that used by SVr4 curses.
+ +It can be optionally configured to match the format + used in related systems such as AIX and Tru64.
+Alternatively, ncurses can + be configured to use hashed databases rather than the + directory of files used by SVr4 curses.
+The ncurses utilities have + options to allow you to filter terminfo entries for use with + less capable curses/terminfo versions such + as the HP/UX and AIX ports.
+The ncurses package also has many + useful extensions over SVr4:
+ +The API is 8-bit clean and base-level conformant with the + X/OPEN curses specification, XSI curses (that is, it + implements all BASE level features, and most EXTENDED + features). It includes many function calls not supported + under SVr4 curses (but portability of all calls is documented + so you can use the SVr4 subset only).
+Unlike SVr3 curses, ncurses + can write to the rightmost-bottommost corner of the screen if + your terminal has an insert-character capability.
+Ada95 and C++ bindings.
+Support for mouse event reporting with X Window xterm and + FreeBSD and OS/2 console windows.
+Extended mouse support via Alessandro Rubini's gpm + package.
+The function wresize
allows you to resize
+ windows, preserving their data.
The function use_default_colors
allows you to
+ use the terminal's default colors for the default color pair,
+ achieving the effect of transparent colors.
The functions keyok
and
+ define_key
allow you to better control the use
+ of function keys, e.g., disabling the ncurses KEY_MOUSE, or by defining more than
+ one control sequence to map to a given key code.
Support for 256-color terminals, such as modern xterm.
+Support for 16-color terminals, such as aixterm + and modern xterm.
+Better cursor-movement optimization. The package now + features a cursor-local-movement computation more efficient + than either BSD's or System V's.
+Super hardware scrolling support. The screen-update code
+ incorporates a novel, simple, and cheap algorithm that
+ enables it to make optimal use of hardware scrolling,
+ line-insertion, and line-deletion for screen-line movements.
+ This algorithm is more powerful than the 4.4BSD curses
+ quickch
routine.
Real support for terminals with the magic-cookie glitch. + The screen-update code will refrain from drawing a highlight + if the magic- cookie unattributed spaces required just before + the beginning and after the end would step on a non-space + character. It will automatically shift highlight boundaries + when doing so would make it possible to draw the highlight + without changing the visual appearance of the screen.
+It is possible to generate the library with a list of + pre-loaded fallback entries linked to it so that it can serve + those terminal types even when no terminfo tree or termcap + file is accessible (this may be useful for support of + screen-oriented programs that must run in single-user + mode).
+The tic/captoinfo + utility provided with ncurses has + the ability to translate many termcaps from the XENIX, IBM + and AT&T extension sets.
+A BSD-like tset + utility is provided.
+The ncurses library and + utilities will automatically read terminfo entries from + $HOME/.terminfo if it exists, and compile to that directory + if it exists and the user has no write access to the system + directory. This feature makes it easier for users to have + personal terminfo entries without giving up access to the + system terminfo directory.
+You may specify a path of directories to search for + compiled descriptions with the environment variable + TERMINFO_DIRS (this generalizes the feature provided by + TERMINFO under stock System V.)
+In terminfo source files, use capabilities may refer not + just to other entries in the same source file (as in System + V) but also to compiled entries in either the system terminfo + directory or the user's $HOME/.terminfo directory.
+The table-of-entries utility toe + makes it easy for users to see exactly what terminal types + are available on the system.
+The library meets the XSI requirement that every macro
+ entry point have a corresponding function which may be linked
+ (and will be prototype-checked) if the macro definition is
+ disabled with #undef
.
Extensive documentation is provided (see the + Additional Reading section of the + ncurses FAQ for online documentation).
+The ncurses distribution includes + a selection of test programs (including a few games). These are + available separately as ncurses-examples
+ +The ncurses library has been tested with a wide variety of + applications including:
+ +++ ++
+- cdk
+ +- +
+ +Curses Development Kit
+ + +- ded
+ +- +
+ +directory-editor
+ + +- dialog
+ +- +
+ +the underlying application used in Slackware's setup, + and the basis for similar install/configure applications on + many systems.
+ + +- lynx
+ +- +
+ +the text WWW browser
+ + +- Midnight Commander
+ +- +
+ +file manager
+ + +- mutt
+ +- +
+ +mail utility
+ + +- ncftp
+ +- +
+ +file-transfer utility
+ + +- nvi
+ +- +
+ +New vi uses ncurses.
+ + +- tin
+ +- +
+newsreader, supporting color, MIME
+ + +
as well as some that use ncurses + for the terminfo support alone:
+ +++ ++
+- minicom
+ +- +
+ +terminal emulator for serial modem connections
+ + +- mosh
+ +- +
+ +a replacement for
+ + +ssh
.- tack
+ +- +
+ +terminfo action checker
+ + +- tmux
+ +- +
+ +terminal multiplexor
+ + +- vile
+ +- +
+vi-like-emacs may be built to use the terminfo, termcap + or curses interfaces.
+ + +
and finally, those which use only the termcap interface:
+ +++ ++
+- emacs
+ +- +
+ +text editor
+ + +- screen
+ +- +
+ +terminal multiplexor
+ + +- vim
+ +- +
+text editor
+ + +
Zeyd Ben-Halim started ncurses + from a previous package pcurses, written by Pavel Curtis. Eric S. + Raymond continued development. Jürgen Pfeifer wrote most of + the form and menu libraries. Ongoing development work is done by + Thomas Dickey. + Thomas Dickey also acts as the maintainer for the Free Software + Foundation, which holds the copyright + on ncurses.
+ +Contact the current maintainers at
+ ++ bug-ncurses@gnu.org ++ +
To join the ncurses mailing list, please write email to
+ ++ bug-ncurses-request@gnu.org +containing the line: + +
++ ++
subscribe
+ <name>@<host.domain>
This list is open to anyone interested in helping with the + development and testing of this package.
+ +Beta versions of ncurses and + patches to the current release are made available at
+ ++ ++ +
There is an archive of the mailing list here:
+ +++ +http://lists.gnu.org/archive/html/bug-ncurses + (also https)
+
The release notes make scattered references to these pages, + which may be interesting by themselves:
+ +The distribution provides a newer version of the + terminfo-format terminal description file once maintained by + Eric + Raymond . Unlike the older version, the termcap and + terminfo data are provided in the same file, and provides several + user-definable extensions beyond the X/Open specification.
+ +You can find lots of information on terminal-related topics + not covered in the terminfo file at + Richard Shuford's archive .
+ + + +