mirror of
https://github.com/Aigor44/ncursesw-morphos.git
synced 2024-12-27 07:49:06 +08:00
02f02dcd44
+ build-fix for Ada95 on older platforms without stdint.h + build-fix for Solaris, whose /bin/sh and /usr/bin/sed are non-POSIX. + update release announcement, summarizing more than 800 changes across more than 200 snapshots. + minor fixes to manpages, etc., to simplify linking from announcement page.
2422 lines
77 KiB
HTML
2422 lines
77 KiB
HTML
<!--
|
|
$Id: announce.html.in,v 1.91 2015/08/08 19:27:17 tom Exp $
|
|
****************************************************************************
|
|
* Copyright (c) 1998-2013,2015 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. *
|
|
****************************************************************************
|
|
-->
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
|
|
<html>
|
|
<head>
|
|
<meta name="generator" content=
|
|
"HTML Tidy for Linux (vers 25 March 2009), see www.w3.org">
|
|
|
|
<title>Announcing ncurses @VERSION@</title>
|
|
<link rev="made" href="mailto:bug-ncurses@gnu.org">
|
|
<meta http-equiv="Content-Type" content=
|
|
"text/html; charset=us-ascii">
|
|
<style type="text/css">
|
|
p,li { max-width:700px; }
|
|
dd { max-width:630px; }
|
|
</style>
|
|
</head>
|
|
|
|
<body>
|
|
<h1 class="no-header">Announcing ncurses @VERSION@</h1>
|
|
|
|
<h2><a name="h2-overview" id="h2-overview">Overview</a></h2>
|
|
|
|
<p>The <em class="small-caps">ncurses</em> (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.</p>
|
|
|
|
<p>In mid-June 1995, the maintainer of 4.4BSD curses declared
|
|
that he considered 4.4BSD curses obsolete, and encouraged the
|
|
keepers of <em class="small-caps">unix</em> releases such as
|
|
BSD/OS, FreeBSD and NetBSD to switch over to <em class=
|
|
"small-caps">ncurses</em>.</p>
|
|
|
|
<p>Since 1995, <em class="small-caps">ncurses</em> has been
|
|
ported to many systems:</p>
|
|
|
|
<ul>
|
|
<li>It is used in almost every system based on the Linux kernel
|
|
(aside from some embedded applications).</li>
|
|
|
|
<li>It is used as the system curses library on OpenBSD, FreeBSD
|
|
and OSX.</li>
|
|
|
|
<li>It is used in environments such as Cygwin and MinGW. The
|
|
first of these was EMX on OS/2 Warp.</li>
|
|
|
|
<li>It is used (though usually not as the <em>system</em>
|
|
curses) on all of the vendor <em class="small-caps">unix</em>
|
|
systems, e.g., AIX, HP-UX, IRIX64, SCO, Solaris, Tru64.</li>
|
|
|
|
<li>It should work readily on any ANSI/POSIX-conforming
|
|
<em class="small-caps">unix</em>.</li>
|
|
</ul>
|
|
|
|
<p>The distribution includes the library and support utilities,
|
|
including</p>
|
|
|
|
<ul>
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/man/captoinfo.1m.html">captoinfo</a>,
|
|
a termcap conversion tool</li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/man/clear.1.html">clear</a>,
|
|
utility for clearing the screen</li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/man/infocmp.1m.html">infocmp</a>,
|
|
the terminfo decompiler</li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/man/tabs.1.html">tabs</a>,
|
|
set tabs on a terminal</li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/man/tic.1m.html">tic</a>,
|
|
the terminfo compiler</li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/man/toe.1m.html">toe</a>,
|
|
list (table of) terminfo entries</li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/man/tput.1.html">tput</a>,
|
|
utility for retrieving terminal capabilities in shell
|
|
scripts</li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/man/tset.1.html">tset</a>,
|
|
to initialize the terminal</li>
|
|
</ul>
|
|
|
|
<p>Full manual pages are provided for the library and tools.</p>
|
|
|
|
<p>The <em class="small-caps">ncurses</em> distribution is
|
|
available via anonymous FTP at the GNU distribution site</p>
|
|
|
|
<blockquote>
|
|
<p><a href=
|
|
"ftp://ftp.gnu.org/gnu/ncurses/">ftp://ftp.gnu.org/gnu/ncurses/</a> .</p>
|
|
</blockquote>It is also available at
|
|
|
|
<blockquote>
|
|
<p><a href=
|
|
"ftp://invisible-island.net/ncurses/">ftp://invisible-island.net/ncurses/</a> .</p>
|
|
</blockquote>
|
|
|
|
<h2><a name="h2-release-notes" id="h2-release-notes">Release
|
|
Notes</a></h2>
|
|
|
|
<p>These notes are for <em class="small-caps">ncurses</em>
|
|
@VERSION@, released <strong>August 8, 2015</strong>.</p>
|
|
|
|
<p>This release is designed to be source-compatible with
|
|
<em class="small-caps">ncurses</em> 5.0 through 5.9; providing a
|
|
new application binary interface (ABI). Although the source can
|
|
still be configured to support the <em class=
|
|
"small-caps">ncurses</em> 5 ABI, the intent of the release is to
|
|
provide extensions which are generally useful, but
|
|
binary-incompatible with <em class="small-caps">ncurses</em>
|
|
5:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>Extend the <code>cchar_t</code> structure to allow more
|
|
than 16 colors to be encoded.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Modify the encoding of mouse state to make room for a 5th
|
|
mouse button. That allows one to use <em class=
|
|
"small-caps">ncurses</em> with a wheel mouse with xterm or
|
|
similar X terminal emulators.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>There are, of course, numerous other improvements,
|
|
including</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>fixes made based on the Clang and Coverity static
|
|
analyzers.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>memory leak fixes using Valgrind</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>The release notes mention some bug-fixes, but are focused on
|
|
new features and improvements to existing features log since
|
|
<em class="small-caps">ncurses</em> 5.9 release.</p>
|
|
|
|
<p>While the intent of the release is to provide a new stable
|
|
ABI, there are other development activities which are summarized
|
|
below.</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>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 <code>Console2</code> took a while.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
|
|
<p>The <a href=
|
|
"http://invisible-island.net/ncurses/tctest.html">termcap
|
|
library checker (tctest)</a> (not part of <em class=
|
|
"small-caps">ncurses</em>) was one result. A followup review
|
|
of performance using <a href=
|
|
"http://invisible-island.net/ncurses/ncurses-examples.html">ncurses-examples</a>
|
|
in 2014 led to additional improvements.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Output buffering provided a further, but worthwhile
|
|
distraction. A bug report in 2012 regarding the use of signal
|
|
handlers in <em class="small-caps">ncurses</em>) pointed out
|
|
<a href=
|
|
"http://lists.gnu.org/archive/html/bug-ncurses/2012-07/msg00029.html">
|
|
a problem</a> with the use of unsafe functions for handling
|
|
<code>SIGTSTP</code>. Other signals could be addressed with
|
|
workarounds; repairing <code>SIGTSTP</code> required a
|
|
different approach. The solution required changing internal
|
|
behavior of the library: how it handles output buffering.</p>
|
|
|
|
<p>Now <em class="small-caps">ncurses</em> 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
|
|
<em>unspecified</em> 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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Since the introduction of the experimental support for 256
|
|
colors early in <a href=
|
|
"http://invisible-island.net/ncurses/NEWS.html#t20050101">2005</a>
|
|
(released in <a href=
|
|
"http://invisible-island.net/ncurses/announce-5.5.html">ncurses
|
|
5.5</a>), there has been increased user interest. Almost all
|
|
packagers continue providing the ncurses ABI 5 which cannot
|
|
support 256 colors.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Symbol versioning, or the lack of it in ncurses, is the
|
|
main reason why packagers would be reluctant to add a new
|
|
ncurses ABI.</p>
|
|
|
|
<p>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
|
|
<a href=
|
|
"http://invisible-island.net/ncurses/ncurses-mapsyms.html">Symbol
|
|
versioning in <em class="small-caps">ncurses</em></a>.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<h3><a name="h3-library" id="h3-library">Library
|
|
improvements</a></h3>
|
|
|
|
<h3><a name="h3-lib-setbuf" id="h3-lib-setbuf">Output
|
|
buffering</a></h3>
|
|
|
|
<p>X/Open curses provides more than one initialization
|
|
function:</p>
|
|
|
|
<ul>
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/man/curs_initscr.3x.html#h3-initscr">
|
|
initscr</a> (the simplest) accepts no parameters.</li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/man/curs_initscr.3x.html#h3-newterm">
|
|
newterm</a> accepts parameters for the stream input and
|
|
output</li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/man/curs_terminfo.3x.html#h3-Initialization">
|
|
setupterm</a> (the low-level function) accepts a parameter for
|
|
the <em>file descriptor</em> of the output.</li>
|
|
</ul>
|
|
|
|
<p>They are documented in X/Open <em>as if</em>
|
|
<code>initscr</code> calls <code>newterm</code> using
|
|
<code>stdout</code> for output stream, and in turn
|
|
<code>newterm</code> calls <code>setupterm</code> using
|
|
<code>fileno(stdout)</code> for the file descriptor. As long as
|
|
an implementation acts <em>as if</em> it does this, it conforms.
|
|
In practice, implementations do what is implied. This creates a
|
|
problem: the low-level <code>setupterm</code> function's file
|
|
descriptor is unbuffered, while <code>newterm</code> 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.</p>
|
|
|
|
<p>Initially, <em class="small-caps">ncurses</em> used the file
|
|
descriptor (obtained from the output stream passed to
|
|
<code>newterm</code>) for changing the terminal modes, and relied
|
|
upon the output parameter of <code>newterm</code> for buffered
|
|
output. Later (to avoid using unsafe buffered I/O in signal
|
|
handlers), <em class="small-caps">ncurses</em> 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.</p>
|
|
|
|
<p>That approach worked reasonably well and as a side effect,
|
|
using the same buffered output as an application might use for
|
|
<code>printf</code> meant that no flushing was needed when
|
|
switching between normal- and screen-modes.</p>
|
|
|
|
<p>There were a couple of problems:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>to get good performance, curses (not only <em class=
|
|
"small-caps">ncurses</em>, but SVr4 curses in general) set an
|
|
output buffer using <code>setbuf</code> or similar function.
|
|
There is no standard (or portable) way to turn that output
|
|
buffer off, and revert to line-buffering. The <code><a href=
|
|
"http://invisible-island.net/ncurses/man/ncurses.3x.html#h3-NCURSES_NO_SETBUF">
|
|
NCURSES_NO_SETBUF</a></code> environment variable did make it
|
|
optional.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>to handle <code>SIGTSTP</code> (the “stop”
|
|
signal), <em class="small-caps">ncurses</em> 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.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>Conveniently, solving the second problem (by making <em class=
|
|
"small-caps">ncurses</em> do its <em>own</em> output buffering)
|
|
also fixed the first one. But there were special cases to
|
|
resolve: <a href=
|
|
"http://invisible-island.net/ncurses/man/curs_terminfo.3x.html"><em>
|
|
low-level</em></a> 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.</p>
|
|
|
|
<p>Finally, there may still be a few programs which should be
|
|
modified to improve their portability, e.g., adding an</p>
|
|
|
|
<blockquote>
|
|
<pre class="code-block">
|
|
fflush(stdout);
|
|
</pre>
|
|
</blockquote>
|
|
|
|
<p>when switching from “<a href=
|
|
"http://invisible-island.net/ncurses/man/curs_kernel.3x.html#h3-reset_prog_mode_-reset_shell_mode">shell</a>”
|
|
mode to “<a href=
|
|
"http://invisible-island.net/ncurses/man/curs_kernel.3x.html#h3-reset_prog_mode_-reset_shell_mode">program</a>”
|
|
(curses) mode. Those are fairly rare because most programmers
|
|
have learned not to mix <code>printf</code> and <code><a href=
|
|
"http://invisible-island.net/ncurses/man/curs_printw.3x.html">printw</a></code>.</p>
|
|
|
|
<h3><a name="h3-lib-versioning" id="h3-lib-versioning">Symbol
|
|
versioning</a></h3>
|
|
|
|
<p>This release introduces symbol-versioning to <em class=
|
|
"small-caps">ncurses</em> because without it, the change of ABI
|
|
would be less successful. A lengthy discussion will be presented
|
|
in <a href=
|
|
"http://invisible-island.net/ncurses/ncurses-mapsyms.html">Symbol
|
|
versioning in <em class="small-caps">ncurses</em></a>. These
|
|
notes summarize what has changed, and what can be done with the
|
|
new release.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>This release provides sample files for the four principal
|
|
configurations of <em class="small-caps">ncurses</em> libraries:
|
|
<code>ncurses</code>, <code>ncursesw</code>,
|
|
<code>ncursest</code> and <code>ncursestw</code>. Each sample is
|
|
given in two forms:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt>“<code>.map</code>”</dt>
|
|
|
|
<dd>These list all public symbols, together with version
|
|
names.</dd>
|
|
|
|
<dt>“<code>.sym</code>”</dt>
|
|
|
|
<dd>These list all public symbols, without version
|
|
names.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p>The sample files are <em>generated</em> by scripts which take
|
|
into account a few special cases such as <a href=
|
|
"http://invisible-island.net/ncurses/tack.html">tack</a> to omit
|
|
many of the <em class="small-caps">ncurses</em> private symbols
|
|
(beginning with “<code>_nc_</code>”). Here are
|
|
counts of globals versus locals:</p>
|
|
|
|
<blockquote>
|
|
<table border="1" summary="Total global and local symbols">
|
|
<tr>
|
|
<th>Config</th>
|
|
|
|
<th>Symbols</th>
|
|
|
|
<th>Globals</th>
|
|
|
|
<th>Locals</th>
|
|
|
|
<th>"_nc_"</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>ncurses</td>
|
|
|
|
<td align="right">976</td>
|
|
|
|
<td align="right">796</td>
|
|
|
|
<td align="right">180</td>
|
|
|
|
<td align="right">332</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>ncursesw</td>
|
|
|
|
<td align="right">1089</td>
|
|
|
|
<td align="right">905</td>
|
|
|
|
<td align="right">184</td>
|
|
|
|
<td align="right">343</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>ncursest</td>
|
|
|
|
<td align="right">979</td>
|
|
|
|
<td align="right">804</td>
|
|
|
|
<td align="right">175</td>
|
|
|
|
<td align="right">358</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>ncursestw</td>
|
|
|
|
<td align="right">1098</td>
|
|
|
|
<td align="right">914</td>
|
|
|
|
<td align="right">184</td>
|
|
|
|
<td align="right">372</td>
|
|
</tr>
|
|
</table>
|
|
</blockquote>
|
|
|
|
<p>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
|
|
<em>not</em> support the feature, and a few (such as Solaris)
|
|
which provide incomplete support.</p>
|
|
|
|
<p>The version-naming convention used allows these sample files
|
|
to build distinct libraries for ABI 5 and 6. Version names
|
|
consist of</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>configuration name, e.g.,
|
|
“<code>NCURSESW</code>” for the wide-character
|
|
libraries</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>ABI version (if not 5)</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>library name for two special cases which have the same
|
|
interface across configurations:
|
|
“<code>TINFO</code>” and
|
|
“<code>TIC</code>”</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>release version</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>patch date (for the release version)</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>For example, running <code>nm -D</code> on the libraries in
|
|
the ncurses6 test package shows these symbol-versions:</p>
|
|
|
|
<blockquote>
|
|
<pre class="code-block">
|
|
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
|
|
</pre>
|
|
</blockquote>
|
|
|
|
<p>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.</p>
|
|
|
|
<h3><a name="h3-lib-other" id=
|
|
"h3-lib-other">Miscellaneous</a></h3>
|
|
|
|
<p>The new release has several improvements for performance and
|
|
building. For instance:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>several files in ncurses- and progs-directories were
|
|
modified to allow <code>const</code> data used in internal
|
|
tables to be put by the linker into the readonly text
|
|
segment.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>various improvements were made to building the Ada95
|
|
binding, both in simplifying the generated files as well as
|
|
improving the way it uses <code>gnatmake</code></p>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>There are also new features in the libraries:</p>
|
|
|
|
<ul>
|
|
<li>added <a href=
|
|
"http://invisible-island.net/ncurses/man/curs_util.3x.html#h3-use_tioctl">
|
|
use_tioctl</a> function</li>
|
|
|
|
<li>
|
|
<p>added <a href=
|
|
"http://invisible-island.net/ncurses/man/curs_opaque.3x.html">
|
|
wgetdelay</a> to retrieve _delay member of WINDOW if it
|
|
happens to be opaque, e.g., in the pthread configuration.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>added <a href=
|
|
"http://invisible-island.net/ncurses/man/curs_attr.3x.html#h2-PORTABILITY">
|
|
A_ITALIC</a> extension.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>added form library extension <a href=
|
|
"http://invisible-island.net/ncurses/man/form_field_opts.3x.html">
|
|
O_DYNAMIC_JUSTIFY</a> option which can be used to override
|
|
the different treatment of justification for static versus
|
|
dynamic fields .</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>rewrote <a href=
|
|
"http://invisible-island.net/ncurses/man/curs_util.3x.html#h3-putwin_getwin">
|
|
putwin</a> and <a href=
|
|
"http://invisible-island.net/ncurses/man/curs_util.3x.html#h3-putwin_getwin">
|
|
getwin</a>, making an extended version which is capable of
|
|
reading screen-dumps between the wide/normal <em class=
|
|
"small-caps">ncurses</em> configurations. These are text
|
|
files, except for a <em>magic</em> code at the beginning:</p>
|
|
|
|
<blockquote>
|
|
<pre class="code-block">
|
|
0 string \210\210 Screen-dump (ncurses)
|
|
</pre>
|
|
</blockquote>
|
|
</li>
|
|
|
|
<li>
|
|
<p>several changes to mouse support include:</p>
|
|
|
|
<ul>
|
|
<li>added decoder for xterm SGR 1006 mouse mode.</li>
|
|
|
|
<li>added experimental support for
|
|
“<code>%u</code>” format to terminfo.</li>
|
|
|
|
<li>improved behavior of wheel-mice for xterm protocol:
|
|
noting that there are only button-presses for buttons
|
|
“4” and “5”, so there is no need to
|
|
wait to combine events into double-clicks .</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>There are a few new configure options dealing with library
|
|
customization:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>add “<code>--enable-ext-putwin</code>”
|
|
configure option to turn on the extended putwin/getwin. By
|
|
default, this is enabled for ABI 6 and disabled with ABI
|
|
5.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>add “<code>--enable-string-hacks</code>”
|
|
option to control whether strlcat and strlcpy may be used.
|
|
Because <em class="small-caps">ncurses</em> already does the
|
|
requisite buffer-limit checks, this feature is mainly of
|
|
interest to quiet compiler-warnings on a few systems.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>add configure option
|
|
“<code>--with-tparm-arg</code>” to allow <a href=
|
|
"http://invisible-island.net/ncurses/man/curs_terminfo.3x.html#h3-Formatting-Output">
|
|
tparm</a>'s parameters to be something more likely to be the
|
|
same size as a pointer, e.g., <code>intptr_t</code> (again,
|
|
the default is set for ABI 6).</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<h3><a name="h3-programs" id="h3-programs">Program
|
|
improvements</a></h3>
|
|
|
|
<h4><a name="h4-utilities" id="h4-utilities">Utilities</a></h4>
|
|
|
|
<p>Most of the termcap-related changes based on development of
|
|
<a href="http://invisible-island.net/ncurses/tctest.html">tctest
|
|
(termcap library checker)</a> are implemented in the tic and
|
|
infocmp programs rather than affecting the library. As noted in
|
|
the <a href=
|
|
"http://invisible-island.net/ncurses/tctest.html#my-better-translation">
|
|
discussion</a> of <code>tctest</code>, <em class=
|
|
"small-caps">ncurses</em>'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 <em>termcap</em> users are
|
|
using <em class="small-caps">ncurses</em> (or NetBSD, with its
|
|
own terminfo library) and their programs are actually using
|
|
terminfo rather than termcap data.</p>
|
|
|
|
<p>Still, there are a few. A comment about the translation of the
|
|
ASCII <code>NUL</code> character prompted a review:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>Both terminfo and termcap store string capabilities as
|
|
<code>NUL</code>-terminated strings.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>In terminfo, a <code>\0</code> in a terminal description
|
|
is stored as <code>\200</code>.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>There are no (known) terminals which would behave
|
|
differently when sent <code>\0</code> or
|
|
<code>\200</code>.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>When translating to terminfo format (or displaying a
|
|
printable version of an entry using infocmp), <em class=
|
|
"small-caps">ncurses</em> shows <code>\200</code> as
|
|
<code>\0</code>.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>It has done this since 1998 (quoting from the NEWS
|
|
file):</p>
|
|
|
|
<blockquote>
|
|
<pre class="code-block">
|
|
<a href=
|
|
"http://invisible-island.net/ncurses/NEWS.html#t980103">980103</a>
|
|
...
|
|
+ modify _nc_tic_expand() to generate \0 rather than \200.
|
|
...
|
|
+ correct translation of terminfo "^@", to \200, like \0.
|
|
</pre>
|
|
</blockquote>
|
|
</li>
|
|
|
|
<li>
|
|
<p>However, the <code>_nc_tic_expand</code> function (which
|
|
optionally produces terminfo or termcap format) did not
|
|
address this special case for termcap. Even the later 4.4BSD
|
|
<a href=
|
|
"https://svnweb.freebsd.org/base/head/lib/libc/gen/getcap.c?revision=244092&view=markup#l784">
|
|
cgetstr</a> interprets a <code>\0</code> literally, ending
|
|
<em>that</em> string (rather than using the terminfo
|
|
improvement).</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>As a result of the review, several improvements were made to
|
|
<em class="small-caps">ncurses</em> 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:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>the “<code>-0</code>” option generates
|
|
termcap/terminfo source on a single line.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>the “<code>-K</code>” option provides stricter
|
|
BSD-compatibility for termcap output.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>Other user-visible improvements and new features include:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>added “<code>-D</code>” option to tic and
|
|
infocmp, to show the database locations that it could
|
|
use.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>added “<code>-s</code>” option to toe, to sort
|
|
its output.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>extended “<code>-c</code>” and
|
|
“<code>-n</code>” options of infocmp to allow
|
|
comparing more than two entries.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>modified toe's report when “<code>-a</code>”
|
|
and “<code>-s</code>” options are combined, to
|
|
add a column showing which entries belong to a given
|
|
database.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>modified the clear program to take into account the
|
|
“<code>E3</code>” extended capability to clear
|
|
the terminal's scrollback buffer.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<h4><a name="h4-examples" id="h4-examples">Examples</a></h4>
|
|
|
|
<p>Along with the library and utilities, many improvements were
|
|
made to the <a href=
|
|
"http://invisible-island.net/ncurses/ncurses-examples.html">ncurses-examples</a>.
|
|
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).</p>
|
|
|
|
<p>These changes were made to verify compatibility or compare
|
|
performance of <em class="small-caps">ncurses</em>:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>made workarounds for compiling test-programs with NetBSD
|
|
curses, though it lacks some common functions such as
|
|
<a href="http://invisible-island.net/ncurses/man/curs_util.3x.html#h3-use_env">
|
|
use_env</a>.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>added dots_termcap test-program</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>added dots_curses test-program, for comparison with the
|
|
low-level examples.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>added test_setupterm test-proram to demonstrate
|
|
normal/error returns from the setupterm and restartterm
|
|
functions.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>added “<code>-d</code>”,
|
|
“<code>-e</code>” and
|
|
“<code>-q</code>” options to the demo_terminfo
|
|
and demo_termcap test-programs.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>added “<code>-y</code>” option to demo_termcap
|
|
and test/demo_terminfo test-programs to demonstrate behavior
|
|
with/without extended capabilities.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>modified demo_termcap and demo_terminfo test-programs to
|
|
make their options more directly comparable, and add
|
|
“<code>-i</code>” option to specify a terminal
|
|
description filename to parse for names to lookup.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>rewrote the tests for <a href=
|
|
"http://invisible-island.net/ncurses/man/curs_window.3x.html#h3-derwin">
|
|
mvderwin</a> and test for recursive <a href=
|
|
"http://invisible-island.net/ncurses/man/curs_window.3x.html#h3-mvwin">
|
|
mvwin</a> in the movewindow test-program.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>These changes were made to help with the MinGW port:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>added test-screens to the ncurses test-program to show
|
|
256-characters at a time, to help with MinGW port.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>added “<code>-s</code>” 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.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>These changes were made to verify new extensions in <em class=
|
|
"small-caps">ncurses</em>:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>added <a href=
|
|
"http://invisible-island.net/ncurses/man/form_driver.3x.html#h3-form_driver_w">
|
|
form_driver_w</a> entrypoint to wide-character forms library,
|
|
as well as form_driver_w test-program.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>modified ncurses test-program, adding
|
|
“<code>-E</code>” and
|
|
“<code>-T</code>” options to demonstrate use_env
|
|
versus use_tioctl.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>modified the ncurses test-program to also show position
|
|
reports in 'a' test.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>These changes were made to make the examples more useful:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>added scripts for building dpkg and rpm test-packages</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>modified the hanoi test-program to show the minimum number
|
|
of moves possible for the given number of tiles.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<h3><a name="h3-database" id="h3-database">Terminal
|
|
database</a></h3>
|
|
|
|
<p>This release provides improvements to tic's
|
|
“<code>-c</code>” checking option, which was used for
|
|
example to</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>make <code>sgr</code> in several entries agree with other
|
|
caps.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>correct padding in some entries where earlier versions had
|
|
miscounted the number of octal digits.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>There are several new terminal descriptions:</p>
|
|
|
|
<ul>
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/terminfo.src.html#toc-_M_L_T_E_R_M">
|
|
mlterm</a> is now aliased to mlterm3</li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/terminfo.src.html#tic-nsterm">
|
|
nsterm</a> is now derived from nsterm-256color</li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/terminfo.src.html#tic-putty-sco">
|
|
putty-sco</a></li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/terminfo.src.html#tic-teken">
|
|
teken</a> is FreeBSD's "xterm" console.</li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/terminfo.src.html#toc-_T_E_R_M_I_N_A_T_O_R">
|
|
terminator</a></li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/terminfo.src.html#toc-_T_E_R_M_I_N_O_L_O_G_Y">
|
|
terminology</a></li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/terminfo.src.html#tic-tmux">
|
|
tmux</a> is derived from screen.</li>
|
|
|
|
<li>several screen.XXX entries support the respective
|
|
variations for 256 colors.</li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/terminfo.src.html#toc-_S_I_M_P_L_E_T_E_R_M">
|
|
simpleterm</a> is now 0.5</li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/terminfo.src.html#tic-vte">
|
|
vte</a> is aliased to vte-2012</li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/terminfo.src.html#tic-vt520ansi">
|
|
vt520ansi</a></li>
|
|
</ul>
|
|
|
|
<p>A few entries use extensions (user-defined terminal
|
|
capabilities):</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p><code>E3</code>, used in linux, putty and xterm-basic is
|
|
tested in the <a href=
|
|
"http://aerie.jexium-island.net/ncurses/man/clear.1.html">clear</a>
|
|
program to erase a terminal's scrollback.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p><code>TS</code> is used in the <a href=
|
|
"http://invisible-island.net/ncurses/terminfo.src.html#tic-xterm_sl">
|
|
xterm+sl</a> building block to help deprecate the misuse of
|
|
<code>tsl</code> for xterm's title-string.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p><code>XT</code> 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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p><code>xm</code> is used in examples <a href=
|
|
"http://invisible-island.net/ncurses/terminfo.src.html#tic-xterm-1005">
|
|
xterm-1005</a> and <a href=
|
|
"http://invisible-island.net/ncurses/terminfo.src.html#tic-xterm-1006">
|
|
xterm-1006</a> to illustrate a way to make mouse handling
|
|
more general</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>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
|
|
<code>A_ITALIC</code> extension.</p>
|
|
|
|
<ul>
|
|
<li>konsole, mlterm3 (italics)</li>
|
|
|
|
<li>nsterm (dim)</li>
|
|
|
|
<li>screen (dim)</li>
|
|
|
|
<li>vte (dim, italics)</li>
|
|
|
|
<li>xterm (dim, italics)</li>
|
|
</ul>
|
|
|
|
<h3><a name="h3-documentation" id=
|
|
"h3-documentation">Documentation</a></h3>
|
|
|
|
<p>As usual, this release</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>improves documentation by describing new features,</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>attempts to improve the description of features which
|
|
users have found confusing</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>fills in overlooked descriptions of features which were
|
|
described in the <a href=
|
|
"http://invisible-island.net/ncurses/NEWS.html">NEWS</a> file
|
|
but treated sketchily in manual pages.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>In addition, the mechanism for producing HTML versions of the
|
|
documentation has been improved:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>use an improved version of <a href=
|
|
"http://invisible-island.net/scripts/man2html.html">man2html</a>
|
|
to generate html manpages.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>regenerated <a href=
|
|
"http://invisible-island.net/ncurses/NCURSES-Programming-HOWTO.html">
|
|
NCURSES-Programming-HOWTO.html</a> to fix some of the broken
|
|
html emitted by docbook.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<h3><a name="h3-bug-fixes" id="h3-bug-fixes">Interesting
|
|
bug-fixes</a></h3>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>Ada95 binding:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>modify makefile rules to ensure that the PIC option is
|
|
not used when building a static library</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>make Ada95 build-fix for big-endian architectures such
|
|
as sparc. This undoes one of the fixes from <a href=
|
|
"http://invisible-island.net/ncurses/NEWS.html#t20110319">
|
|
20110319</a>, which added an
|
|
“<code>Unused</code>” member to
|
|
representation clauses, replacing that with pragmas to
|
|
suppress warnings about unused bits.</p>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Color and attributes:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>parenthesize parameter of <code>COLOR_PAIR</code> and
|
|
<code>PAIR_NUMBER</code> in curses.h in case it happens
|
|
to be a comma-expression.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>improve <a href=
|
|
"http://invisible-island.net/ncurses/NEWS.html#t20021221">
|
|
20021221</a> workaround for broken acs, handling a case
|
|
where that ACS_<em>xxx</em> character is not in the
|
|
<code>acsc</code> string but there is a known
|
|
wide-character which can be used.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>modify <a href=
|
|
"http://invisible-island.net/ncurses/man/curs_color.3x.html#h3-Routine-Descriptions">
|
|
init_pair</a> to accept -1's for color value after
|
|
<a href=
|
|
"http://invisible-island.net/ncurses/man/default_colors.3x.html">
|
|
assume_default_colors</a> has been called.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>add a check in <a href=
|
|
"http://invisible-island.net/ncurses/man/curs_color.3x.html#h3-Routine-Descriptions">
|
|
start_color</a> to limit color-pairs to 256 when extended
|
|
colors are not supported.</p>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Resizing the screen:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>propagate error-returns from wresize, i.e., the
|
|
internal increase_size and decrease_size functions
|
|
through <a href=
|
|
"http://invisible-island.net/ncurses/man/resizeterm.3x.html">
|
|
resize_term</a>.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>add check for zero/negative dimensions for
|
|
<code>resizeterm</code> and <code>resize_term</code>.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>modify <code>resizeterm</code> to always push a
|
|
<code>KEY_RESIZE</code> onto the fifo, even if screensize
|
|
is unchanged. Modify library to push a
|
|
<code>KEY_RESIZE</code> if there was a SIGWINCH, even if
|
|
it does not call <code>resizeterm</code>). These changes
|
|
eliminate the case where a SIGWINCH is received, but ERR
|
|
is returned from <code>wgetch</code> or
|
|
<code>wgetnstr</code> because the screen dimensions did
|
|
not change.</p>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Low-level interfaces</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>fix an old bug in the termcap emulation;
|
|
“<code>%i</code>” was ignored in
|
|
<code>tparm</code> because the parameters to be
|
|
incremented were already on the internal stack.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>change “<code>%l</code>” behavior in tparm
|
|
to push the string length onto the stack rather than
|
|
saving the formatted length into the output buffer.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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 <a href=
|
|
"http://invisible-island.net/ncurses/NEWS.html#t980725">980725</a>).</p>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
|
|
<li>High-level interfaces
|
|
|
|
<ul>
|
|
<li>
|
|
<p>modify internal recursion in <code>wgetch</code> which
|
|
handles cooked mode to check if the call to
|
|
<code>wgetnstr</code> returned an error. This can happen
|
|
when both <code>nocbreak</code> and <code>nodelay</code>
|
|
are set, for instance (see note for <a href=
|
|
"http://invisible-island.net/ncurses/NEWS.html#t960418">960418</a>).</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>add a check in internal function
|
|
<code>waddch_nosync</code> to ensure that tab characters
|
|
are treated as control characters; some broken locales
|
|
claim they are printable.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>fix special case where double-width character
|
|
overwrites a single- width character in the first
|
|
column.</p>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<h3><a name="h3-config-config" id=
|
|
"h3-config-config">Configuration changes</a></h3>
|
|
|
|
<h4><a name="h4-config-major" id="h4-config-major">Major
|
|
changes</a></h4>
|
|
|
|
<p>The <em class="small-caps">ncurses</em> 6.0 configure script
|
|
makes changes to the <em>default</em> value of several configure
|
|
options, depending on the <code>--with-abi-version</code> option
|
|
(i.e., whether its value is “5” or
|
|
“6”):</p>
|
|
|
|
<dl>
|
|
<dt><code>--enable-const</code></dt>
|
|
|
|
<dd>
|
|
<p>Feature introduced in <a href=
|
|
"http://invisible-island.net/ncurses/NEWS.html#t970405">970405</a>
|
|
supports the use of <code>const</code> where X/Open Curses
|
|
should have, but did not. NetBSD curses does something
|
|
similar with <code>const</code>.</p>
|
|
</dd>
|
|
|
|
<dt><code>--enable-ext-colors</code></dt>
|
|
|
|
<dd>
|
|
<p>Extends the <code>cchar_t</code> structure to allow more
|
|
than 16 colors to be encoded. This applies only to the
|
|
wide-character (<code>--enable-widec</code>)
|
|
configuration.</p>
|
|
</dd>
|
|
|
|
<dt><code>--enable-ext-mouse</code></dt>
|
|
|
|
<dd>
|
|
<p>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.</p>
|
|
</dd>
|
|
|
|
<dt><code>--enable-ext-putwin</code></dt>
|
|
|
|
<dd>
|
|
<p>Modifies the file-format written by <code>putwin</code> to
|
|
use printable text rather than binary files, allowing
|
|
<code>getwin</code> to read screen dumps written by
|
|
differently-configured ncurses libraries. The extended
|
|
<code>getwin</code> can still read binary screen dumps from
|
|
the <em>same</em> configuration of ncurses. This does not
|
|
change the ABI (the binary interface seen by calling
|
|
applications).</p>
|
|
</dd>
|
|
|
|
<dt><code>--enable-interop</code></dt>
|
|
|
|
<dd>
|
|
<p>Modifies the <code>FIELDTYPE</code> structure used for the
|
|
form library to make it more generic.</p>
|
|
</dd>
|
|
|
|
<dt><code>--enable-lp64</code></dt>
|
|
|
|
<dd>
|
|
<p>Allows an application to define <code>_LP64</code> to
|
|
declare <code>chtype</code> and <code>mmask_t</code> as
|
|
simply “<code>unsigned</code>” rather than the
|
|
configured types using the <code>--with-chtype</code> and
|
|
<code>--with-mmask_t</code> options.</p>
|
|
</dd>
|
|
|
|
<dt><code>--enable-sp-funcs</code></dt>
|
|
|
|
<dd>
|
|
<p>Compile-in support for extended functions which accept a
|
|
SCREEN pointer, reducing the need for juggling the global SP
|
|
value with <a href=
|
|
"http://invisible-island.net/ncurses/man/curs_initscr.3x.html#h3-set_term">
|
|
set_term</a> and <a href=
|
|
"http://invisible-island.net/ncurses/man/curs_initscr.3x.html#h3-delscreen">
|
|
delscreen</a>.</p>
|
|
</dd>
|
|
|
|
<dt><code>--with-chtype=uint32_t</code></dt>
|
|
|
|
<dd>
|
|
<p>Makes <code>chtype</code> explicitly a 32-bit unsigned
|
|
value.</p>
|
|
</dd>
|
|
|
|
<dt><code>--with-mmask_t=uint32_t</code></dt>
|
|
|
|
<dd>
|
|
<p>Makes <code>mmask_t</code> explicitly a 32-bit unsigned
|
|
value.</p>
|
|
</dd>
|
|
|
|
<dt><code>--with-tparm-arg=intptr_t</code></dt>
|
|
|
|
<dd>
|
|
<p>X/Open Curses declares <a href=
|
|
"http://invisible-island.net/ncurses/man/curs_terminfo.3x.html#h3-Formatting-Output">
|
|
tparm</a> using <code>long</code> for each of the parameters
|
|
aside from the formatting string, presuming that
|
|
<code>long</code> and <code>char*</code> are the same size.
|
|
This configure option uses <code>intptr_t</code> which
|
|
provides a better guarantee of the sizes.</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>The configure script no longer checks for antique compilers;
|
|
<code>c89</code> 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 <em class=
|
|
"small-caps">ncurses</em> 6.0 with any of the current (or not so
|
|
current) C compilers available in 2015.</p>
|
|
|
|
<p>The configure script, by the way, makes changes which do not
|
|
work with systems whose <code>/bin/sh</code> is non-POSIX. This
|
|
mainly affects Solaris (the other vendor <em class=
|
|
"small-caps">unix</em> systems have followed the POSIX guidelines
|
|
for the past twenty years). If you must build on Solaris, its
|
|
<a href=
|
|
"http://docs.oracle.com/cd/E19253-01/html/817-0552/fhkpy.html">xpg4</a>
|
|
binaries suffice, e.g.,</p>
|
|
|
|
<blockquote class="code-block">
|
|
<!--{{atr2html-->
|
|
|
|
<p style="font-family: monospace; font-size: 10pt;">
|
|
<font color="#800000">#!/bin/sh</font><br>
|
|
<font color="#008080">WHAT</font>=<strong><em><font color=
|
|
"#800000">`</font></em></strong>hostname|sed -e <font color="#800080">'s/\..*//'</font><strong><em><font color="#800000">`</font></em></strong><br>
|
|
|
|
<font color="#008080">OUT</font>=configure.out<br>
|
|
<strong><font color=
|
|
"#000080">cat</font></strong> >><font color=
|
|
"#008080">$OUT</font> <font color=
|
|
"#800080"><<EOF/</font><font color="#800080"><br>
|
|
** </font><strong><em><font color=
|
|
"#800000">`</font></em></strong>date<strong><em><font color=
|
|
"#800000">`</font></em></strong><font color="#800080"><br>
|
|
** node: </font><font color=
|
|
"#008080">$WHAT</font><font color="#800080"><br>
|
|
** user: </font><strong><em><font color=
|
|
"#800000">`</font></em></strong>id<strong><em><font color=
|
|
"#800000">`</font></em></strong><font color="#800080"><br>
|
|
** conf: $*<br>
|
|
EOF/</font><br>
|
|
<br>
|
|
<font color="#008080">SHELL</font>=/bin/sh<br>
|
|
<strong><font color=
|
|
"#000080">if</font></strong> <strong><font color=
|
|
"#000080">test</font></strong> -f /usr/xpg4/bin/sh<br>
|
|
|
|
<strong><font color="#000080">then</font></strong><br>
|
|
<font color=
|
|
"#008080">CONFIG_SHELL</font>=/usr/xpg4/bin/sh<br>
|
|
<strong><font color="#000080">export</font></strong> CONFIG_SHELL<br>
|
|
|
|
<font color=
|
|
"#008080">SHELL</font>=<font color=
|
|
"#008080">$CONFIG_SHELL</font><br>
|
|
<strong><font color="#000080">fi</font></strong><br>
|
|
<br>
|
|
rm -f config.status config.cache<br>
|
|
<font color="#008080">TOP</font>=<font color=
|
|
"#008080">$HOME</font>/<font color="#008080">$WHAT</font><br>
|
|
<font color=
|
|
"#008080">$SHELL</font> ./configure --verbose \<br>
|
|
|
|
--disable-echo \<br>
|
|
|
|
--disable-overwrite \<br>
|
|
|
|
--enable-warnings \<br>
|
|
|
|
--with-warnings \<br>
|
|
|
|
--prefix=<font color="#008080">$TOP</font> <font color="#008080">$*</font> <strong><font color="#008080">2</font></strong>>&<strong><font color="#008080">1</font></strong> | tee -a <font color="#008080">$OUT</font><br>
|
|
|
|
<!--atr2html}}--></p>
|
|
</blockquote>
|
|
|
|
<p>Other major changes to the configure script include:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>ABI 6 is now the default, intending that the existing ABI
|
|
5 should build as before using the
|
|
“<code>--with-abi-version=5</code>” option.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>added <code>--with-extra-suffix</code> option to help with
|
|
installing nonconflicting ncurses6 packages, e.g., avoiding
|
|
header- and library-conflicts.</p>
|
|
|
|
<p><strong>NOTE:</strong> as a side-effect, this renames</p>
|
|
|
|
<blockquote>
|
|
<p><code>adacurses-config</code> to
|
|
<code>adacurses5-config</code> and<br>
|
|
<code>adacursesw-config</code> to
|
|
<code>adacursesw5-config</code></p>
|
|
</blockquote>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<h4><a name="h4-config-options" id=
|
|
"h4-config-options">Configuration options</a></h4>
|
|
|
|
<p>There are several new (or extended) configure options:</p>
|
|
|
|
<dl>
|
|
<dt><code>--disable-db-install</code></dt>
|
|
|
|
<dd>
|
|
<p>Do not install the terminal database. This is used to omit
|
|
features for packages, as done with
|
|
<code>--without-progs</code>. The option simplifies building
|
|
cross-compile support packages.</p>
|
|
</dd>
|
|
|
|
<dt><code>--disable-gnat-projects</code></dt>
|
|
|
|
<dd>
|
|
<p>This option is used for regression testing</p>
|
|
</dd>
|
|
|
|
<dt><code>--disable-lib-suffixes</code></dt>
|
|
|
|
<dd>
|
|
<p>Suppress the “w”, “t” or
|
|
“tw” suffixes which normally would be added to
|
|
the library names for the <code>--enable-widec</code> and
|
|
<code>--with-pthread</code> options.</p>
|
|
</dd>
|
|
|
|
<dt><code>--with-cxx-shared</code></dt>
|
|
|
|
<dd>
|
|
<p>When <code>--with-shared</code> 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.</p>
|
|
</dd>
|
|
|
|
<dt><code>--with-hashed-db</code></dt>
|
|
|
|
<dd>
|
|
<p>Extended this configure option to simplify building with
|
|
different versions of Berkeley database using FreeBSD
|
|
ports.</p>
|
|
</dd>
|
|
|
|
<dt><code>--with-pc-suffix</code></dt>
|
|
|
|
<dd>
|
|
<p>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.</p>
|
|
</dd>
|
|
|
|
<dt><code>--with-xterm-kbs</code></dt>
|
|
|
|
<dd>
|
|
<p>Configure xterm's terminfo entries to use either BS
|
|
(<code>^H</code>, i.e., ASCII backspace) or DEL
|
|
(<code>^?</code>, or 127).</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<h3><a name="h3-portability" id=
|
|
"h3-portability">Portability</a></h3>
|
|
|
|
<h4><a name="h4-port-mingw" id="h4-port-mingw">MinGW</a></h4>
|
|
|
|
<p>Most of the portability-related work since <a href=
|
|
"http://invisible-island.net/ncurses/announce-5.9.html"><em class="small-caps">
|
|
ncurses</em> 5.9</a> extended and improved the MinGW port
|
|
introduced in <a href=
|
|
"http://invisible-island.net/ncurses/announce-5.8.html"><em class="small-caps">
|
|
ncurses</em> 5.8</a>.</p>
|
|
|
|
<p>The MinGW port can be readily cross-compiled:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>modified configure script to allow creating dll's for
|
|
MinGW when cross-compiling.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>enforced Windows-style path-separator if
|
|
cross-compiling,</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>added scripts for test-builds of cross-compiled packages
|
|
for ncurses6 to MinGW.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>added pc-files to the MinGW cross-compiling
|
|
test-packages.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>added script for building test-packages of binaries
|
|
cross-compiled to MinGW using NSIS.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>added <code>nc_mingw.h</code> to installed headers for
|
|
MinGW port; this is needed for cross-compiling <a href=
|
|
"http://invisible-island.net/ncurses/ncurses-examples.html">ncurses-examples</a>.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>added test-packages for cross-compiling ncurses-examples
|
|
using the MinGW test-packages.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>The MinGW-specific Windows driver accounts for several
|
|
changes:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>wide-character display is made usable by replacing MinGW's
|
|
non-working <code>wcrtomb</code> and <code>wctomb</code>
|
|
functions.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>implemented some display features: <a href=
|
|
"http://invisible-island.net/ncurses/man/curs_beep.3x.html">beep</a>,
|
|
<a href=
|
|
"http://invisible-island.net/ncurses/man/curs_beep.3x.html">flash</a>,
|
|
<a href=
|
|
"http://invisible-island.net/ncurses/man/curs_kernel.3x.html#h3-curs_set">
|
|
curs_set</a>.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>the driver handles repainting on endwin/refresh
|
|
combination.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>modified treatment of <code>TERM</code> variable for MinGW
|
|
port to allow explicit use of the Windows console driver by
|
|
checking if <code>$TERM</code> is set to
|
|
“<code>#win32console</code>” or an abbreviation
|
|
of that.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>the Windows driver also matches the special
|
|
<code>TERM</code> value “unknown”</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>the driver now returns characters for special keys, (like
|
|
<code>ansi.sys</code> does), when keypad mode is off, rather
|
|
than returning nothing at all.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>the driver checks a new environment variable <a href=
|
|
"http://invisible-island.net/ncurses/man/ncurses.3x.html#h3-NCURSES_CONSOLE2">
|
|
NCURSES_CONSOLE2</a> to optionally work around a deficiency
|
|
in <code>Console2</code> (and its descendent
|
|
<code>ConsoleZ</code>) which hang when an application creates
|
|
a console buffer.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>Finally, there are other improvements:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>MinGW is one of the configurations where <em class=
|
|
"small-caps">ncurses</em> installs by default into /usr</p>
|
|
</li>
|
|
|
|
<li>configuration for cross-compiling uses AC_CHECK_TOOLS in
|
|
preference to AC_PATH_PROGS when searching for ncurses*-config,
|
|
e.g., in Ada95/configure and test/configure.</li>
|
|
|
|
<li>
|
|
<p>extend Windows support to work with MSYS2;</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>this works with a scenario where there is an
|
|
ANSI-escape handler such as <code>ansicon</code> running
|
|
in the console window.</p>
|
|
</li>
|
|
|
|
<li>wrap <code>isatty</code> calls with a macro, provide a
|
|
corresponding set of support routines to address
|
|
differences between MinGW and MSYS2.</li>
|
|
</ul>
|
|
</li>
|
|
|
|
<li>
|
|
<p>ensure <code>WINVER</code> is defined in makefiles rather
|
|
than using headers.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>add check for the <code>gnatprep</code>
|
|
“<code>-T</code>” option.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>work around a bug introduced by <a href=
|
|
"http://stackoverflow.com/questions/20877689/gcc-4-8-1-minggw-d-option-does-not-work-as-usual">
|
|
gcc 4.8.1</a> in MinGW which breaks "trace" feature.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>add a driver-name method to each of the drivers.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<h4><a name="h4-port-systems" id="h4-port-systems">Other
|
|
ports</a></h4>
|
|
|
|
<p>These changes affect certain platforms (ports):</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>the configure script knows how to build shared libraries
|
|
with DragonFlyBSD and Interix.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>the shared-library suffix for AIX 5 and 6 is now
|
|
".so"</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>the <code>-brtl</code> option is used with AIX 5-7; it
|
|
is needed to link with the shared libraries.</p>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
|
|
<li>
|
|
<p>the configure <code>--enable-pc-files</code> option takes
|
|
into account the <a href=
|
|
"http://linux.die.net/man/1/pkg-config"><code>PKG_CONFIG_PATH</code></a>
|
|
variable.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>the configure option <code>--with-pkg-config-libdir</code>
|
|
provides control over the actual directory into which
|
|
pc-files are installed.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>the build scripts add explicit -ltinfo, etc., to the
|
|
generated ".pc" file when <code>ld</code> option
|
|
“<code>--as-needed</code>” is used, or when
|
|
ncurses and tinfo are installed without using rpath.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>the configure script disallows conflicting options
|
|
“<code>--with-termlib</code>” and
|
|
“<code>--enable-term-driver</code>”.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>the check for missing c++ compiler to work when no error
|
|
is reported, and no variables set is improved (see note for
|
|
<a href=
|
|
"http://invisible-island.net/ncurses/NEWS.html#t20021206">20021206</a>).</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>the misc/gen_edit.sh script selects a "linux" entry which
|
|
works with the current kernel rather than assuming it is
|
|
always "linux3.0"</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>the test/configure script makes it simpler to override
|
|
names of curses-related libraries, to help with linking with
|
|
pdcurses in MinGW environment.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>the configure-script/ifdef's allow the BSD OLD_TTY feature
|
|
to be suppressed if the type of <code>ospeed</code> is
|
|
configured using the option <code>--with-ospeed</code> to not
|
|
be a <code>short</code>. By default, it is a
|
|
<code>short</code> for termcap-compatibility.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>the MKlib_gen.sh script works around a recent change in
|
|
gcc 5 (released <a href=
|
|
"https://gcc.gnu.org/gcc-5/">mid-2015</a>) which essentially
|
|
emits multiple <code>#line</code> statements for the same
|
|
position in a file.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>the configure script works with Minix3.2 (see <a href=
|
|
"http://invisible-island.net/autoconf/portability-test.html">note</a>
|
|
on portability)</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>OS/2 redux:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>the configure script supports OS/2 kLIBC.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>the <code>--with-lib-prefix</code> option allows
|
|
configuring for old/new flavors of OS/2 EMX.</p>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
|
|
<li>
|
|
<p>improved configure-script checks for
|
|
<code>_XOPEN_SOURCE</code>:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>the definition works starting with Solaris 10.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>the definition is suppressed for IRIX64, since its
|
|
header files have a conflict versus
|
|
<code>_SGI_SOURCE</code>.</p>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<hr>
|
|
|
|
<h2><a name="h2-features" id="h2-features">Features of <em class=
|
|
"small-caps">ncurses</em></a></h2>
|
|
|
|
<p>The <em class="small-caps">ncurses</em> package is fully
|
|
upward-compatible with SVr4 (System V Release 4) curses:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>All of the SVr4 calls have been implemented (and are
|
|
documented).</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p><em class="small-caps">ncurses</em> 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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p><em class="small-caps">ncurses</em> provides these SVr4
|
|
add-on libraries (not part of X/Open Curses):</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>the panels library, supporting a stack of windows with
|
|
backing store.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>the menus library, supporting a uniform but flexible
|
|
interface for menu programming.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>the form library, supporting data collection through
|
|
on-screen forms.</p>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
|
|
<li>
|
|
<p><em class="small-caps">ncurses</em>'s terminal database is
|
|
fully compatible with that used by SVr4 curses.</p>
|
|
|
|
<ul>
|
|
<li><em class="small-caps">ncurses</em> supports
|
|
user-defined capabilities which it can see, but which are
|
|
hidden from SVr4 curses applications using the
|
|
<em>same</em> terminal database.</li>
|
|
|
|
<li>
|
|
<p>It can be optionally configured to match the format
|
|
used in related systems such as AIX and Tru64.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Alternatively, <em class="small-caps">ncurses</em> can
|
|
be configured to use hashed databases rather than the
|
|
directory of files used by SVr4 curses.</p>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The <em class="small-caps">ncurses</em> utilities have
|
|
options to allow you to filter terminfo entries for use with
|
|
less capable <em>curses</em>/<em>terminfo</em> versions such
|
|
as the HP/UX and AIX ports.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>The <em class="small-caps">ncurses</em> package also has many
|
|
useful extensions over SVr4:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>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).</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Unlike SVr3 curses, <em class="small-caps">ncurses</em>
|
|
can write to the rightmost-bottommost corner of the screen if
|
|
your terminal has an insert-character capability.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Ada95 and C++ bindings.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Support for mouse event reporting with X Window xterm and
|
|
FreeBSD and OS/2 console windows.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Extended mouse support via Alessandro Rubini's gpm
|
|
package.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The function <code>wresize</code> allows you to resize
|
|
windows, preserving their data.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The functions <code>keyok</code> and
|
|
<code>define_key</code> allow you to better control the use
|
|
of function keys, e.g., disabling the <em class=
|
|
"small-caps">ncurses</em> KEY_MOUSE, or by defining more than
|
|
one control sequence to map to a given key code.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Support for 256-color terminals, such as modern xterm.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Support for 16-color terminals, such as <em>aixterm</em>
|
|
and <em>modern xterm</em>.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Better cursor-movement optimization. The package now
|
|
features a cursor-local-movement computation more efficient
|
|
than either BSD's or System V's.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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
|
|
<code>quickch</code> routine.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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).</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The <a href=
|
|
"http://invisible-island.net/ncurses/man/tic.1m.html">tic</a>/<a href="http://invisible-island.net/ncurses/man/captoinfo.1m.html">captoinfo</a>
|
|
utility provided with <em class="small-caps">ncurses</em> has
|
|
the ability to translate many termcaps from the XENIX, IBM
|
|
and AT&T extension sets.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>A BSD-like <a href=
|
|
"http://invisible-island.net/ncurses/man/tset.1.html">tset</a>
|
|
utility is provided.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The <em class="small-caps">ncurses</em> 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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.)</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The table-of-entries utility <a href=
|
|
"http://invisible-island.net/ncurses/man/toe.1m.html">toe</a>
|
|
makes it easy for users to see exactly what terminal types
|
|
are available on the system.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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>.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Extensive documentation is provided (see the <em><a href=
|
|
"http://invisible-island.net/ncurses/ncurses.faq.html#additional_reading">
|
|
Additional Reading</a></em> section of the <em><a href=
|
|
"http://invisible-island.net/ncurses/ncurses.faq.html"><em class="small-caps">
|
|
ncurses</em> FAQ</a></em> for online documentation).</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<h2><a name="h2-who-uses" id="h2-who-uses">Applications using
|
|
<em class="small-caps">ncurses</em></a></h2>
|
|
|
|
<p>The <em class="small-caps">ncurses</em> distribution includes
|
|
a selection of test programs (including a few games). These are
|
|
available separately as <a href=
|
|
"http://invisible-island.net/ncurses/ncurses-examples.html">ncurses-examples</a></p>
|
|
|
|
<p>The ncurses library has been tested with a wide variety of
|
|
applications including:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt>cdk</dt>
|
|
|
|
<dd>
|
|
<p>Curses Development Kit</p>
|
|
|
|
<p><a href=
|
|
"http://invisible-island.net/cdk/">http://invisible-island.net/cdk/</a><br>
|
|
</p>
|
|
</dd>
|
|
|
|
<dt>ded</dt>
|
|
|
|
<dd>
|
|
<p>directory-editor</p>
|
|
|
|
<p><a href=
|
|
"http://invisible-island.net/ded/">http://invisible-island.net/ded/</a></p>
|
|
</dd>
|
|
|
|
<dt>dialog</dt>
|
|
|
|
<dd>
|
|
<p>the underlying application used in Slackware's setup,
|
|
and the basis for similar install/configure applications on
|
|
many systems.</p>
|
|
|
|
<p><a href=
|
|
"http://invisible-island.net/dialog/">http://invisible-island.net/dialog/</a></p>
|
|
</dd>
|
|
|
|
<dt>lynx</dt>
|
|
|
|
<dd>
|
|
<p>the text WWW browser</p>
|
|
|
|
<p><a href=
|
|
"http://lynx.isc.org/">http://lynx.isc.org/</a></p>
|
|
</dd>
|
|
|
|
<dt>Midnight Commander</dt>
|
|
|
|
<dd>
|
|
<p>file manager</p>
|
|
|
|
<p><a href=
|
|
"http://www.midnight-commander.org/">http://www.midnight-commander.org/</a></p>
|
|
</dd>
|
|
|
|
<dt>mutt</dt>
|
|
|
|
<dd>
|
|
<p>mail utility</p>
|
|
|
|
<p><a href=
|
|
"http://www.mutt.org/">http://www.mutt.org/</a></p>
|
|
</dd>
|
|
|
|
<dt>ncftp</dt>
|
|
|
|
<dd>
|
|
<p>file-transfer utility</p>
|
|
|
|
<p><a href=
|
|
"http://www.ncftp.com/">http://www.ncftp.com/</a></p>
|
|
</dd>
|
|
|
|
<dt>nvi</dt>
|
|
|
|
<dd>
|
|
<p>New vi uses ncurses.</p>
|
|
|
|
<p><a href=
|
|
"https://sites.google.com/a/bostic.com/keithbostic/nvi">https://sites.google.com/a/bostic.com/keithbostic/nvi</a><br>
|
|
</p>
|
|
</dd>
|
|
|
|
<dt>tin</dt>
|
|
|
|
<dd>
|
|
<p>newsreader, supporting color, MIME</p>
|
|
|
|
<p><a href=
|
|
"http://www.tin.org/">http://www.tin.org/</a></p>
|
|
</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p>as well as some that use <em class="small-caps">ncurses</em>
|
|
for the terminfo support alone:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt>minicom</dt>
|
|
|
|
<dd>
|
|
<p>terminal emulator for serial modem connections</p>
|
|
|
|
<p><a href=
|
|
"http://alioth.debian.org/projects/minicom/">http://alioth.debian.org/projects/minicom/</a></p>
|
|
</dd>
|
|
|
|
<dt>mosh</dt>
|
|
|
|
<dd>
|
|
<p>a replacement for <code>ssh</code>.</p>
|
|
|
|
<p><a href=
|
|
"https://mosh.mit.edu/">https://mosh.mit.edu/</a></p>
|
|
</dd>
|
|
|
|
<dt>tack</dt>
|
|
|
|
<dd>
|
|
<p>terminfo action checker</p>
|
|
|
|
<p><a href=
|
|
"http://invisible-island.net/ncurses/tack.html">http://invisible-island.net/ncurses/tack.html</a></p>
|
|
</dd>
|
|
|
|
<dt>tmux</dt>
|
|
|
|
<dd>
|
|
<p>terminal multiplexor</p>
|
|
|
|
<p><a href=
|
|
"http://tmux.github.io/">http://tmux.github.io/</a></p>
|
|
</dd>
|
|
|
|
<dt>vile</dt>
|
|
|
|
<dd>
|
|
<p>vi-like-emacs may be built to use the terminfo, termcap
|
|
or curses interfaces.</p>
|
|
|
|
<p><a href=
|
|
"http://invisible-island.net/vile/">http://invisible-island.net/vile/</a></p>
|
|
</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p>and finally, those which use only the termcap interface:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt>emacs</dt>
|
|
|
|
<dd>
|
|
<p>text editor</p>
|
|
|
|
<p><a href=
|
|
"http://www.gnu.org/software/emacs/">http://www.gnu.org/software/emacs/</a></p>
|
|
</dd>
|
|
|
|
<dt>screen</dt>
|
|
|
|
<dd>
|
|
<p>terminal multiplexor</p>
|
|
|
|
<p><a href=
|
|
"http://www.gnu.org/software/screen/">http://www.gnu.org/software/screen/</a></p>
|
|
</dd>
|
|
|
|
<dt>vim</dt>
|
|
|
|
<dd>
|
|
<p>text editor</p>
|
|
|
|
<p><a href=
|
|
"http://www.vim.org/">http://www.vim.org/</a></p>
|
|
</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<h2><a name="h2-development" id="h2-development">Development
|
|
activities</a></h2>
|
|
|
|
<p>Zeyd Ben-Halim started <em class="small-caps">ncurses</em>
|
|
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
|
|
<a href="mailto:dickey@invisible-island.net">Thomas Dickey</a>.
|
|
Thomas Dickey also acts as the maintainer for the Free Software
|
|
Foundation, which holds the <a href=
|
|
"http://invisible-island.net/ncurses/ncurses-license.html">copyright
|
|
on ncurses</a>.</p>
|
|
|
|
<p>Contact the current maintainers at</p>
|
|
|
|
<blockquote>
|
|
<a href="mailto:bug-ncurses@gnu.org">bug-ncurses@gnu.org</a>
|
|
</blockquote>
|
|
|
|
<p>To join the ncurses mailing list, please write email to</p>
|
|
|
|
<blockquote>
|
|
<a href=
|
|
"mailto:bug-ncurses-request@gnu.org">bug-ncurses-request@gnu.org</a>
|
|
</blockquote>containing the line:
|
|
|
|
<blockquote>
|
|
<p><code>subscribe</code>
|
|
<em><name>@<host.domain></em></p>
|
|
</blockquote>
|
|
|
|
<p>This list is open to anyone interested in helping with the
|
|
development and testing of this package.</p>
|
|
|
|
<p>Beta versions of <em class="small-caps">ncurses</em> and
|
|
patches to the current release are made available at</p>
|
|
|
|
<blockquote>
|
|
<p><a href=
|
|
"ftp://invisible-island.net/ncurses/">ftp://invisible-island.net/ncurses/</a> .</p>
|
|
</blockquote>
|
|
|
|
<p>There is an archive of the mailing list here:</p>
|
|
|
|
<blockquote>
|
|
<p><a href=
|
|
"http://lists.gnu.org/archive/html/bug-ncurses">http://lists.gnu.org/archive/html/bug-ncurses</a>
|
|
(also <a href=
|
|
"https://lists.gnu.org/archive/html/bug-ncurses">https</a>)</p>
|
|
</blockquote>
|
|
|
|
<h2><a name="h2-this-stuff" id="h2-this-stuff">Related
|
|
resources</a></h2>
|
|
|
|
<p>The release notes make scattered references to these pages,
|
|
which may be interesting by themselves:</p>
|
|
|
|
<ul>
|
|
<li><a href=
|
|
"http://invisible-island.net/scripts/man2html.html">man2html</a></li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.nethttp://invisible-island.net/ncurses/ncurses-license.html">
|
|
<em class="small-caps">ncurses</em> licensing</a></li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/ncurses-mapsyms.html">Symbol
|
|
versioning in <em class="small-caps">ncurses</em></a></li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/ncurses-mingw.html">The
|
|
MinGW port of <em class="small-caps">ncurses</em></a></li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/tack.html">tack –
|
|
terminfo action checker</a></li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/autoconf/portability-tar.html">tar
|
|
versus portability</a></li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/tctest.html">tctest
|
|
– termcap library checker</a></li>
|
|
|
|
<li><a href=
|
|
"http://invisible-island.net/ncurses/ncurses.html#download_database">
|
|
Terminal Database</a></li>
|
|
</ul>
|
|
|
|
<h2><a name="h2-other-stuff" id="h2-other-stuff">Other
|
|
resources</a></h2>
|
|
|
|
<p>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> . 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>
|
|
|
|
<p>You can find lots of information on terminal-related topics
|
|
not covered in the terminfo file at <a href=
|
|
"http://web.archive.org/web/*/http://www.cs.utk.edu/~shuford/terminal">
|
|
Richard Shuford's archive</a> .</p>
|
|
|
|
<div class="nav">
|
|
<ul>
|
|
<li><a href="#h2-overview">Overview</a></li>
|
|
|
|
<li>
|
|
<a href="#h2-release-notes">Release Notes</a>
|
|
|
|
<ul>
|
|
<li>
|
|
<a href="#h3-library">Library improvements</a>
|
|
|
|
<ul>
|
|
<li><a href="#h3-lib-setbuf">Output
|
|
buffering</a></li>
|
|
|
|
<li><a href="#h3-lib-versioning">Symbol
|
|
versioning</a></li>
|
|
|
|
<li><a href="#h3-lib-other">Miscellaneous</a></li>
|
|
</ul>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="#h3-programs">Program improvements</a>
|
|
|
|
<ul>
|
|
<li><a href="#h4-utilities">Utilities</a></li>
|
|
|
|
<li><a href="#h4-examples">Examples</a></li>
|
|
</ul>
|
|
</li>
|
|
|
|
<li><a href="#h3-database">Terminal database</a></li>
|
|
|
|
<li><a href="#h3-documentation">Documentation</a></li>
|
|
|
|
<li><a href="#h3-bug-fixes">Interesting
|
|
bug-fixes</a></li>
|
|
|
|
<li>
|
|
<a href="#h3-config-config">Configuration changes</a>
|
|
|
|
<ul>
|
|
<li><a href="#h4-config-major">Major changes</a></li>
|
|
|
|
<li><a href="#h4-config-options">Configuration
|
|
options</a></li>
|
|
</ul>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="#h3-portability">Portability</a>
|
|
|
|
<ul>
|
|
<li><a href="#h4-port-mingw">MinGW</a></li>
|
|
|
|
<li><a href="#h4-port-systems">Other ports</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
|
|
<li><a href="#h2-features">Features of <em class=
|
|
"small-caps">ncurses</em></a></li>
|
|
|
|
<li><a href="#h2-who-uses">Applications using <em class=
|
|
"small-caps">ncurses</em></a></li>
|
|
|
|
<li><a href="#h2-development">Development activities</a></li>
|
|
|
|
<li><a href="#h2-this-stuff">Related resources</a></li>
|
|
|
|
<li><a href="#h2-other-stuff">Other resources</a></li>
|
|
</ul>
|
|
</div>
|
|
</body>
|
|
</html>
|