1<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">
2<!--
3  $Id: announce.html.in,v 1.70 2008/11/02 01:03:05 tom Exp $
4  ****************************************************************************
5  * Copyright (c) 1998-2006,2008 Free Software Foundation, Inc.              *
6  *                                                                          *
7  * Permission is hereby granted, free of charge, to any person obtaining a  *
8  * copy of this software and associated documentation files (the            *
9  * "Software"), to deal in the Software without restriction, including      *
10  * without limitation the rights to use, copy, modify, merge, publish,      *
11  * distribute, distribute with modifications, sublicense, and/or sell       *
12  * copies of the Software, and to permit persons to whom the Software is    *
13  * furnished to do so, subject to the following conditions:                 *
14  *                                                                          *
15  * The above copyright notice and this permission notice shall be included  *
16  * in all copies or substantial portions of the Software.                   *
17  *                                                                          *
18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
19  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
20  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
21  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
22  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
23  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
24  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
25  *                                                                          *
26  * Except as contained in this notice, the name(s) of the above copyright   *
27  * holders shall not be used in advertising or otherwise to promote the     *
28  * sale, use or other dealings in this Software without prior written       *
29  * authorization.                                                           *
30  ****************************************************************************
31-->
32<HTML>
33<HEAD>
34<TITLE>Announcing ncurses @VERSION@</TITLE>
35<link rev=made href="mailto:bug-ncurses@gnu.org">
36<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
37</HEAD>
38<BODY>
39
40<H1>Announcing ncurses @VERSION@</H1>
41
42The ncurses (new curses) library is a free software emulation of
43curses in System V Release 4.0, and more.  It uses terminfo format,
44supports pads and color
45and multiple highlights and forms characters and function-key mapping,
46and has all the other SYSV-curses enhancements over BSD curses.<P>
47
48In mid-June 1995, the maintainer of 4.4BSD curses declared that he
49considered 4.4BSD curses obsolete, and encouraged the keepers of
50Unix releases such as BSD/OS, FreeBSD and NetBSD to switch over to
51ncurses.<P>
52
53The ncurses code was developed under GNU/Linux.
54It has been in use for some time with OpenBSD as the system curses library,
55and on FreeBSD and NetBSD as an external package.
56It should port easily to any ANSI/POSIX-conforming UNIX.
57It has even been ported to OS/2 Warp!<P>
58
59The distribution includes the library and support utilities, including a
60terminfo compiler tic(1), a decompiler infocmp(1), clear(1), tput(1), tset(1),
61and a termcap conversion tool captoinfo(1).  Full manual pages are provided for
62the library and tools.<P>
63
64The ncurses distribution is available via anonymous FTP at
65the GNU distribution site
66<A HREF="ftp://ftp.gnu.org/gnu/ncurses/">ftp://ftp.gnu.org/gnu/ncurses/</A>&nbsp;.
67<br>It is also available at
68<A HREF="ftp://invisible-island.net/ncurses/">ftp://invisible-island.net/ncurses/</A>&nbsp;.
69
70<H1>Release Notes</H1>
71
72This release is designed to be upward compatible from ncurses 5.0 through 5.6;
73very few applications will require recompilation, depending on the platform.
74These are the highlights from the change-log since ncurses 5.6 release.
75<p>
76Interface changes:
77<ul>
78	<li>generate linkable stubs for some macros:
79	<br>
80	  getattrs
81
82</ul>
83New features and improvements:
84<ul>
85        <li>library
86	<ul>
87		<li>new flavor of the ncurses library provides rudimentary
88		    support for POSIX threads.  Several functions are
89		    reentrant, but most require either a window-level or
90		    screen-level mutex.<br>
91		    (This is <em>API</em>-compatible,
92		     but not <em>ABI</em>-compatible with the normal library).
93
94		<li>add <code>NCURSES_OPAQUE</code> symbol to curses.h, will
95		    use to make structs opaque in selected configurations.
96
97		<li>add <code>NCURSES_EXT_FUNCS</code> and
98		    <code>NCURSES_EXT_COLORS</code> symbols to curses.h to make
99		    it simpler to tell if the extended functions and/or colors
100		    are declared.
101
102		<li>add wresize() to C++ binding 
103
104		<li>eliminate fixed-buffer vsprintf() calls in C++ binding.
105
106		<li>add several functions to C++ binding which wrap C functions
107		    that pass a WINDOW* parameter.
108
109		<li>adapt mouse-handling code from menu library in form-library
110
111		<li>improve tracing for form library, showing created forms,
112		    fields, etc.
113
114		<li>make $NCURSES_NO_PADDING feature work for termcap interface .
115
116		<li>add check to trace-file open, if the given name is a
117		    directory, add ".log" to the name and try again.
118
119		<li>several new manpages:  curs_legacy.3x, curs_memleaks.3x,
120		    curs_opaque.3x and curs_threads.3x
121	</ul>
122
123        <li>programs:
124	<ul>
125		<li>modified three test-programs to demonstrate the threading
126		    support in this version: ditto, rain, worm.
127
128		<li>several new test-programs: demo_panels, dots_mvcur,
129		    inch_wide, inchs, key_name, key_names, savescreen,
130		    savescreen.sh test_arrays, test_get_wstr, test_getstr,
131		    test_instr, test_inwstr and test_opaque.
132
133		<li>add <code>adacurses-config</code> to the Ada95 install.
134
135		<li>modify tic <code>-f</code> option to format spaces as
136		    <code>\s</code> to prevent them from being lost when that
137		    is read back in unformatted strings.
138
139		<li>The <code>tack</code> program is now distributed separately
140		    from ncurses.
141	</ul>
142
143	<li>terminal database
144	<ul>
145	    <li>added entries:
146		<ul>
147		<li><code>Eterm-256color</code>,
148		    <code>Eterm-88color</code> and
149		    <code>rxvt-88color</code>
150		<li><code>aterm</code>
151		<li><code>konsole-256color</code>
152		<li><code>mrxvt</code>
153		<li><code>screen.mlterm</code>
154		<li><code>screen.rxvt</code>
155		<li><code>teraterm4.59</code> is now the primary primary
156		    teraterm entry, renamed original to
157		    <code>teraterm2.3</code>
158		<li><code>9term</code> terminal
159		<li>Newbury Data entries
160		</ul>
161	    <li>updated/improved entries:
162		<ul>
163	        <li><code>gnome</code> to version 2.22.3
164		<li><code>h19</code>, <code>z100</code>
165		<li><code>konsole</code> to version 1.6.6
166		<li><code>mlterm</code>, <code>mlterm+pcfkeys</code>
167		<li><code>xterm</code>, and building-blocks for function-keys
168		    to <a href="http://invisible-island.net/xterm/xterm.log.html#xterm_230">xterm patch #230</a>.
169		</ul>
170	</ul>
171</ul>
172Major bug fixes:
173<ul>
174	<li>add logic to tic for cancelling strings in user-defined
175	    capabilities
176	    (this is <em>needed</em> for
177	     current <code>konsole</code> terminfo entry).
178
179	<li>modify <code>mk-1st.awk</code> so the generated makefile rules for
180	    linking or installing shared libraries do not first remove the
181	    library, in case it is in use, e.g., <code>libncurses.so</code> by
182	    <code>/bin/sh</code>.
183
184	<li>correct check for notimeout() in wgetch().
185
186	<li>fix a sign-extension bug in infocmp's repair_acsc() function.
187
188	<li>change winnstr() to stop at the end of the line.
189
190	<li>make Ada95 demo_panels() example work.
191
192	<li>fix for adding a non-spacing character at the beginning of a line.
193
194	<li>fill in extended-color pair to make colors work
195	    for wide-characters using extended-colors.
196
197	<li>improve refresh of window on top of multi-column characters,
198	    taking into account split characters on left/right window
199	    boundaries.
200
201	<li>modify <code>win_wchnstr()</code> to ensure that only a base cell
202	    is returned for each multi-column character.
203
204	<li>improve <code>waddch()</code> and <code>winsch()</code> handling of
205	    EILSEQ from <code>mbrtowc()</code> by using <code>unctrl()</code>
206	    to display illegal bytes rather than trying to append further bytes
207	    to make up a valid sequence.
208
209	<li>restore <code>curs_set()</code> state after
210	    <code>endwin()</code>/<code>refresh()</code>
211
212	<li>modify <code>keyname()</code> to use "^X" form only if
213	    <code>meta()</code> has been called, or if <code>keyname()</code>
214	    is called without initializing curses, e.g., via
215	    <code>initscr()</code> or <code>newterm()</code>.
216
217	<li>modify <code>unctrl()</code> to check codes in 128-255 range versus
218	    <code>isprint()</code>.
219	    If they are not printable, and locale was set, use a "M-" or "~"
220	    sequence.
221
222	<li>improve <code>resizeterm()</code> by moving ripped-off lines, and
223	    repainting the soft-keys.
224
225	<li>modify form library to accept control characters such as newline
226	    in set_field_buffer(), which is compatible with Solaris.
227
228	<li>use <code>NCURSES_MOUSE_MASK()</code> in definition of
229	    <code>BUTTON_RELEASE()</code>, etc., to make those work properly
230	    with the <code>--enable-ext-mouse</code> configuration
231
232	<li>correct some functions in Ada95 binding which were using return
233	    value from C where none was returned.
234
235	<li>reviewed/fixed issues reported by Coverity and Klocwork tools.
236</ul>
237
238Portability:
239<ul>
240        <li>configure script:
241          <ul>
242          <li>new options:
243            <dl>
244
245	    <dt>--disable-big-strings
246	    <dd>control whether static string tables are generated as single
247	        large strings (to improve startup performance), or as array
248		of individual strings.
249
250	    <dt>--disable-relink
251	    <dd>control whether shared libraries are relinked (during install)
252		when rpath is enabled.
253
254	    <dt>--disable-tic-depends
255	    <dd>make explicit whether tic library depends on ncurses/ncursesw
256	        library.
257
258	    <dt>--enable-mixed-case
259	    <dd>override the configure script's check if the filesystem
260		supports mixed-case filenames.
261	        This allows one to control how the terminal database
262		maps to the filesystem.
263		For filesystems that do not support mixed-case, the library
264		uses generate 2-character (hexadecimal) codes for the
265		lower-level of the filesystem terminfo database
266
267	    <dt>--enable-reentrant
268	    <dd>builds a different flavor of the ncurses library (ncursest)
269	        which improves reentrant use of the
270		library by reducing global and static variables
271	        (see the "--with-pthread" option for the threaded support).
272
273	    <dt>--enable-weak-symbols
274	    <dd>use weak-symbols for linking to the POSIX thread library,
275	        and use the same soname for the ncurses shared library
276		as the normal library (caveat: the ABI is for the threaded
277		library, which makes global data accessed via functions).
278
279	    <dt>--with-pthread
280	    <dd>build with the POSIX thread library (tested with AIX,
281	        Linux, FreeBSD, OpenBSD, HPUX, IRIX64, Solaris, Tru64).
282
283	    <dt>--with-ticlib
284	    <dd>build/install the tic-support functions in a separate library
285
286            </dl>
287
288	  <li>improved options:
289	    <dl>
290
291	    <dt>--enable-ext-colors
292	    <dd>requires the wide-character configuration.
293
294	    <dt>--with-chtype
295	    <dd>ignore option value "unsigned" is always added to
296		the type in curses.h; do the same for --with-mmask-t.
297
298	    <dt>--with-dmalloc
299	    <dd>build-fix for redefinition of <code>strndup</code>.
300
301	    <dt>--with-hashed-db
302	    <dd>accepts a parameter which is the install-prefix of a given
303	        Berkeley Database.
304
305	    <dt>--with-hashed-db
306	    <dd>the $LIBS environment variable overrides the search for the db
307		library.
308
309	    <dt>--without-hashed-db
310	    <dd>assumed when "--disable-database" is used.
311
312	    </dl>
313
314	</ul>
315
316	<li>other configure/build issues:
317	  <ul>
318	  <li>build-fixes for LynxOS
319	  <li>modify shared-library rules to allow FreeBSD 3.x to use rpath.
320	  <li>build-fix for FreeBSD "contemporary" TTY interface.
321	  <li>build-fixes for AIX with libtool.
322	  <li>build-fixes for Darwin and libtool.
323	  <li>modify BeOS-specific ifdef's to build on Haiku.
324	  <li>corrected gcc options for building shared libraries on Solaris
325	      and IRIX64.
326	  <li>change shared-library configuration for OpenBSD, make rpath work.
327	  <li>build-fixes for using libutf8, e.g., on OpenBSD 3.7
328	  <li>add "-e" option in ncurses/Makefile.in when generating source-files
329	      to force earlier exit if the build environment fails unexpectedly.
330	  <li>add support for shared libraries for QNX.
331	  <li>change delimiter in <code>MKlib_gen.sh</code> from '%' to '@', to
332	      avoid substitution by IBM xlc to '#' as part of its extensions to
333	      digraphs.
334	</ul>
335
336	<li>library:
337	<ul>
338	<li>rewrite wrapper for <code>wcrtomb()</code>, making it work on
339	    Solaris.  This is used in the form library to determine the length
340	    of the buffer needed by <code>field_buffer</code>.
341	<li>add/use configure script macro CF_SIG_ATOMIC_T, use the corresponding
342	    type for data manipulated by signal handlers.
343	<li>set locale in misc/ncurses-config.in since it uses a range
344	<li>disable GPM mouse support when $TERM does not happen to contain
345	    "linux", since Gpm_Open() no longer limits its assertion to terminals
346	    that it might handle, e.g., within "screen" in xterm.
347	<li>reset mouse file-descriptor when unloading GPM library.
348	</ul>
349
350	<li>test programs:
351	<ul>
352	<li>update test programs to build/work with various UNIX curses for
353	    comparisons.
354	</ul>
355</ul>
356
357<H1>Features of Ncurses</H1>
358
359The ncurses package is fully compatible with SVr4 (System V Release 4) curses:
360
361<UL>
362<LI>All 257 of the SVr4 calls have been implemented (and are documented).
363<LI>Full support for SVr4 curses features including keyboard mapping, color,
364forms-drawing with ACS characters, and automatic recognition of keypad
365and function keys.
366<LI>An emulation of the SVr4 panels library, supporting
367a stack of windows with backing store, is included.
368<LI>An emulation of the SVr4 menus library, supporting
369a uniform but flexible interface for menu programming, is included.
370<LI>An emulation of the SVr4 form library, supporting
371data collection through on-screen forms, is included.
372<LI>Binary terminfo entries generated by the ncurses tic(1) implementation
373are bit-for-bit-compatible with the entry format SVr4 curses uses.
374<LI>The utilities have options to allow you to filter terminfo
375entries for use with less capable <STRONG>curses</STRONG>/<STRONG>terminfo</STRONG>
376versions such as the HP/UX and AIX ports.</UL>
377
378The ncurses package also has many useful extensions over SVr4:
379
380<UL>
381<LI>The API is 8-bit clean and base-level conformant with the X/OPEN curses
382specification, XSI curses (that is, it implements all BASE level features,
383and most EXTENDED features).
384It includes many function calls not supported under SVr4 curses
385(but portability of all
386calls is documented so you can use the SVr4 subset only).
387<LI>Unlike SVr3 curses, ncurses can write to the rightmost-bottommost corner
388of the screen if your terminal has an insert-character capability.
389<LI>Ada95 and C++ bindings.
390<LI>Support for mouse event reporting with X Window xterm
391and FreeBSD and OS/2 console windows.
392<LI>Extended mouse support via Alessandro Rubini's gpm package.
393<LI>The function <CODE>wresize()</CODE> allows you to resize windows, preserving
394their data.
395<LI>The function <CODE>use_default_colors()</CODE> allows you to
396use the terminal's default colors for the default color pair,
397achieving the effect of transparent colors.
398<LI>The functions <CODE>keyok()</CODE>
399and <CODE>define_key()</CODE> allow
400you to better control the use of function keys,
401e.g., disabling the ncurses KEY_MOUSE,
402or by defining more than one control sequence to map to a given key code.
403<LI>Support for 256-color terminals, such as modern xterm, when configured
404using the <code>--enable-ext-colors</code> option.
405<LI>Support for 16-color terminals, such as aixterm and modern xterm.
406<LI>Better cursor-movement optimization.  The package now features a
407cursor-local-movement computation more efficient than either BSD's
408or System V's.
409<LI>Super hardware scrolling support.  The screen-update code incorporates
410a novel, simple, and cheap algorithm that enables it to make optimal
411use of hardware scrolling, line-insertion, and line-deletion
412for screen-line movements.  This algorithm is more powerful than
413the 4.4BSD curses quickch() routine.
414<LI>Real support for terminals with the magic-cookie glitch.  The
415screen-update code will refrain from drawing a highlight if the magic-
416cookie unattributed spaces required just before the beginning and
417after the end would step on a non-space character.  It will
418automatically shift highlight boundaries when doing so would make it
419possible to draw the highlight without changing the visual appearance
420of the screen.
421<LI>It is possible to generate the library with a list of pre-loaded
422fallback entries linked to it so that it can serve those terminal types even
423when no terminfo tree or termcap file is accessible (this may be useful
424for support of screen-oriented programs that must run in single-user mode).
425<LI>The tic(1)/captoinfo utility provided with ncurses has the
426ability to translate many termcaps from the XENIX, IBM and
427AT&amp;T extension sets.
428<LI>A BSD-like tset(1) utility is provided.
429<LI>The ncurses library and utilities will automatically read terminfo
430entries from $HOME/.terminfo if it exists, and compile to that directory
431if it exists and the user has no write access to the system directory.
432This feature makes it easier for users to have personal terminfo entries
433without giving up access to the system terminfo directory.
434<LI>You may specify a path of directories to search for compiled
435descriptions with the environment variable TERMINFO_DIRS (this
436generalizes the feature provided by TERMINFO under stock System V.)
437<LI>In terminfo source files, use capabilities may refer not just to
438other entries in the same source file (as in System V) but also to
439compiled entries in either the system terminfo directory or the user's
440$HOME/.terminfo directory.
441<LI>A script (<STRONG>capconvert</STRONG>) is provided to help BSD users
442transition from termcap to terminfo.  It gathers the information in a
443TERMCAP environment variable and/or a ~/.termcap local entries file
444and converts it to an equivalent local terminfo tree under $HOME/.terminfo.
445<LI>Automatic fallback to the /etc/termcap file can be compiled in
446when it is not possible to build a terminfo tree.  This feature is neither
447fast nor cheap, you don't want to use it unless you have to,
448but it's there.
449<LI>The table-of-entries utility <STRONG>toe</STRONG> makes it easy for users to
450see exactly what terminal types are available on the system.
451<LI>The library meets the XSI requirement that every macro entry
452point have a corresponding function which may be linked (and will be
453prototype-checked) if the macro definition is disabled with
454<CODE>#undef</CODE>.
455<LI>An HTML "Introduction to Programming with NCURSES" document provides
456a narrative introduction to the curses programming interface.
457</UL>
458
459<H1>State of the Package</H1>
460
461Numerous bugs present in earlier versions have been fixed; the
462library is far more reliable than it used to be.  Bounds checking in many
463`dangerous' entry points has been improved.  The code is now type-safe
464according to gcc -Wall.  The library has been checked for malloc leaks and
465arena corruption by the Purify memory-allocation tester.<P>
466
467The ncurses code has been tested with a wide variety of applications
468including (versions starting with those noted):
469<DL>
470<DT> cdk
471<DD> Curses Development Kit
472<br>
473<A HREF="http://invisible-island.net/cdk/">http://invisible-island.net/cdk/</A>
474<br>
475<A HREF="http://www.vexus.ca/products/CDK/">http://www.vexus.ca/products/CDK/</a>
476<DT> ded
477<DD> directory-editor
478<br>
479<A HREF="http://invisible-island.net/ded/">http://invisible-island.net/ded/</A>
480<DT> dialog
481<DD> the underlying application used in Slackware's setup, and the basis
482for similar applications on GNU/Linux.
483<br>
484<A HREF="http://invisible-island.net/dialog/">http://invisible-island.net/dialog/</A>
485<DT> lynx
486<DD> the character-screen WWW browser
487<br>
488<A HREF="http://lynx.isc.org/release/">http://lynx.isc.org/release/</A>
489<DT> Midnight Commander
490<DD> file manager
491<br>
492<A HREF="http://www.ibiblio.org/mc/">http://www.ibiblio.org/mc/</A>
493<DT> mutt
494<DD> mail utility
495<br>
496<A HREF="http://www.mutt.org/">http://www.mutt.org/</A>
497<DT> ncftp
498<DD> file-transfer utility
499<br>
500<A HREF="http://www.ncftp.com/">http://www.ncftp.com/</A>
501<DT> nvi
502<DD> New vi versions 1.50 are able to use ncurses versions 1.9.7 and later.
503<br>
504<A HREF="http://www.bostic.com/vi/">http://www.bostic.com/vi/</A>
505<br>
506<DT> pinfo
507<DD> Lynx-like info browser.
508<A HREF="https://alioth.debian.org/projects/pinfo/">https://alioth.debian.org/projects/pinfo/</A>
509<DT> tin
510<DD> newsreader, supporting color, MIME
511<A HREF="http://www.tin.org/">http://www.tin.org/</A>
512</DL>
513as well as some that use ncurses for the terminfo support alone:
514<DL>
515<DT> minicom
516<DD> terminal emulator
517<br>
518<A HREF="http://alioth.debian.org/projects/minicom/">
519http://alioth.debian.org/projects/minicom/</A>
520<DT> vile
521<DD> vi-like-emacs
522<br>
523<A HREF="http://invisible-island.net/vile/">http://invisible-island.net/vile/</A>
524</DL>
525<P>
526
527The ncurses distribution includes a selection of test programs (including
528a few games).
529
530<H2>Who's Who and What's What</H2>
531
532Zeyd Ben-Halim
533started it from a previous package pcurses, written by Pavel Curtis.
534Eric S. Raymond
535continued development.
536J&uuml;rgen Pfeifer wrote most of the form and menu libraries.
537Ongoing work is being done by
538<A HREF="mailto:dickey@invisible-island.net">Thomas Dickey</A>.
539Thomas Dickey
540acts as the maintainer for the Free Software Foundation,
541which holds the copyright on ncurses.
542Contact the current maintainers at
543<A HREF="mailto:bug-ncurses@gnu.org">bug-ncurses@gnu.org</A>.
544<P>
545
546To join the ncurses mailing list, please write email to
547<CODE>bug-ncurses-request@gnu.org</CODE> containing the line:
548<PRE>
549             subscribe &lt;name&gt;@&lt;host.domain&gt;
550</PRE>
551
552This list is open to anyone interested in helping with the development and
553testing of this package.<P>
554
555Beta versions of ncurses and patches to the current release are made available at
556<A HREF="ftp://invisible-island.net/ncurses/">ftp://invisible-island.net/ncurses/</A>&nbsp;.
557
558<H2>Future Plans</H2>
559<UL>
560<LI>Extended-level XPG4 conformance, with internationalization support.
561<LI>Ports to more systems, including DOS and Windows.
562</UL>
563We need people to help with these projects.  If you are interested in working
564on them, please join the ncurses list.
565
566<H2>Other Related Resources</H2>
567
568The distribution provides a newer version of the terminfo-format
569terminal description file once maintained by
570<A HREF="http://www.catb.org/~esr/terminfo/">Eric Raymond</A>&nbsp;.
571Unlike the older version, the termcap and terminfo data are provided
572in the same file, and provides several user-definable extensions
573beyond the X/Open specification.<P>
574
575You can find lots of information on terminal-related topics
576not covered in the terminfo file at
577<A HREF="http://www.cs.utk.edu/~shuford/terminal_index.html">Richard Shuford's
578archive</A>&nbsp;.
579</BODY>
580</HTML>
581<!--
582# The following sets edit modes for GNU EMACS
583# Local Variables:
584# mode:html
585# case-fold-search:nil
586# fill-column:70
587# End:
588-->
589