<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">
<!--
  $Id: announce.html,v 1.52 2008/11/02 01:05:08 tom Exp $
  ****************************************************************************
  * Copyright (c) 1998-2006,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.                                                           *
  ****************************************************************************
-->
<HTML>
<HEAD>
<TITLE>Announcing ncurses 5.7</TITLE>
<link rev=made href="mailto:bug-ncurses@gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</HEAD>
<BODY>

<H1>Announcing ncurses 5.7</H1>

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

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

The ncurses code was developed under GNU/Linux.
It has been in use for some time with OpenBSD as the system curses library,
and on FreeBSD and NetBSD as an external package.
It should port easily to any ANSI/POSIX-conforming UNIX.
It has even been ported to OS/2 Warp!<P>

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

The ncurses distribution is available via anonymous FTP at
the GNU distribution site
<A HREF="ftp://ftp.gnu.org/gnu/ncurses/">ftp://ftp.gnu.org/gnu/ncurses/</A>&nbsp;.
<br>It is also available at
<A HREF="ftp://invisible-island.net/ncurses/">ftp://invisible-island.net/ncurses/</A>&nbsp;.

<H1>Release Notes</H1>

This release is designed to be upward compatible from ncurses 5.0 through 5.6;
very few applications will require recompilation, depending on the platform.
These are the highlights from the change-log since ncurses 5.6 release.
<p>
Interface changes:
<ul>
	<li>generate linkable stubs for some macros:
	<br>
	  getattrs

</ul>
New features and improvements:
<ul>
        <li>library
	<ul>
		<li>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.<br>
		    (This is <em>API</em>-compatible,
		     but not <em>ABI</em>-compatible with the normal library).

		<li>add <code>NCURSES_OPAQUE</code> symbol to curses.h, will
		    use to make structs opaque in selected configurations.

		<li>add <code>NCURSES_EXT_FUNCS</code> and
		    <code>NCURSES_EXT_COLORS</code> symbols to curses.h to make
		    it simpler to tell if the extended functions and/or colors
		    are declared.

		<li>add wresize() to C++ binding 

		<li>eliminate fixed-buffer vsprintf() calls in C++ binding.

		<li>add several functions to C++ binding which wrap C functions
		    that pass a WINDOW* parameter.

		<li>adapt mouse-handling code from menu library in form-library

		<li>improve tracing for form library, showing created forms,
		    fields, etc.

		<li>make $NCURSES_NO_PADDING feature work for termcap interface .

		<li>add check to trace-file open, if the given name is a
		    directory, add ".log" to the name and try again.

		<li>several new manpages:  curs_legacy.3x, curs_memleaks.3x,
		    curs_opaque.3x and curs_threads.3x
	</ul>

        <li>programs:
	<ul>
		<li>modified three test-programs to demonstrate the threading
		    support in this version: ditto, rain, worm.

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

		<li>add <code>adacurses-config</code> to the Ada95 install.

		<li>modify tic <code>-f</code> option to format spaces as
		    <code>\s</code> to prevent them from being lost when that
		    is read back in unformatted strings.

		<li>The <code>tack</code> program is now distributed separately
		    from ncurses.
	</ul>

	<li>terminal database
	<ul>
	    <li>added entries:
		<ul>
		<li><code>Eterm-256color</code>,
		    <code>Eterm-88color</code> and
		    <code>rxvt-88color</code>
		<li><code>aterm</code>
		<li><code>konsole-256color</code>
		<li><code>mrxvt</code>
		<li><code>screen.mlterm</code>
		<li><code>screen.rxvt</code>
		<li><code>teraterm4.59</code> is now the primary primary
		    teraterm entry, renamed original to
		    <code>teraterm2.3</code>
		<li><code>9term</code> terminal
		<li>Newbury Data entries
		</ul>
	    <li>updated/improved entries:
		<ul>
	        <li><code>gnome</code> to version 2.22.3
		<li><code>h19</code>, <code>z100</code>
		<li><code>konsole</code> to version 1.6.6
		<li><code>mlterm</code>, <code>mlterm+pcfkeys</code>
		<li><code>xterm</code>, and building-blocks for function-keys
		    to <a href="http://invisible-island.net/xterm/xterm.log.html#xterm_230">xterm patch #230</a>.
		</ul>
	</ul>
