http://invisible-island.net/ncurses/announce
The ncurses (new curses) library is a free software emulation of curses in System V Release 4.0, 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 SYSV-curses enhancements over BSD curses.
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://invisible-island.net/ncurses.
This release is designed to be upward compatible from ncurses 5.0 and 5.1; very few applications will require recompilation, depending on the platform. These are the highlights from the change-log since ncurses 5.1 release.
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.New features and improvements:
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.Major bug fixes:
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
.Portability:
$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.The ncurses package is fully compatible with SVr4 (System V Release 4) curses:
The ncurses package also has many useful extensions over SVr4:
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
.Numerous bugs present in earlier versions have been fixed; the library is far more reliable than it used to be. Bounds checking in many `dangerous' entry points has been improved. The code is now type-safe according to gcc -Wall. The library has been checked for malloc leaks and arena corruption by the Purify memory-allocation tester.
The ncurses code has been tested with a wide variety of applications including (versions starting with those noted):
as well as some that use ncurses for the terminfo support alone:
The ncurses distribution includes a selection of test programs (including a few games).
The original developers of ncurses are Zeyd Ben-Halim and Eric S. Raymond. Ongoing work is being done by Thomas Dickey and Jürgen Pfeifer. Thomas Dickey acts as the maintainer for the Free Software Foundation, which holds the copyright on ncurses. Contact the current maintainers at [email protected].
To join the ncurses mailing list, please write email to [email protected]
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://ftp.invisible-island.net/ncurses.
We need people to help with these projects. If you are interested in working on them, please join the ncurses list.
The distribution includes and uses a version of the terminfo-format terminal description file maintained by Eric Raymond. http://earthspace.net/~esr/terminfo.
You can find lots of information on terminal-related topics not covered in the terminfo file at Richard Shuford's archive.