</ul>
Major bug fixes:
<ul>
	<li>add logic to tic for cancelling strings in user-defined
	    capabilities
	    (this is <em>needed</em> for
	     current <code>konsole</code> terminfo entry).

	<li>modify <code>mk-1st.awk</code> 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., <code>libncurses.so</code> by
	    <code>/bin/sh</code>.

	<li>correct check for notimeout() in wgetch().

	<li>fix a sign-extension bug in infocmp's repair_acsc() function.

	<li>change winnstr() to stop at the end of the line.

	<li>make Ada95 demo_panels() example work.

	<li>fix for adding a non-spacing character at the beginning of a line.

	<li>fill in extended-color pair to make colors work
	    for wide-characters using extended-colors.

	<li>improve refresh of window on top of multi-column characters,
	    taking into account split characters on left/right window
	    boundaries.

	<li>modify <code>win_wchnstr()</code> to ensure that only a base cell
	    is returned for each multi-column character.

	<li>improve <code>waddch()</code> and <code>winsch()</code> handling of
	    EILSEQ from <code>mbrtowc()</code> by using <code>unctrl()</code>
	    to display illegal bytes rather than trying to append further bytes
	    to make up a valid sequence.

	<li>restore <code>curs_set()</code> state after
	    <code>endwin()</code>/<code>refresh()</code>

	<li>modify <code>keyname()</code> to use "^X" form only if
	    <code>meta()</code> has been called, or if <code>keyname()</code>
	    is called without initializing curses, e.g., via
	    <code>initscr()</code> or <code>newterm()</code>.

	<li>modify <code>unctrl()</code> to check codes in 128-255 range versus
	    <code>isprint()</code>.
	    If they are not printable, and locale was set, use a "M-" or "~"
	    sequence.

	<li>improve <code>resizeterm()</code> by moving ripped-off lines, and
	    repainting the soft-keys.

	<li>modify form library to accept control characters such as newline
	    in set_field_buffer(), which is compatible with Solaris.

	<li>use <code>NCURSES_MOUSE_MASK()</code> in definition of
	    <code>BUTTON_RELEASE()</code>, etc., to make those work properly
	    with the <code>--enable-ext-mouse</code> configuration

	<li>correct some functions in Ada95 binding which were using return
	    value from C where none was returned.

	<li>reviewed/fixed issues reported by Coverity and Klocwork tools.
</ul>

Portability:
<ul>
        <li>configure script:
          <ul>
          <li>new options:
            <dl>

	    <dt>--disable-big-strings
	    <dd>control whether static string tables are generated as single
	        large strings (to improve startup performance), or as array
		of individual strings.

	    <dt>--disable-relink
	    <dd>control whether shared libraries are relinked (during install)
		when rpath is enabled.

	    <dt>--disable-tic-depends
	    <dd>make explicit whether tic library depends on ncurses/ncursesw
	        library.

	    <dt>--enable-mixed-case
	    <dd>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

	    <dt>--enable-reentrant
	    <dd>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).

	    <dt>--enable-weak-symbols
	    <dd>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).

	    <dt>--with-pthread
	    <dd>build with the POSIX thread library (tested with AIX,
	        Linux, FreeBSD, OpenBSD, HPUX, IRIX64, Solaris, Tru64).

	    <dt>--with-ticlib
	    <dd>build/install the tic-support functions in a separate library

            </dl>

	  <li>improved options:
	    <dl>

	    <dt>--enable-ext-colors
	    <dd>requires the wide-character configuration.

	    <dt>--with-chtype
	    <dd>ignore option value "unsigned" is always added to
		the type in curses.h; do the same for --with-mmask-t.

	    <dt>--with-dmalloc
	    <dd>build-fix for redefinition of <code>strndup</code>.

	    <dt>--with-hashed-db
	    <dd>accepts a parameter which is the install-prefix of a given
	        Berkeley Database.

	    <dt>--with-hashed-db
	    <dd>the $LIBS environment variable overrides the search for the db
		library.

	    <dt>--without-hashed-db
	    <dd>assumed when "--disable-database" is used.

	    </dl>

	</ul>

	<li>other configure/build issues:
	  <ul>
	  <li>build-fixes for LynxOS
	  <li>modify shared-library rules to allow FreeBSD 3.x to use rpath.
	  <li>build-fix for FreeBSD "contemporary" TTY interface.
	  <li>build-fixes for AIX with libtool.
	  <li>build-fixes for Darwin and libtool.
	  <li>modify BeOS-specific ifdef's to build on Haiku.
	  <li>corrected gcc options for building shared libraries on Solaris
	      and IRIX64.
	  <li>change shared-library configuration for OpenBSD, make rpath work.
	  <li>build-fixes for using libutf8, e.g., on OpenBSD 3.7
	  <li>add "-e" option in ncurses/Makefile.in when generating source-files
	      to force earlier exit if the build environment fails unexpectedly.
	  <li>add support for shared libraries for QNX.
	  <li>change delimiter in <code>MKlib_gen.sh</code> from '%' to '@', to
	      avoid substitution by IBM xlc to '#' as part of its extensions to
	      digraphs.
	</ul>

	<li>library:
	<ul>
	<li>rewrite wrapper for <code>wcrtomb()</code>, making it work on
	    Solaris.  This is used in the form library to determine the length
	    of the buffer needed by <code>field_buffer</code>.
	<li>add/use configure script macro CF_SIG_ATOMIC_T, use the corresponding
	    type for data manipulated by signal handlers.
	<li>set locale in misc/ncurses-config.in since it uses a range
	<li>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.
	<li>reset mouse file-descriptor when unloading GPM library.
	</ul>

	<li>test programs:
	<ul>
	<li>update test programs to build/work with various UNIX curses for
	    comparisons.
	</ul>
</ul>

<H1>Features of Ncurses</H1>

The ncurses package is fully compatible with SVr4 (System V Release 4) curses:

<UL>
<LI>All 257 of the SVr4 calls have been implemented (and are documented).
<LI>Full support for SVr4 curses features including keyboard mapping, color,
forms-drawing with ACS characters, and automatic recognition of keypad
and function keys.
<LI>An emulation of the SVr4 panels library, supporting
a stack of windows with backing store, is included.
<LI>An emulation of the SVr4 menus library, supporting
a uniform but flexible interface for menu programming, is included.
<LI>An emulation of the SVr4 form library, supporting
data collection through on-screen forms, is included.
<LI>Binary terminfo entries generated by the ncurses tic(1) implementation
are bit-for-bit-compatible with the entry format SVr4 curses uses.
<LI>The utilities have options to allow you to filter terminfo
entries for use with less capable <STRONG>curses</STRONG>/<STRONG>terminfo</STRONG>
versions such as the HP/UX and AIX ports.</UL>

The ncurses package also has many useful extensions over SVr4:

<UL>
<LI>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).
<LI>Unlike SVr3 curses, ncurses can write to the rightmost-bottommost corner
of the screen if your terminal has an insert-character capability.
<LI>Ada95 and C++ bindings.
<LI>Support for mouse event reporting with X Window xterm
and FreeBSD and OS/2 console windows.
<LI>Extended mouse support via Alessandro Rubini's gpm package.
<LI>The function <CODE>wresize()</CODE> allows you to resize windows, preserving
their data.
<LI>The function <CODE>use_default_colors()</CODE> allows you to
use the terminal's default colors for the default color pair,
achieving the effect of transparent colors.
<LI>The functions <CODE>keyok()</CODE>
and <CODE>define_key()</CODE> 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.
<LI>Support for 256-color terminals, such as modern xterm, when configured
using the <code>--enable-ext-colors</code> option.
<LI>Support for 16-color terminals, such as aixterm and modern xterm.
<LI>Better cursor-movement optimization.  The package now features a
cursor-local-movement computation more efficient than either BSD's
or System V's.
<LI>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.
<LI>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.
<LI>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).
<LI>The tic(1)/captoinfo utility provided with ncurses has the
ability to translate many termcaps from the XENIX, IBM and
AT&amp;T extension sets.
<LI>A BSD-like tset(1) utility is provided.
<LI>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.
<LI>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.)
<LI>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.
<LI>A script (<STRONG>capconvert</STRONG>) is provided to help BSD users
transition from termcap to terminfo.  It gathers the information in a
TERMCAP environment variable and/or a ~/.termcap local entries file
and converts it to an equivalent local terminfo tree under $HOME/.terminfo.
<LI>Automatic fallback to the /etc/termcap file can be compiled in
when it is not possible to build a terminfo tree.  This feature is neither
fast nor cheap, you don't want to use it unless you have to,
but it's there.
<LI>The table-of-entries utility <STRONG>toe</STRONG> makes it easy for users to
see exactly what terminal types are available on the system.
<LI>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
<CODE>#undef</CODE>.
<LI>An HTML "Introduction to Programming with NCURSES" document provides
a narrative introduction to the curses programming interface.
</UL>

<H1>State of the Package</H1>

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

The ncurses code has been tested with a wide variety of applications
including (versions starting with those noted):
<DL>
<DT> cdk
<DD> Curses Development Kit
<br>
<A HREF="http://invisible-island.net/cdk/">http://invisible-island.net/cdk/</A>
<br>
<A HREF="http://www.vexus.ca/products/CDK/">http://www.vexus.ca/products/CDK/</a>
<DT> ded
<DD> directory-editor
<br>
<A HREF="http://invisible-island.net/ded/">http://invisible-island.net/ded/</A>
<DT> dialog
<DD> the underlying application used in Slackware's setup, and the basis
for similar applications on GNU/Linux.
<br>
<A HREF="http://invisible-island.net/dialog/">http://invisible-island.net/dialog/</A>
<DT> lynx
<DD> the character-screen WWW browser
<br>
<A HREF="http://lynx.isc.org/release/">http://lynx.isc.org/release/</A>
<DT> Midnight Commander
<DD> file manager
<br>
<A HREF="http://www.ibiblio.org/mc/">http://www.ibiblio.org/mc/</A>
<DT> mutt
<DD> mail utility
<br>
<A HREF="http://www.mutt.org/">http://www.mutt.org/</A>
<DT> ncftp
<DD> file-transfer utility
<br>
<A HREF="http://www.ncftp.com/">http://www.ncftp.com/</A>
<DT> nvi
<DD> New vi versions 1.50 are able to use ncurses versions 1.9.7 and later.
<br>
<A HREF="http://www.bostic.com/vi/">http://www.bostic.com/vi/</A>
<br>
<DT> pinfo
<DD> Lynx-like info browser.
<A HREF="https://alioth.debian.org/projects/pinfo/">https://alioth.debian.org/projects/pinfo/</A>
<DT> tin
<DD> newsreader, supporting color, MIME
<A HREF="http://www.tin.org/">http://www.tin.org/</A>
</DL>
as well as some that use ncurses for the terminfo support alone:
<DL>
<DT> minicom
<DD> terminal emulator
<br>
<A HREF="http://alioth.debian.org/projects/minicom/">
http://alioth.debian.org/projects/minicom/</A>
<DT> vile
<DD> vi-like-emacs
<br>
<A HREF="http://invisible-island.net/vile/">http://invisible-island.net/vile/</A>
</DL>
<P>

The ncurses distribution includes a selection of test programs (including
a few games).

<H2>Who's Who and What's What</H2>

Zeyd Ben-Halim
started it from a previous package pcurses, written by Pavel Curtis.
Eric S. Raymond
continued development.
J&uuml;rgen Pfeifer wrote most of the form and menu libraries.
Ongoing work is being done by
<A HREF="mailto:dickey@invisible-island.net">Thomas Dickey</A>.
Thomas Dickey
acts as the maintainer for the Free Software Foundation,
which holds the copyright on ncurses.
Contact the current maintainers at
<A HREF="mailto:bug-ncurses@gnu.org">bug-ncurses@gnu.org</A>.
<P>

To join the ncurses mailing list, please write email to
<CODE>bug-ncurses-request@gnu.org</CODE> containing the line:
<PRE>
             subscribe &lt;name&gt;@&lt;host.domain&gt;
</PRE>

This list is open to anyone interested in helping with the development and
testing of this package.<P>

Beta versions of ncurses and patches to the current release are made available at
<A HREF="ftp://invisible-island.net/ncurses/">ftp://invisible-island.net/ncurses/</A>&nbsp;.

<H2>Future Plans</H2>
<UL>
<LI>Extended-level XPG4 conformance, with internationalization support.
<LI>Ports to more systems, including DOS and Windows.
</UL>
We need people to help with these projects.  If you are interested in working
on them, please join the ncurses list.

<H2>Other Related Resources</H2>

The distribution provides a newer version of the terminfo-format
terminal description file once maintained by
<A HREF="http://www.catb.org/~esr/terminfo/">Eric Raymond</A>&nbsp;.
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.<P>

You can find lots of information on terminal-related topics
not covered in the terminfo file at
<A HREF="http://www.cs.utk.edu/~shuford/terminal_index.html">Richard Shuford's
archive</A>&nbsp;.
</BODY>
</HTML>
<!--
# The following sets edit modes for GNU EMACS
# Local Variables:
# mode:html
# case-fold-search:nil
# fill-column:70
# End:
-->
