ncurses 6.0 - patch 20150808
[ncurses.git] / doc / html / announce.html
1 <!--
2   @Id: announce.html.in,v 1.90 2015/08/08 18:39:58 tom Exp @
3   ****************************************************************************
4   * Copyright (c) 1998-2013,2015 Free Software Foundation, Inc.              *
5   *                                                                          *
6   * Permission is hereby granted, free of charge, to any person obtaining a  *
7   * copy of this software and associated documentation files (the            *
8   * "Software"), to deal in the Software without restriction, including      *
9   * without limitation the rights to use, copy, modify, merge, publish,      *
10   * distribute, distribute with modifications, sublicense, and/or sell       *
11   * copies of the Software, and to permit persons to whom the Software is    *
12   * furnished to do so, subject to the following conditions:                 *
13   *                                                                          *
14   * The above copyright notice and this permission notice shall be included  *
15   * in all copies or substantial portions of the Software.                   *
16   *                                                                          *
17   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
18   * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
19   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
20   * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
21   * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
22   * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
23   * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
24   *                                                                          *
25   * Except as contained in this notice, the name(s) of the above copyright   *
26   * holders shall not be used in advertising or otherwise to promote the     *
27   * sale, use or other dealings in this Software without prior written       *
28   * authorization.                                                           *
29   ****************************************************************************
30 -->
31 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
32
33 <html>
34 <head>
35   <meta name="generator" content=
36   "HTML Tidy for Linux (vers 25 March 2009), see www.w3.org">
37
38   <title>Announcing ncurses 6.0</title>
39   <link rev="made" href="mailto:bug-ncurses@gnu.org">
40   <meta http-equiv="Content-Type" content=
41   "text/html; charset=us-ascii">
42   <style type="text/css">
43 p,li { max-width:700px; }
44   dd { max-width:630px; }
45   </style>
46 </head>
47
48 <body>
49   <h1 class="no-header">Announcing ncurses 6.0</h1>
50
51   <h2><a name="h2-overview" id="h2-overview">Overview</a></h2>
52
53   <p>The <em class="small-caps">ncurses</em> (new curses) library
54   is a free software emulation of curses in System V Release 4.0
55   (SVr4), and more. It uses terminfo format, supports pads and
56   color and multiple highlights and forms characters and
57   function-key mapping, and has all the other SVr4-curses
58   enhancements over BSD curses. SVr4 curses is better known today
59   as X/Open Curses.</p>
60
61   <p>In mid-June 1995, the maintainer of 4.4BSD curses declared
62   that he considered 4.4BSD curses obsolete, and encouraged the
63   keepers of <em class="small-caps">unix</em> releases such as
64   BSD/OS, FreeBSD and NetBSD to switch over to <em class=
65   "small-caps">ncurses</em>.</p>
66
67   <p>Since 1995, <em class="small-caps">ncurses</em> has been
68   ported to many systems:</p>
69
70   <ul>
71     <li>It is used in almost every system based on the Linux kernel
72     (aside from some embedded applications).</li>
73
74     <li>It is used as the system curses library on OpenBSD, FreeBSD
75     and OSX.</li>
76
77     <li>It is used in environments such as Cygwin and MinGW. The
78     first of these was EMX on OS/2 Warp.</li>
79
80     <li>It is used (though usually not as the <em>system</em>
81     curses) on all of the vendor <em class="small-caps">unix</em>
82     systems, e.g., AIX, HP-UX, IRIX64, SCO, Solaris, Tru64.</li>
83
84     <li>It should work readily on any ANSI/POSIX-conforming
85     <em class="small-caps">unix</em>.</li>
86   </ul>
87
88   <p>The distribution includes the library and support utilities,
89   including</p>
90
91   <ul>
92     <li><a href=
93     "http://invisible-island.net/ncurses/man/captoinfo.1m.html">captoinfo</a>,
94     a termcap conversion tool</li>
95
96     <li><a href=
97     "http://invisible-island.net/ncurses/man/clear.1.html">clear</a>,
98     utility for clearing the screen</li>
99
100     <li><a href=
101     "http://invisible-island.net/ncurses/man/infocmp.1m.html">infocmp</a>,
102     the terminfo decompiler</li>
103
104     <li><a href=
105     "http://invisible-island.net/ncurses/man/tabs.1.html">tabs</a>,
106     set tabs on a terminal</li>
107
108     <li><a href=
109     "http://invisible-island.net/ncurses/man/tic.1m.html">tic</a>,
110     the terminfo compiler</li>
111
112     <li><a href=
113     "http://invisible-island.net/ncurses/man/toe.1m.html">toe</a>,
114     list (table of) terminfo entries</li>
115
116     <li><a href=
117     "http://invisible-island.net/ncurses/man/tput.1.html">tput</a>,
118     utility for retrieving terminal capabilities in shell
119     scripts</li>
120
121     <li><a href=
122     "http://invisible-island.net/ncurses/man/tset.1.html">tset</a>,
123     to initialize the terminal</li>
124   </ul>
125
126   <p>Full manual pages are provided for the library and tools.</p>
127
128   <p>The <em class="small-caps">ncurses</em> distribution is
129   available via anonymous FTP at the GNU distribution site</p>
130
131   <blockquote>
132     <p><a href=
133     "ftp://ftp.gnu.org/gnu/ncurses/">ftp://ftp.gnu.org/gnu/ncurses/</a>&nbsp;.</p>
134   </blockquote>It is also available at
135
136   <blockquote>
137     <p><a href=
138     "ftp://invisible-island.net/ncurses/">ftp://invisible-island.net/ncurses/</a>&nbsp;.</p>
139   </blockquote>
140
141   <h2><a name="h2-release-notes" id="h2-release-notes">Release
142   Notes</a></h2>
143
144   <p>These notes are for <em class="small-caps">ncurses</em>
145   6.0, released <strong>August 8, 2015</strong>.</p>
146
147   <p>This release is designed to be source-compatible with
148   <em class="small-caps">ncurses</em> 5.0 through 5.9; providing a
149   new application binary interface (ABI). Although the source can
150   still be configured to support the <em class=
151   "small-caps">ncurses</em> 5 ABI, the intent of the release is to
152   provide extensions which are generally useful, but
153   binary-incompatible with <em class="small-caps">ncurses</em>
154   5:</p>
155
156   <ul>
157     <li>
158       <p>Extend the <code>cchar_t</code> structure to allow more
159       than 16 colors to be encoded.</p>
160     </li>
161
162     <li>
163       <p>Modify the encoding of mouse state to make room for a 5th
164       mouse button. That allows one to use <em class=
165       "small-caps">ncurses</em> with a wheel mouse with xterm or
166       similar X terminal emulators.</p>
167     </li>
168   </ul>
169
170   <p>There are, of course, numerous other improvements,
171   including</p>
172
173   <ul>
174     <li>
175       <p>fixes made based on the Clang and Coverity static
176       analyzers.</p>
177     </li>
178
179     <li>
180       <p>memory leak fixes using Valgrind</p>
181     </li>
182   </ul>
183
184   <p>The release notes mention some bug-fixes, but are focused on
185   new features and improvements to existing features log since
186   <em class="small-caps">ncurses</em> 5.9 release.</p>
187
188   <p>While the intent of the release is to provide a new stable
189   ABI, there are other development activities which are summarized
190   below.</p>
191
192   <ul>
193     <li>
194       <p>The original release plan, e.g., for "5.10" was to improve
195       the MinGW port. Ultimately that was completed (wide-character
196       support, mouse, etc), but was deferred to focus on termcap
197       support and performance issues. Also, pinpointing the
198       problems with <code>Console2</code> took a while.</p>
199     </li>
200
201     <li>
202       <p>A review of termcap compatibility in 2011 led to several
203       minor fixes in the library and improvements to utilities. To
204       do this properly, a review of the various extent termcap
205       implementations was needed.</p>
206
207       <p>The <a href=
208       "http://invisible-island.net/ncurses/tctest.html">termcap
209       library checker (tctest)</a> (not part of <em class=
210       "small-caps">ncurses</em>) was one result. A followup review
211       of performance using <a href=
212       "http://invisible-island.net/ncurses/ncurses-examples.html">ncurses-examples</a>
213       in 2014 led to additional improvements.</p>
214     </li>
215
216     <li>
217       <p>Output buffering provided a further, but worthwhile
218       distraction. A bug report in 2012 regarding the use of signal
219       handlers in <em class="small-caps">ncurses</em>) pointed out
220       <a href=
221       "http://lists.gnu.org/archive/html/bug-ncurses/2012-07/msg00029.html">
222       a problem</a> with the use of unsafe functions for handling
223       <code>SIGTSTP</code>. Other signals could be addressed with
224       workarounds; repairing <code>SIGTSTP</code> required a
225       different approach. The solution required changing internal
226       behavior of the library: how it handles output buffering.</p>
227
228       <p>Now <em class="small-caps">ncurses</em> buffers its own
229       output, independently of the standard output. A few
230       applications relied upon the library's direct reuse of the
231       standard output buffering; however that is
232       <em>unspecified</em> behavior and has never been a
233       recommended practice. Identifying these applications as well
234       as refining the change to permit low-level applications to
235       work consistently took time.</p>
236     </li>
237
238     <li>
239       <p>Since the introduction of the experimental support for 256
240       colors early in <a href=
241       "http://invisible-island.net/ncurses/NEWS.html#t20050101">2005</a>
242       (released in <a href=
243       "http://invisible-island.net/ncurses/announce-5.5.html">ncurses
244       5.5</a>), there has been increased user interest. Almost all
245       packagers continue providing the ncurses ABI 5 which cannot
246       support 256 colors.</p>
247     </li>
248
249     <li>
250       <p>Symbol versioning, or the lack of it in ncurses, is the
251       main reason why packagers would be reluctant to add a new
252       ncurses ABI.</p>
253
254       <p>This release provides the new ABI along with
255       script-generated lists of versioned symbols which can be used
256       for both ABI 5 and 6 (with distinct names to keep the two
257       separate). This took time to development, as reported in
258       <a href=
259       "http://invisible-island.net/ncurses/ncurses-mapsyms.html">Symbol
260       versioning in <em class="small-caps">ncurses</em></a>.</p>
261     </li>
262   </ul>
263
264   <h3><a name="h3-library" id="h3-library">Library
265   improvements</a></h3>
266
267   <h3><a name="h3-lib-setbuf" id="h3-lib-setbuf">Output
268   buffering</a></h3>
269
270   <p>X/Open curses provides more than one initialization
271   function:</p>
272
273   <ul>
274     <li><a href=
275     "http://invisible-island.net/ncurses/man/curs_initscr.3x.html#h3-initscr">
276     initscr</a> (the simplest) accepts no parameters.</li>
277
278     <li><a href=
279     "http://invisible-island.net/ncurses/man/curs_initscr.3x.html#h3-newterm">
280     newterm</a> accepts parameters for the stream input and
281     output</li>
282
283     <li><a href=
284     "http://invisible-island.net/ncurses/man/curs_terminfo.3x.html#h3-Initialization">
285     setupterm</a> (the low-level function) accepts a parameter for
286     the <em>file descriptor</em> of the output.</li>
287   </ul>
288
289   <p>They are documented in X/Open <em>as if</em>
290   <code>initscr</code> calls <code>newterm</code> using
291   <code>stdout</code> for output stream, and in turn
292   <code>newterm</code> calls <code>setupterm</code> using
293   <code>fileno(stdout)</code> for the file descriptor. As long as
294   an implementation acts <em>as if</em> it does this, it conforms.
295   In practice, implementations do what is implied. This creates a
296   problem: the low-level <code>setupterm</code> function's file
297   descriptor is unbuffered, while <code>newterm</code> implies
298   buffered output. X/Open Curses says that all output is done
299   through the file descriptor, and does not say how the output
300   stream is actually used.</p>
301
302   <p>Initially, <em class="small-caps">ncurses</em> used the file
303   descriptor (obtained from the output stream passed to
304   <code>newterm</code>) for changing the terminal modes, and relied
305   upon the output parameter of <code>newterm</code> for buffered
306   output. Later (to avoid using unsafe buffered I/O in signal
307   handlers), <em class="small-caps">ncurses</em> was modified to
308   use the file descriptor (unbuffered output) when cleaning up on
309   receipt of a signal. Otherwise (when not handling a signal), it
310   continued to use the buffered output.</p>
311
312   <p>That approach worked reasonably well and as a side effect,
313   using the same buffered output as an application might use for
314   <code>printf</code> meant that no flushing was needed when
315   switching between normal- and screen-modes.</p>
316
317   <p>There were a couple of problems:</p>
318
319   <ul>
320     <li>
321       <p>to get good performance, curses (not only <em class=
322       "small-caps">ncurses</em>, but SVr4 curses in general) set an
323       output buffer using <code>setbuf</code> or similar function.
324       There is no standard (or portable) way to turn that output
325       buffer off, and revert to line-buffering. The <code><a href=
326       "http://invisible-island.net/ncurses/man/ncurses.3x.html#h3-NCURSES_NO_SETBUF">
327       NCURSES_NO_SETBUF</a></code> environment variable did make it
328       optional.</p>
329     </li>
330
331     <li>
332       <p>to handle <code>SIGTSTP</code> (the &ldquo;stop&rdquo;
333       signal), <em class="small-caps">ncurses</em> relied upon
334       unsafe functions. That is, due to the complexity of the
335       feature, it relied upon reusing existing functions which
336       should not have been called via the signal handler.</p>
337     </li>
338   </ul>
339
340   <p>Conveniently, solving the second problem (by making <em class=
341   "small-caps">ncurses</em> do its <em>own</em> output buffering)
342   also fixed the first one. But there were special cases to
343   resolve: <a href=
344   "http://invisible-island.net/ncurses/man/curs_terminfo.3x.html"><em>
345   low-level</em></a> functions such as mvcur, putp, vidattr
346   explicitly use the standard output. Those functions were reused
347   internally, and required modification to distinguish whether they
348   were used by the high-level or low-level interfaces.</p>
349
350   <p>Finally, there may still be a few programs which should be
351   modified to improve their portability, e.g., adding an</p>
352
353   <blockquote>
354     <pre class="code-block">
355 fflush(stdout);
356 </pre>
357   </blockquote>
358
359   <p>when switching from &ldquo;<a href=
360   "http://invisible-island.net/ncurses/man/curs_kernel.3x.html#h3-reset_prog_mode_-reset_shell_mode">shell</a>&rdquo;
361   mode to &ldquo;<a href=
362   "http://invisible-island.net/ncurses/man/curs_kernel.3x.html#h3-reset_prog_mode_-reset_shell_mode">program</a>&rdquo;
363   (curses) mode. Those are fairly rare because most programmers
364   have learned not to mix <code>printf</code> and <code><a href=
365   "http://invisible-island.net/ncurses/man/curs_printw.3x.html">printw</a></code>.</p>
366
367   <h3><a name="h3-lib-versioning" id="h3-lib-versioning">Symbol
368   versioning</a></h3>
369
370   <p>This release introduces symbol-versioning to <em class=
371   "small-caps">ncurses</em> because without it, the change of ABI
372   would be less successful. A lengthy discussion will be presented
373   in <a href=
374   "http://invisible-island.net/ncurses/ncurses-mapsyms.html">Symbol
375   versioning in <em class="small-caps">ncurses</em></a>. These
376   notes summarize what has changed, and what can be done with the
377   new release.</p>
378
379   <p>Symbol-versioning allows the developers of a library to mark
380   each public symbol (both data and functions) with an identifier
381   denoting the library name and the version for which it was built.
382   By doing this, users of the library have a way to help ensure
383   that applications do not accidentally load an incompatible
384   library. In addition, private symbols can be hidden entirely.</p>
385
386   <p>This release provides sample files for the four principal
387   configurations of <em class="small-caps">ncurses</em> libraries:
388   <code>ncurses</code>, <code>ncursesw</code>,
389   <code>ncursest</code> and <code>ncursestw</code>. Each sample is
390   given in two forms:</p>
391
392   <blockquote>
393     <dl>
394       <dt>&ldquo;<code>.map</code>&rdquo;</dt>
395
396       <dd>These list all public symbols, together with version
397       names.</dd>
398
399       <dt>&ldquo;<code>.sym</code>&rdquo;</dt>
400
401       <dd>These list all public symbols, without version
402       names.</dd>
403     </dl>
404   </blockquote>
405
406   <p>The sample files are <em>generated</em> by scripts which take
407   into account a few special cases such as <a href=
408   "http://invisible-island.net/ncurses/tack.html">tack</a> to omit
409   many of the <em class="small-caps">ncurses</em> private symbols
410   (beginning with &ldquo;<code>_nc_</code>&rdquo;). Here are
411   counts of globals versus locals:</p>
412
413   <blockquote>
414     <table border="1" summary="Total global and local symbols">
415       <tr>
416         <th>Config</th>
417
418         <th>Symbols</th>
419
420         <th>Globals</th>
421
422         <th>Locals</th>
423
424         <th>"_nc_"</th>
425       </tr>
426
427       <tr>
428         <td>ncurses</td>
429
430         <td align="right">976</td>
431
432         <td align="right">796</td>
433
434         <td align="right">180</td>
435
436         <td align="right">332</td>
437       </tr>
438
439       <tr>
440         <td>ncursesw</td>
441
442         <td align="right">1089</td>
443
444         <td align="right">905</td>
445
446         <td align="right">184</td>
447
448         <td align="right">343</td>
449       </tr>
450
451       <tr>
452         <td>ncursest</td>
453
454         <td align="right">979</td>
455
456         <td align="right">804</td>
457
458         <td align="right">175</td>
459
460         <td align="right">358</td>
461       </tr>
462
463       <tr>
464         <td>ncursestw</td>
465
466         <td align="right">1098</td>
467
468         <td align="right">914</td>
469
470         <td align="right">184</td>
471
472         <td align="right">372</td>
473       </tr>
474     </table>
475   </blockquote>
476
477   <p>Although only four sample configurations are presented, each
478   is formed by merging symbols from several combinations of
479   configure-script options, taking into account advice from
480   downstream packagers. Because they are formed by merging, the
481   sample files may list a symbol which is not in a given package.
482   That is expected. The samples have been tested and are working
483   with systems (such as Fedora, FreeBSD and Debian) which fully
484   support this feature. There are other systems which do
485   <em>not</em> support the feature, and a few (such as Solaris)
486   which provide incomplete support.</p>
487
488   <p>The version-naming convention used allows these sample files
489   to build distinct libraries for ABI 5 and 6. Version names
490   consist of</p>
491
492   <ul>
493     <li>
494       <p>configuration name, e.g.,
495       &ldquo;<code>NCURSESW</code>&rdquo; for the wide-character
496       libraries</p>
497     </li>
498
499     <li>
500       <p>ABI version (if not 5)</p>
501     </li>
502
503     <li>
504       <p>library name for two special cases which have the same
505       interface across configurations:
506       &ldquo;<code>TINFO</code>&rdquo; and
507       &ldquo;<code>TIC</code>&rdquo;</p>
508     </li>
509
510     <li>
511       <p>release version</p>
512     </li>
513
514     <li>
515       <p>patch date (for the release version)</p>
516     </li>
517   </ul>
518
519   <p>For example, running <code>nm -D</code> on the libraries in
520   the ncurses6 test package shows these symbol-versions:</p>
521
522   <blockquote>
523     <pre class="code-block">
524 0000000000000000 A NCURSES6_TIC_5.0.19991023
525 0000000000000000 A NCURSES6_TIC_5.1.20000708
526 0000000000000000 A NCURSES6_TIC_5.5.20051010
527 0000000000000000 A NCURSES6_TIC_5.7.20081102
528 0000000000000000 A NCURSES6_TIC_5.9.20150530
529 0000000000000000 A NCURSES6_TINFO_5.0.19991023
530 0000000000000000 A NCURSES6_TINFO_5.1.20000708
531 0000000000000000 A NCURSES6_TINFO_5.2.20001021
532 0000000000000000 A NCURSES6_TINFO_5.3.20021019
533 0000000000000000 A NCURSES6_TINFO_5.4.20040208
534 0000000000000000 A NCURSES6_TINFO_5.5.20051010
535 0000000000000000 A NCURSES6_TINFO_5.6.20061217
536 0000000000000000 A NCURSES6_TINFO_5.7.20081102
537 0000000000000000 A NCURSES6_TINFO_5.8.20110226
538 0000000000000000 A NCURSES6_TINFO_5.9.20150530
539 0000000000000000 A NCURSESW6_5.1.20000708
540 0000000000000000 A NCURSESW6_5.3.20021019
541 0000000000000000 A NCURSESW6_5.4.20040208
542 0000000000000000 A NCURSESW6_5.5.20051010
543 0000000000000000 A NCURSESW6_5.6.20061217
544 0000000000000000 A NCURSESW6_5.7.20081102
545 0000000000000000 A NCURSESW6_5.8.20110226
546 0000000000000000 A NCURSESW6_5.9.20150530
547 </pre>
548   </blockquote>
549
550   <p>As a special case, this release (which makes the final change
551   for ABI 5) is marked with release version 5.9 and patch date
552   20150530.</p>
553
554   <h3><a name="h3-lib-other" id=
555   "h3-lib-other">Miscellaneous</a></h3>
556
557   <p>The new release has several improvements for performance and
558   building. For instance:</p>
559
560   <ul>
561     <li>
562       <p>several files in ncurses- and progs-directories were
563       modified to allow <code>const</code> data used in internal
564       tables to be put by the linker into the readonly text
565       segment.</p>
566     </li>
567
568     <li>
569       <p>various improvements were made to building the Ada95
570       binding, both in simplifying the generated files as well as
571       improving the way it uses <code>gnatmake</code></p>
572     </li>
573   </ul>
574
575   <p>There are also new features in the libraries:</p>
576
577   <ul>
578     <li>added <a href=
579     "http://invisible-island.net/ncurses/man/curs_util.3x.html#h3-use_tioctl">
580     use_tioctl</a> function</li>
581
582     <li>
583       <p>added <a href=
584       "http://invisible-island.net/ncurses/man/curs_opaque.3x.html">
585       wgetdelay</a> to retrieve _delay member of WINDOW if it
586       happens to be opaque, e.g., in the pthread configuration.</p>
587     </li>
588
589     <li>
590       <p>added <a href=
591       "http://invisible-island.net/ncurses/man/curs_attr.3x.html#h2-PORTABILITY">
592       A_ITALIC</a> extension.</p>
593     </li>
594
595     <li>
596       <p>added form library extension <a href=
597       "http://invisible-island.net/ncurses/man/form_field_opts.3x.html">
598       O_DYNAMIC_JUSTIFY</a> option which can be used to override
599       the different treatment of justification for static versus
600       dynamic fields .</p>
601     </li>
602
603     <li>
604       <p>rewrote <a href=
605       "http://invisible-island.net/ncurses/man/curs_util.3x.html#h3-putwin_getwin">
606       putwin</a> and <a href=
607       "http://invisible-island.net/ncurses/man/curs_util.3x.html#h3-putwin_getwin">
608       getwin</a>, making an extended version which is capable of
609       reading screen-dumps between the wide/normal <em class=
610       "small-caps">ncurses</em> configurations. These are text
611       files, except for a <em>magic</em> code at the beginning:</p>
612
613       <blockquote>
614         <pre class="code-block">
615 0       string          \210\210        Screen-dump (ncurses)
616 </pre>
617       </blockquote>
618     </li>
619
620     <li>
621       <p>several changes to mouse support include:</p>
622
623       <ul>
624         <li>added decoder for xterm SGR 1006 mouse mode.</li>
625
626         <li>added experimental support for
627         &ldquo;<code>%u</code>&rdquo; format to terminfo.</li>
628
629         <li>improved behavior of wheel-mice for xterm protocol:
630         noting that there are only button-presses for buttons
631         &ldquo;4&rdquo; and &ldquo;5&rdquo;, so there is no need to
632         wait to combine events into double-clicks .</li>
633       </ul>
634     </li>
635   </ul>
636
637   <p>There are a few new configure options dealing with library
638   customization:</p>
639
640   <ul>
641     <li>
642       <p>add &ldquo;<code>--enable-ext-putwin</code>&rdquo;
643       configure option to turn on the extended putwin/getwin. By
644       default, this is enabled for ABI 6 and disabled with ABI
645       5.</p>
646     </li>
647
648     <li>
649       <p>add &ldquo;<code>--enable-string-hacks</code>&rdquo;
650       option to control whether strlcat and strlcpy may be used.
651       Because <em class="small-caps">ncurses</em> already does the
652       requisite buffer-limit checks, this feature is mainly of
653       interest to quiet compiler-warnings on a few systems.</p>
654     </li>
655
656     <li>
657       <p>add configure option
658       &ldquo;<code>--with-tparm-arg</code>&rdquo; to allow <a href=
659       "http://invisible-island.net/ncurses/man/curs_terminfo.3x.html#h3-Formatting-Output">
660       tparm</a>'s parameters to be something more likely to be the
661       same size as a pointer, e.g., <code>intptr_t</code> (again,
662       the default is set for ABI 6).</p>
663     </li>
664   </ul>
665
666   <h3><a name="h3-programs" id="h3-programs">Program
667   improvements</a></h3>
668
669   <h4><a name="h4-utilities" id="h4-utilities">Utilities</a></h4>
670
671   <p>Most of the termcap-related changes based on development of
672   <a href="http://invisible-island.net/ncurses/tctest.html">tctest
673   (termcap library checker)</a> are implemented in the tic and
674   infocmp programs rather than affecting the library. As noted in
675   the <a href=
676   "http://invisible-island.net/ncurses/tctest.html#my-better-translation">
677   discussion</a> of <code>tctest</code>, <em class=
678   "small-caps">ncurses</em>'s ability to translate between terminfo
679   and termcap formats has been improved at different times, but
680   subject to feedback from "real" termcap users. There are very few
681   of those. Nowadays, virtually all <em>termcap</em> users are
682   using <em class="small-caps">ncurses</em> (or NetBSD, with its
683   own terminfo library) and their programs are actually using
684   terminfo rather than termcap data.</p>
685
686   <p>Still, there are a few. A comment about the translation of the
687   ASCII <code>NUL</code> character prompted a review:</p>
688
689   <ul>
690     <li>
691       <p>Both terminfo and termcap store string capabilities as
692       <code>NUL</code>-terminated strings.</p>
693     </li>
694
695     <li>
696       <p>In terminfo, a <code>\0</code> in a terminal description
697       is stored as <code>\200</code>.</p>
698     </li>
699
700     <li>
701       <p>There are no (known) terminals which would behave
702       differently when sent <code>\0</code> or
703       <code>\200</code>.</p>
704     </li>
705
706     <li>
707       <p>When translating to terminfo format (or displaying a
708       printable version of an entry using infocmp), <em class=
709       "small-caps">ncurses</em> shows <code>\200</code> as
710       <code>\0</code>.</p>
711     </li>
712
713     <li>
714       <p>It has done this since 1998 (quoting from the NEWS
715       file):</p>
716
717       <blockquote>
718         <pre class="code-block">
719 <a href=
720 "http://invisible-island.net/ncurses/NEWS.html#t980103">980103</a>
721 ...
722         + modify _nc_tic_expand() to generate \0 rather than \200.
723 ...
724         + correct translation of terminfo "^@", to \200, like \0.
725 </pre>
726       </blockquote>
727     </li>
728
729     <li>
730       <p>However, the <code>_nc_tic_expand</code> function (which
731       optionally produces terminfo or termcap format) did not
732       address this special case for termcap. Even the later 4.4BSD
733       <a href=
734       "https://svnweb.freebsd.org/base/head/lib/libc/gen/getcap.c?revision=244092&amp;view=markup#l784">
735       cgetstr</a> interprets a <code>\0</code> literally, ending
736       <em>that</em> string (rather than using the terminfo
737       improvement).</p>
738     </li>
739   </ul>
740
741   <p>As a result of the review, several improvements were made to
742   <em class="small-caps">ncurses</em> translation to/from termcap
743   format &mdash; and improving the checks made in tic for
744   consistency of entries. Most of these are not of general
745   interest, except for two new command-line options for tic and
746   infocmp:</p>
747
748   <ul>
749     <li>
750       <p>the &ldquo;<code>-0</code>&rdquo; option generates
751       termcap/terminfo source on a single line.</p>
752     </li>
753
754     <li>
755       <p>the &ldquo;<code>-K</code>&rdquo; option provides stricter
756       BSD-compatibility for termcap output.</p>
757     </li>
758   </ul>
759
760   <p>Other user-visible improvements and new features include:</p>
761
762   <ul>
763     <li>
764       <p>added &ldquo;<code>-D</code>&rdquo; option to tic and
765       infocmp, to show the database locations that it could
766       use.</p>
767     </li>
768
769     <li>
770       <p>added &ldquo;<code>-s</code>&rdquo; option to toe, to sort
771       its output.</p>
772     </li>
773
774     <li>
775       <p>extended &ldquo;<code>-c</code>&rdquo; and
776       &ldquo;<code>-n</code>&rdquo; options of infocmp to allow
777       comparing more than two entries.</p>
778     </li>
779
780     <li>
781       <p>modified toe's report when &ldquo;<code>-a</code>&rdquo;
782       and &ldquo;<code>-s</code>&rdquo; options are combined, to
783       add a column showing which entries belong to a given
784       database.</p>
785     </li>
786
787     <li>
788       <p>modified the clear program to take into account the
789       &ldquo;<code>E3</code>&rdquo; extended capability to clear
790       the terminal's scrollback buffer.</p>
791     </li>
792   </ul>
793
794   <h4><a name="h4-examples" id="h4-examples">Examples</a></h4>
795
796   <p>Along with the library and utilities, many improvements were
797   made to the <a href=
798   "http://invisible-island.net/ncurses/ncurses-examples.html">ncurses-examples</a>.
799   Some were made to allow building (and comparison-testing) against
800   NetBSD curses and PDCurses. Both lack some of the X/Open Curses
801   features, necessitating customization. But this activity was
802   useful because it showed some remaining performance issues (which
803   have been resolved in this release).</p>
804
805   <p>These changes were made to verify compatibility or compare
806   performance of <em class="small-caps">ncurses</em>:</p>
807
808   <ul>
809     <li>
810       <p>made workarounds for compiling test-programs with NetBSD
811       curses, though it lacks some common functions such as
812       <a href="http://invisible-island.net/ncurses/man/curs_util.3x.html#h3-use_env">
813       use_env</a>.</p>
814     </li>
815
816     <li>
817       <p>added dots_termcap test-program</p>
818     </li>
819
820     <li>
821       <p>added dots_curses test-program, for comparison with the
822       low-level examples.</p>
823     </li>
824
825     <li>
826       <p>added test_setupterm test-proram to demonstrate
827       normal/error returns from the setupterm and restartterm
828       functions.</p>
829     </li>
830
831     <li>
832       <p>added &ldquo;<code>-d</code>&rdquo;,
833       &ldquo;<code>-e</code>&rdquo; and
834       &ldquo;<code>-q</code>&rdquo; options to the demo_terminfo
835       and demo_termcap test-programs.</p>
836     </li>
837
838     <li>
839       <p>added &ldquo;<code>-y</code>&rdquo; option to demo_termcap
840       and test/demo_terminfo test-programs to demonstrate behavior
841       with/without extended capabilities.</p>
842     </li>
843
844     <li>
845       <p>modified demo_termcap and demo_terminfo test-programs to
846       make their options more directly comparable, and add
847       &ldquo;<code>-i</code>&rdquo; option to specify a terminal
848       description filename to parse for names to lookup.</p>
849     </li>
850
851     <li>
852       <p>rewrote the tests for <a href=
853       "http://invisible-island.net/ncurses/man/curs_window.3x.html#h3-derwin">
854       mvderwin</a> and test for recursive <a href=
855       "http://invisible-island.net/ncurses/man/curs_window.3x.html#h3-mvwin">
856       mvwin</a> in the movewindow test-program.</p>
857     </li>
858   </ul>
859
860   <p>These changes were made to help with the MinGW port:</p>
861
862   <ul>
863     <li>
864       <p>added test-screens to the ncurses test-program to show
865       256-characters at a time, to help with MinGW port.</p>
866     </li>
867
868     <li>
869       <p>modified the view test-program to load UTF-8 when built
870       with MinGW by using regular win32 API because the MinGW
871       functions mblen and mbtowc do not work.</p>
872     </li>
873
874     <li>
875       <p>added &ldquo;<code>-s</code>&rdquo; option to the view
876       test-program to allow it to start in single-step mode,
877       reducing size of trace files when it is used for debugging
878       MinGW changes.</p>
879     </li>
880   </ul>
881
882   <p>These changes were made to verify new extensions in <em class=
883   "small-caps">ncurses</em>:</p>
884
885   <ul>
886     <li>
887       <p>added <a href=
888       "http://invisible-island.net/ncurses/man/form_driver.3x.html#h3-form_driver_w">
889       form_driver_w</a> entrypoint to wide-character forms library,
890       as well as form_driver_w test-program.</p>
891     </li>
892
893     <li>
894       <p>modified ncurses test-program's b/B tests to display lines
895       only for the attributes which a given terminal supports, to
896       make room for an italics test.</p>
897     </li>
898
899     <li>
900       <p>modified ncurses test-program, adding
901       &ldquo;<code>-E</code>&rdquo; and
902       &ldquo;<code>-T</code>&rdquo; options to demonstrate use_env
903       versus use_tioctl.</p>
904     </li>
905
906     <li>
907       <p>modified ncurses test-program's c/C tests to cycle through
908       subsets of the total number of colors, to better illustrate
909       8/16/88/256-colors by providing directly comparable
910       screens.</p>
911     </li>
912
913     <li>
914       <p>modified the ncurses test-program to also show position
915       reports in 'a' test.</p>
916     </li>
917   </ul>
918
919   <p>These changes were made to make the examples more useful:</p>
920
921   <ul>
922     <li>
923       <p>added scripts for building dpkg and rpm test-packages</p>
924     </li>
925
926     <li>
927       <p>modified the hanoi test-program to show the minimum number
928       of moves possible for the given number of tiles.</p>
929     </li>
930
931     <li>
932       <p>modified the knight test-program to show the number of
933       choices possible for each position in automove option, e.g.,
934       to allow user to follow Warnsdorff's rule to solve the
935       puzzle.</p>
936     </li>
937   </ul>
938
939   <h3><a name="h3-database" id="h3-database">Terminal
940   database</a></h3>
941
942   <p>This release provides improvements to tic's
943   &ldquo;<code>-c</code>&rdquo; checking option, which was used for
944   example to</p>
945
946   <ul>
947     <li>
948       <p>make <code>sgr</code> in several entries agree with other
949       caps.</p>
950     </li>
951
952     <li>
953       <p>correct padding in some entries where earlier versions had
954       miscounted the number of octal digits.</p>
955     </li>
956   </ul>
957
958   <p>There are several new terminal descriptions:</p>
959
960   <ul>
961     <li><a href=
962     "http://invisible-island.net/ncurses/terminfo.src.html#toc-_M_L_T_E_R_M">
963     mlterm</a> is now aliased to mlterm3</li>
964
965     <li><a href=
966     "http://invisible-island.net/ncurses/terminfo.src.html#tic-nsterm">
967     nsterm</a> is now derived from nsterm-256color</li>
968
969     <li><a href=
970     "http://invisible-island.net/ncurses/terminfo.src.html#tic-putty-sco">
971     putty-sco</a></li>
972
973     <li><a href=
974     "http://invisible-island.net/ncurses/terminfo.src.html#tic-teken">
975     teken</a> is FreeBSD's "xterm" console.</li>
976
977     <li><a href=
978     "http://invisible-island.net/ncurses/terminfo.src.html#toc-_T_E_R_M_I_N_A_T_O_R">
979     terminator</a></li>
980
981     <li><a href=
982     "http://invisible-island.net/ncurses/terminfo.src.html#toc-_T_E_R_M_I_N_O_L_O_G_Y">
983     terminology</a></li>
984
985     <li><a href=
986     "http://invisible-island.net/ncurses/terminfo.src.html#tic-tmux">
987     tmux</a> is derived from screen.</li>
988
989     <li>several screen.XXX entries support the respective
990     variations for 256 colors.</li>
991
992     <li><a href=
993     "http://invisible-island.net/ncurses/terminfo.src.html#toc-_S_I_M_P_L_E_T_E_R_M">
994     simpleterm</a> is now 0.5</li>
995
996     <li><a href=
997     "http://invisible-island.net/ncurses/terminfo.src.html#tic-vte">
998     vte</a> is aliased to vte-2012</li>
999
1000     <li><a href=
1001     "http://invisible-island.net/ncurses/terminfo.src.html#tic-vt520ansi">
1002     vt520ansi</a></li>
1003   </ul>
1004
1005   <p>A few entries use extensions (user-defined terminal
1006   capabilities):</p>
1007
1008   <ul>
1009     <li>
1010       <p><code>E3</code>, used in linux, putty and xterm-basic is
1011       tested in the <a href=
1012       "http://aerie.jexium-island.net/ncurses/man/clear.1.html">clear</a>
1013       program to erase a terminal's scrollback.</p>
1014     </li>
1015
1016     <li>
1017       <p><code>TS</code> is used in the <a href=
1018       "http://invisible-island.net/ncurses/terminfo.src.html#tic-xterm_sl">
1019       xterm+sl</a> building block to help deprecate the misuse of
1020       <code>tsl</code> for xterm's title-string.</p>
1021     </li>
1022
1023     <li>
1024       <p><code>XT</code> is used in some terminfo entries to
1025       improve usefulness for other applications than screen, which
1026       would like to pretend that xterm's title is a
1027       status-line.</p>
1028     </li>
1029
1030     <li>
1031       <p><code>xm</code> is used in examples <a href=
1032       "http://invisible-island.net/ncurses/terminfo.src.html#tic-xterm-1005">
1033       xterm-1005</a> and <a href=
1034       "http://invisible-island.net/ncurses/terminfo.src.html#tic-xterm-1006">
1035       xterm-1006</a> to illustrate a way to make mouse handling
1036       more general</p>
1037     </li>
1038   </ul>
1039
1040   <p>A few terminals support italics and/or dim capabilities. In
1041   particular, screen does not. Documented that, and accommodated
1042   the terminals where this feature works with the
1043   <code>A_ITALIC</code> extension.</p>
1044
1045   <ul>
1046     <li>konsole, mlterm3 (italics)</li>
1047
1048     <li>nsterm (dim)</li>
1049
1050     <li>screen (dim)</li>
1051
1052     <li>vte (dim, italics)</li>
1053
1054     <li>xterm (dim, italics)</li>
1055   </ul>
1056
1057   <h3><a name="h3-documentation" id=
1058   "h3-documentation">Documentation</a></h3>
1059
1060   <p>As usual, this release</p>
1061
1062   <ul>
1063     <li>
1064       <p>improves documentation by describing new features,</p>
1065     </li>
1066
1067     <li>
1068       <p>attempts to improve the description of features which
1069       users have found confusing</p>
1070     </li>
1071
1072     <li>
1073       <p>fills in overlooked descriptions of features which were
1074       described in the <a href=
1075       "http://invisible-island.net/ncurses/NEWS.html">NEWS</a> file
1076       but treated sketchily in manual pages.</p>
1077     </li>
1078   </ul>
1079
1080   <p>In addition, the mechanism for producing HTML versions of the
1081   documentation has been improved:</p>
1082
1083   <ul>
1084     <li>
1085       <p>use an improved version of <a href=
1086       "http://invisible-island.net/scripts/man2html.html">man2html</a>
1087       to generate html manpages.</p>
1088     </li>
1089
1090     <li>
1091       <p>regenerated <a href=
1092       "http://invisible-island.net/ncurses/NCURSES-Programming-HOWTO.html">
1093       NCURSES-Programming-HOWTO.html</a> to fix some of the broken
1094       html emitted by docbook.</p>
1095     </li>
1096   </ul>
1097
1098   <h3><a name="h3-bug-fixes" id="h3-bug-fixes">Interesting
1099   bug-fixes</a></h3>
1100
1101   <ul>
1102     <li>
1103       <p>Ada95 binding:</p>
1104
1105       <ul>
1106         <li>
1107           <p>modify makefile rules to ensure that the PIC option is
1108           not used when building a static library</p>
1109         </li>
1110
1111         <li>
1112           <p>make Ada95 build-fix for big-endian architectures such
1113           as sparc. This undoes one of the fixes from <a href=
1114           "http://invisible-island.net/ncurses/NEWS.html#t20110319">
1115           20110319</a>, which added an
1116           &ldquo;<code>Unused</code>&rdquo; member to
1117           representation clauses, replacing that with pragmas to
1118           suppress warnings about unused bits.</p>
1119         </li>
1120       </ul>
1121     </li>
1122
1123     <li>
1124       <p>Color and attributes:</p>
1125
1126       <ul>
1127         <li>
1128           <p>parenthesize parameter of <code>COLOR_PAIR</code> and
1129           <code>PAIR_NUMBER</code> in curses.h in case it happens
1130           to be a comma-expression.</p>
1131         </li>
1132
1133         <li>
1134           <p>improve <a href=
1135           "http://invisible-island.net/ncurses/NEWS.html#t20021221">
1136           20021221</a> workaround for broken acs, handling a case
1137           where that ACS_<em>xxx</em> character is not in the
1138           <code>acsc</code> string but there is a known
1139           wide-character which can be used.</p>
1140         </li>
1141
1142         <li>
1143           <p>modify <a href=
1144           "http://invisible-island.net/ncurses/man/curs_color.3x.html#h3-Routine-Descriptions">
1145           init_pair</a> to accept -1's for color value after
1146           <a href=
1147           "http://invisible-island.net/ncurses/man/default_colors.3x.html">
1148           assume_default_colors</a> has been called.</p>
1149         </li>
1150
1151         <li>
1152           <p>add a check in <a href=
1153           "http://invisible-island.net/ncurses/man/curs_color.3x.html#h3-Routine-Descriptions">
1154           start_color</a> to limit color-pairs to 256 when extended
1155           colors are not supported.</p>
1156         </li>
1157       </ul>
1158     </li>
1159
1160     <li>
1161       <p>Resizing the screen:</p>
1162
1163       <ul>
1164         <li>
1165           <p>propagate error-returns from wresize, i.e., the
1166           internal increase_size and decrease_size functions
1167           through <a href=
1168           "http://invisible-island.net/ncurses/man/resizeterm.3x.html">
1169           resize_term</a>.</p>
1170         </li>
1171
1172         <li>
1173           <p>add check for zero/negative dimensions for
1174           <code>resizeterm</code> and <code>resize_term</code>.</p>
1175         </li>
1176
1177         <li>
1178           <p>modify <code>resizeterm</code> to always push a
1179           <code>KEY_RESIZE</code> onto the fifo, even if screensize
1180           is unchanged. Modify library to push a
1181           <code>KEY_RESIZE</code> if there was a SIGWINCH, even if
1182           it does not call <code>resizeterm</code>). These changes
1183           eliminate the case where a SIGWINCH is received, but ERR
1184           is returned from <code>wgetch</code> or
1185           <code>wgetnstr</code> because the screen dimensions did
1186           not change.</p>
1187         </li>
1188       </ul>
1189     </li>
1190
1191     <li>
1192       <p>Low-level interfaces</p>
1193
1194       <ul>
1195         <li>
1196           <p>fix an old bug in the termcap emulation;
1197           &ldquo;<code>%i</code>&rdquo; was ignored in
1198           <code>tparm</code> because the parameters to be
1199           incremented were already on the internal stack.</p>
1200         </li>
1201
1202         <li>
1203           <p>change &ldquo;<code>%l</code>&rdquo; behavior in tparm
1204           to push the string length onto the stack rather than
1205           saving the formatted length into the output buffer.</p>
1206         </li>
1207
1208         <li>
1209           <p>modify name-comparison for tgetstr, etc., to
1210           accommodate legacy applications as well as to improve
1211           compatbility with BSD 4.2 termcap implementations (see
1212           note for <a href=
1213           "http://invisible-island.net/ncurses/NEWS.html#t980725">980725</a>).</p>
1214         </li>
1215       </ul>
1216     </li>
1217
1218     <li>High-level interfaces
1219
1220       <ul>
1221         <li>
1222           <p>modify internal recursion in <code>wgetch</code> which
1223           handles cooked mode to check if the call to
1224           <code>wgetnstr</code> returned an error. This can happen
1225           when both <code>nocbreak</code> and <code>nodelay</code>
1226           are set, for instance (see note for <a href=
1227           "http://invisible-island.net/ncurses/NEWS.html#t960418">960418</a>).</p>
1228         </li>
1229
1230         <li>
1231           <p>add a check in internal function
1232           <code>waddch_nosync</code> to ensure that tab characters
1233           are treated as control characters; some broken locales
1234           claim they are printable.</p>
1235         </li>
1236
1237         <li>
1238           <p>modify menu library to ensure that a menu's top-row is
1239           adjusted as needed to ensure that the current item is on
1240           the screen</p>
1241         </li>
1242
1243         <li>
1244           <p>fix special case where double-width character
1245           overwrites a single- width character in the first
1246           column.</p>
1247         </li>
1248       </ul>
1249     </li>
1250   </ul>
1251
1252   <h3><a name="h3-config-config" id=
1253   "h3-config-config">Configuration changes</a></h3>
1254
1255   <h4><a name="h4-config-major" id="h4-config-major">Major
1256   changes</a></h4>
1257
1258   <p>The <em class="small-caps">ncurses</em> 6.0 configure script
1259   makes changes to the <em>default</em> value of several configure
1260   options, depending on the <code>--with-abi-version</code> option
1261   (i.e., whether its value is &ldquo;5&rdquo; or
1262   &ldquo;6&rdquo;):</p>
1263
1264   <dl>
1265     <dt><code>--enable-const</code></dt>
1266
1267     <dd>
1268       <p>Feature introduced in <a href=
1269       "http://invisible-island.net/ncurses/NEWS.html#t970405">970405</a>
1270       supports the use of <code>const</code> where X/Open Curses
1271       should have, but did not. NetBSD curses does something
1272       similar with <code>const</code>.</p>
1273     </dd>
1274
1275     <dt><code>--enable-ext-colors</code></dt>
1276
1277     <dd>
1278       <p>Extends the <code>cchar_t</code> structure to allow more
1279       than 16 colors to be encoded. This applies only to the
1280       wide-character (<code>--enable-widec</code>)
1281       configuration.</p>
1282     </dd>
1283
1284     <dt><code>--enable-ext-mouse</code></dt>
1285
1286     <dd>
1287       <p>Modifies the encoding of mouse state to make room for a
1288       5th mouse button. That allows one to use ncurses with a wheel
1289       mouse with xterm or similar X terminal emulators.</p>
1290     </dd>
1291
1292     <dt><code>--enable-ext-putwin</code></dt>
1293
1294     <dd>
1295       <p>Modifies the file-format written by <code>putwin</code> to
1296       use printable text rather than binary files, allowing
1297       <code>getwin</code> to read screen dumps written by
1298       differently-configured ncurses libraries. The extended
1299       <code>getwin</code> can still read binary screen dumps from
1300       the <em>same</em> configuration of ncurses. This does not
1301       change the ABI (the binary interface seen by calling
1302       applications).</p>
1303     </dd>
1304
1305     <dt><code>--enable-interop</code></dt>
1306
1307     <dd>
1308       <p>Modifies the <code>FIELDTYPE</code> structure used for the
1309       form library to make it more generic.</p>
1310     </dd>
1311
1312     <dt><code>--enable-lp64</code></dt>
1313
1314     <dd>
1315       <p>Allows an application to define <code>_LP64</code> to
1316       declare <code>chtype</code> and <code>mmask_t</code> as
1317       simply &ldquo;<code>unsigned</code>&rdquo; rather than the
1318       configured types using the <code>--with-chtype</code> and
1319       <code>--with-mmask_t</code> options.</p>
1320     </dd>
1321
1322     <dt><code>--enable-sp-funcs</code></dt>
1323
1324     <dd>
1325       <p>Compile-in support for extended functions which accept a
1326       SCREEN pointer, reducing the need for juggling the global SP
1327       value with <a href=
1328       "http://invisible-island.net/ncurses/man/curs_initscr.3x.html#h3-set_term">
1329       set_term</a> and <a href=
1330       "http://invisible-island.net/ncurses/man/curs_initscr.3x.html#h3-delscreen">
1331       delscreen</a>.</p>
1332     </dd>
1333
1334     <dt><code>--with-chtype=uint32_t</code></dt>
1335
1336     <dd>
1337       <p>Makes <code>chtype</code> explicitly a 32-bit unsigned
1338       value.</p>
1339     </dd>
1340
1341     <dt><code>--with-mmask_t=uint32_t</code></dt>
1342
1343     <dd>
1344       <p>Makes <code>mmask_t</code> explicitly a 32-bit unsigned
1345       value.</p>
1346     </dd>
1347
1348     <dt><code>--with-tparm-arg=intptr_t</code></dt>
1349
1350     <dd>
1351       <p>X/Open Curses declares <a href=
1352       "http://invisible-island.net/ncurses/man/curs_terminfo.3x.html#h3-Formatting-Output">
1353       tparm</a> using <code>long</code> for each of the parameters
1354       aside from the formatting string, presuming that
1355       <code>long</code> and <code>char*</code> are the same size.
1356       This configure option uses <code>intptr_t</code> which
1357       provides a better guarantee of the sizes.</p>
1358     </dd>
1359   </dl>
1360
1361   <p>The configure script no longer checks for antique compilers;
1362   <code>c89</code> is assumed as a minimum. There are a few
1363   features from later revisions which are used when available. The
1364   configure script makes checks to turn on useful warnings from
1365   clang, gcc and icc. You should be able to build <em class=
1366   "small-caps">ncurses</em> 6.0 with any of the current (or not so
1367   current) C compilers available in 2015.</p>
1368
1369   <p>The configure script, by the way, makes changes which do not
1370   work with systems whose <code>/bin/sh</code> is non-POSIX. This
1371   mainly affects Solaris (the other vendor <em class=
1372   "small-caps">unix</em> systems have followed the POSIX guidelines
1373   for the past twenty years). If you must build on Solaris, its
1374   <a href=
1375   "http://docs.oracle.com/cd/E19253-01/html/817-0552/fhkpy.html">xpg4</a>
1376   binaries suffice, e.g.,</p>
1377
1378   <blockquote class="code-block">
1379     <!--{{atr2html-->
1380
1381     <p style="font-family: monospace; font-size: 10pt;">
1382     <font color="#800000">#!/bin/sh</font><br>
1383     <font color="#008080">WHAT</font>=<strong><em><font color=
1384     "#800000">`</font></em></strong>hostname|sed&nbsp;-e&nbsp;<font color="#800080">'s/\..*//'</font><strong><em><font color="#800000">`</font></em></strong><br>
1385
1386     <font color="#008080">OUT</font>=configure.out<br>
1387     <strong><font color=
1388     "#000080">cat</font></strong>&nbsp;&gt;&gt;<font color=
1389     "#008080">$OUT</font>&nbsp;<font color=
1390     "#800080">&lt;&lt;EOF/</font><font color="#800080"><br>
1391     **&nbsp;</font><strong><em><font color=
1392     "#800000">`</font></em></strong>date<strong><em><font color=
1393     "#800000">`</font></em></strong><font color="#800080"><br>
1394     **&nbsp;node:&nbsp;</font><font color=
1395     "#008080">$WHAT</font><font color="#800080"><br>
1396     **&nbsp;user:&nbsp;</font><strong><em><font color=
1397     "#800000">`</font></em></strong>id<strong><em><font color=
1398     "#800000">`</font></em></strong><font color="#800080"><br>
1399     **&nbsp;conf:&nbsp;$*<br>
1400     EOF/</font><br>
1401     &nbsp;<br>
1402     <font color="#008080">SHELL</font>=/bin/sh<br>
1403     <strong><font color=
1404     "#000080">if</font></strong>&nbsp;<strong><font color=
1405     "#000080">test</font></strong>&nbsp;-f&nbsp;/usr/xpg4/bin/sh<br>
1406
1407     <strong><font color="#000080">then</font></strong><br>
1408     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=
1409     "#008080">CONFIG_SHELL</font>=/usr/xpg4/bin/sh<br>
1410     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><font color="#000080">export</font></strong>&nbsp;CONFIG_SHELL<br>
1411
1412     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=
1413     "#008080">SHELL</font>=<font color=
1414     "#008080">$CONFIG_SHELL</font><br>
1415     <strong><font color="#000080">fi</font></strong><br>
1416     &nbsp;<br>
1417     rm&nbsp;-f&nbsp;config.status&nbsp;config.cache<br>
1418     <font color="#008080">TOP</font>=<font color=
1419     "#008080">$HOME</font>/<font color="#008080">$WHAT</font><br>
1420     <font color=
1421     "#008080">$SHELL</font>&nbsp;./configure&nbsp;--verbose&nbsp;\<br>
1422
1423     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--disable-echo&nbsp;\<br>
1424
1425     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--disable-overwrite&nbsp;\<br>
1426
1427     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--enable-warnings&nbsp;\<br>
1428
1429     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--with-warnings&nbsp;\<br>
1430
1431     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--prefix=<font color="#008080">$TOP</font>&nbsp;<font color="#008080">$*</font>&nbsp;<strong><font color="#008080">2</font></strong>&gt;&amp;<strong><font color="#008080">1</font></strong>&nbsp;|&nbsp;tee&nbsp;-a&nbsp;<font color="#008080">$OUT</font><br>
1432
1433     <!--atr2html}}--></p>
1434   </blockquote>
1435
1436   <p>Other major changes to the configure script include:</p>
1437
1438   <ul>
1439     <li>
1440       <p>ABI 6 is now the default, intending that the existing ABI
1441       5 should build as before using the
1442       &ldquo;<code>--with-abi-version=5</code>&rdquo; option.</p>
1443     </li>
1444
1445     <li>
1446       <p>added <code>--with-extra-suffix</code> option to help with
1447       installing nonconflicting ncurses6 packages, e.g., avoiding
1448       header- and library-conflicts.</p>
1449
1450       <p><strong>NOTE:</strong> as a side-effect, this renames</p>
1451
1452       <blockquote>
1453         <p><code>adacurses-config</code> to
1454         <code>adacurses5-config</code> and<br>
1455         <code>adacursesw-config</code> to
1456         <code>adacursesw5-config</code></p>
1457       </blockquote>
1458     </li>
1459
1460     <li>
1461       <p>the configure script looks for gnatgcc if the Ada95
1462       binding is built, in preference to the default gcc/cc. The
1463       script also ensures that the Ada95 binding is built with the
1464       level of optimization as the C libraries.</p>
1465     </li>
1466
1467     <li>
1468       <p>the configure script captures define's related to
1469       -D_XOPEN_SOURCE from the configure check and adds those to
1470       the *-config and *.pc files, to simplify use for the
1471       wide-character libraries.</p>
1472     </li>
1473   </ul>
1474
1475   <h4><a name="h4-config-options" id=
1476   "h4-config-options">Configuration options</a></h4>
1477
1478   <p>There are several new (or extended) configure options:</p>
1479
1480   <dl>
1481     <dt><code>--disable-db-install</code></dt>
1482
1483     <dd>
1484       <p>Do not install the terminal database. This is used to omit
1485       features for packages, as done with
1486       <code>--without-progs</code>. The option simplifies building
1487       cross-compile support packages.</p>
1488     </dd>
1489
1490     <dt><code>--disable-gnat-projects</code></dt>
1491
1492     <dd>
1493       <p>This option is used for regression testing</p>
1494     </dd>
1495
1496     <dt><code>--disable-lib-suffixes</code></dt>
1497
1498     <dd>
1499       <p>Suppress the &ldquo;w&rdquo;, &ldquo;t&rdquo; or
1500       &ldquo;tw&rdquo; suffixes which normally would be added to
1501       the library names for the <code>--enable-widec</code> and
1502       <code>--with-pthread</code> options.</p>
1503     </dd>
1504
1505     <dt><code>--with-cxx-shared</code></dt>
1506
1507     <dd>
1508       <p>When <code>--with-shared</code> is set, build libncurses++
1509       as a shared library. This implicitly relies upon building
1510       with gcc/g++, since other compiler suites may have
1511       differences in the way shared libraries are built. libtool by
1512       the way has similar limitations.</p>
1513     </dd>
1514
1515     <dt><code>--with-hashed-db</code></dt>
1516
1517     <dd>
1518       <p>Extended this configure option to simplify building with
1519       different versions of Berkeley database using FreeBSD
1520       ports.</p>
1521     </dd>
1522
1523     <dt><code>--with-pc-suffix</code></dt>
1524
1525     <dd>
1526       <p>If ".pc" files are installed, optionally add a suffix to
1527       the files and corresponding package names to separate unusual
1528       configurations. If no option value is given (or if it is
1529       "none"), no suffix is added. This option is used in the test
1530       package for ncurses6.</p>
1531     </dd>
1532
1533     <dt><code>--with-xterm-kbs</code></dt>
1534
1535     <dd>
1536       <p>Configure xterm's terminfo entries to use either BS
1537       (<code>^H</code>, i.e., ASCII backspace) or DEL
1538       (<code>^?</code>, or 127).</p>
1539     </dd>
1540   </dl>
1541
1542   <h3><a name="h3-portability" id=
1543   "h3-portability">Portability</a></h3>
1544
1545   <h4><a name="h4-port-mingw" id="h4-port-mingw">MinGW</a></h4>
1546
1547   <p>Most of the portability-related work since <a href=
1548   "http://invisible-island.net/ncurses/announce-5.9.html"><em class="small-caps">
1549   ncurses</em> 5.9</a> extended and improved the MinGW port
1550   introduced in <a href=
1551   "http://invisible-island.net/ncurses/announce-5.8.html"><em class="small-caps">
1552   ncurses</em> 5.8</a>.</p>
1553
1554   <p>The MinGW port can be readily cross-compiled:</p>
1555
1556   <ul>
1557     <li>
1558       <p>modified configure script to allow creating dll's for
1559       MinGW when cross-compiling.</p>
1560     </li>
1561
1562     <li>
1563       <p>enforced Windows-style path-separator if
1564       cross-compiling,</p>
1565     </li>
1566
1567     <li>
1568       <p>added scripts for test-builds of cross-compiled packages
1569       for ncurses6 to MinGW.</p>
1570     </li>
1571
1572     <li>
1573       <p>added pc-files to the MinGW cross-compiling
1574       test-packages.</p>
1575     </li>
1576
1577     <li>
1578       <p>added script for building test-packages of binaries
1579       cross-compiled to MinGW using NSIS.</p>
1580     </li>
1581
1582     <li>
1583       <p>added <code>nc_mingw.h</code> to installed headers for
1584       MinGW port; this is needed for cross-compiling <a href=
1585       "http://invisible-island.net/ncurses/ncurses-examples.html">ncurses-examples</a>.</p>
1586     </li>
1587
1588     <li>
1589       <p>added test-packages for cross-compiling ncurses-examples
1590       using the MinGW test-packages.</p>
1591     </li>
1592   </ul>
1593
1594   <p>The MinGW-specific Windows driver accounts for several
1595   changes:</p>
1596
1597   <ul>
1598     <li>
1599       <p>wide-character display is made usable by replacing MinGW's
1600       non-working <code>wcrtomb</code> and <code>wctomb</code>
1601       functions.</p>
1602     </li>
1603
1604     <li>
1605       <p>implemented some display features: <a href=
1606       "http://invisible-island.net/ncurses/man/curs_beep.3x.html">beep</a>,
1607       <a href=
1608       "http://invisible-island.net/ncurses/man/curs_beep.3x.html">flash</a>,
1609       <a href=
1610       "http://invisible-island.net/ncurses/man/curs_kernel.3x.html#h3-curs_set">
1611       curs_set</a>.</p>
1612     </li>
1613
1614     <li>
1615       <p>the driver handles repainting on endwin/refresh
1616       combination.</p>
1617     </li>
1618
1619     <li>
1620       <p>modified treatment of <code>TERM</code> variable for MinGW
1621       port to allow explicit use of the Windows console driver by
1622       checking if <code>$TERM</code> is set to
1623       &ldquo;<code>#win32console</code>&rdquo; or an abbreviation
1624       of that.</p>
1625     </li>
1626
1627     <li>
1628       <p>the Windows driver also matches the special
1629       <code>TERM</code> value &ldquo;unknown&rdquo;</p>
1630     </li>
1631
1632     <li>
1633       <p>the driver now returns characters for special keys, (like
1634       <code>ansi.sys</code> does), when keypad mode is off, rather
1635       than returning nothing at all.</p>
1636     </li>
1637
1638     <li>
1639       <p>the driver checks a new environment variable <a href=
1640       "http://invisible-island.net/ncurses/man/ncurses.3x.html#h3-NCURSES_CONSOLE2">
1641       NCURSES_CONSOLE2</a> to optionally work around a deficiency
1642       in <code>Console2</code> (and its descendent
1643       <code>ConsoleZ</code>) which hang when an application creates
1644       a console buffer.</p>
1645     </li>
1646   </ul>
1647
1648   <p>Finally, there are other improvements:</p>
1649
1650   <ul>
1651     <li>
1652       <p>MinGW is one of the configurations where <em class=
1653       "small-caps">ncurses</em> installs by default into /usr</p>
1654     </li>
1655
1656     <li>configuration for cross-compiling uses AC_CHECK_TOOLS in
1657     preference to AC_PATH_PROGS when searching for ncurses*-config,
1658     e.g., in Ada95/configure and test/configure.</li>
1659
1660     <li>
1661       <p>extend Windows support to work with MSYS2;</p>
1662
1663       <ul>
1664         <li>
1665           <p>this works with a scenario where there is an
1666           ANSI-escape handler such as <code>ansicon</code> running
1667           in the console window.</p>
1668         </li>
1669
1670         <li>wrap <code>isatty</code> calls with a macro, provide a
1671         corresponding set of support routines to address
1672         differences between MinGW and MSYS2.</li>
1673       </ul>
1674     </li>
1675
1676     <li>
1677       <p>ensure <code>WINVER</code> is defined in makefiles rather
1678       than using headers.</p>
1679     </li>
1680
1681     <li>
1682       <p>add check for the <code>gnatprep</code>
1683       &ldquo;<code>-T</code>&rdquo; option.</p>
1684     </li>
1685
1686     <li>
1687       <p>work around a bug introduced by <a href=
1688       "http://stackoverflow.com/questions/20877689/gcc-4-8-1-minggw-d-option-does-not-work-as-usual">
1689       gcc 4.8.1</a> in MinGW which breaks "trace" feature.</p>
1690     </li>
1691
1692     <li>
1693       <p>add a driver-name method to each of the drivers.</p>
1694     </li>
1695   </ul>
1696
1697   <h4><a name="h4-port-systems" id="h4-port-systems">Other
1698   ports</a></h4>
1699
1700   <p>These changes affect certain platforms (ports):</p>
1701
1702   <ul>
1703     <li>
1704       <p>the configure script knows how to build shared libraries
1705       with DragonFlyBSD and Interix.</p>
1706     </li>
1707
1708     <li>
1709       <p>support for AIX shared libraries is improved, tested with
1710       AIX 5.3, 6.1 and 7.1 with both gcc 4.2.4 and cc:</p>
1711
1712       <ul>
1713         <li>
1714           <p>the shared-library suffix for AIX 5 and 6 is now
1715           ".so"</p>
1716         </li>
1717
1718         <li>
1719           <p>the <code>-brtl</code> option is used with AIX 5-7; it
1720           is needed to link with the shared libraries.</p>
1721         </li>
1722       </ul>
1723     </li>
1724
1725     <li>
1726       <p>the configure <code>--enable-pc-files</code> option takes
1727       into account the <a href=
1728       "http://linux.die.net/man/1/pkg-config"><code>PKG_CONFIG_PATH</code></a>
1729       variable.</p>
1730     </li>
1731
1732     <li>
1733       <p>the configure option <code>--with-pkg-config-libdir</code>
1734       provides control over the actual directory into which
1735       pc-files are installed.</p>
1736     </li>
1737
1738     <li>
1739       <p>the build scripts add explicit -ltinfo, etc., to the
1740       generated ".pc" file when <code>ld</code> option
1741       &ldquo;<code>--as-needed</code>&rdquo; is used, or when
1742       ncurses and tinfo are installed without using rpath.</p>
1743     </li>
1744
1745     <li>
1746       <p>the configure script disallows conflicting options
1747       &ldquo;<code>--with-termlib</code>&rdquo; and
1748       &ldquo;<code>--enable-term-driver</code>&rdquo;.</p>
1749     </li>
1750
1751     <li>
1752       <p>the check for missing c++ compiler to work when no error
1753       is reported, and no variables set is improved (see note for
1754       <a href=
1755       "http://invisible-island.net/ncurses/NEWS.html#t20021206">20021206</a>).</p>
1756     </li>
1757
1758     <li>
1759       <p>the misc/gen_edit.sh script selects a "linux" entry which
1760       works with the current kernel rather than assuming it is
1761       always "linux3.0"</p>
1762     </li>
1763
1764     <li>
1765       <p>the test/configure script makes it simpler to override
1766       names of curses-related libraries, to help with linking with
1767       pdcurses in MinGW environment.</p>
1768     </li>
1769
1770     <li>
1771       <p>the configure-script/ifdef's allow the BSD OLD_TTY feature
1772       to be suppressed if the type of <code>ospeed</code> is
1773       configured using the option <code>--with-ospeed</code> to not
1774       be a <code>short</code>. By default, it is a
1775       <code>short</code> for termcap-compatibility.</p>
1776     </li>
1777
1778     <li>
1779       <p>the MKlib_gen.sh script works around a recent change in
1780       gcc 5 (released <a href=
1781       "https://gcc.gnu.org/gcc-5/">mid-2015</a>) which essentially
1782       emits multiple <code>#line</code> statements for the same
1783       position in a file.</p>
1784     </li>
1785
1786     <li>
1787       <p>the configure script works with Minix3.2 (see <a href=
1788       "http://invisible-island.net/autoconf/portability-test.html">note</a>
1789       on portability)</p>
1790     </li>
1791
1792     <li>
1793       <p>OS/2 redux:</p>
1794
1795       <ul>
1796         <li>
1797           <p>the configure script supports OS/2 kLIBC.</p>
1798         </li>
1799
1800         <li>
1801           <p>the <code>--with-lib-prefix</code> option allows
1802           configuring for old/new flavors of OS/2 EMX.</p>
1803         </li>
1804       </ul>
1805     </li>
1806
1807     <li>
1808       <p>improved configure-script checks for
1809       <code>_XOPEN_SOURCE</code>:</p>
1810
1811       <ul>
1812         <li>
1813           <p>the definition works starting with Solaris 10.</p>
1814         </li>
1815
1816         <li>
1817           <p>the definition is suppressed for IRIX64, since its
1818           header files have a conflict versus
1819           <code>_SGI_SOURCE</code>.</p>
1820         </li>
1821       </ul>
1822     </li>
1823   </ul>
1824   <hr>
1825
1826   <h2><a name="h2-features" id="h2-features">Features of <em class=
1827   "small-caps">ncurses</em></a></h2>
1828
1829   <p>The <em class="small-caps">ncurses</em> package is fully
1830   upward-compatible with SVr4 (System V Release 4) curses:</p>
1831
1832   <ul>
1833     <li>
1834       <p>All of the SVr4 calls have been implemented (and are
1835       documented).</p>
1836     </li>
1837
1838     <li>
1839       <p><em class="small-caps">ncurses</em> supports all of the
1840       for SVr4 curses features including keyboard mapping, color,
1841       forms-drawing with ACS characters, and automatic recognition
1842       of keypad and function keys.</p>
1843     </li>
1844
1845     <li>
1846       <p><em class="small-caps">ncurses</em> provides these SVr4
1847       add-on libraries (not part of X/Open Curses):</p>
1848
1849       <ul>
1850         <li>
1851           <p>the panels library, supporting a stack of windows with
1852           backing store.</p>
1853         </li>
1854
1855         <li>
1856           <p>the menus library, supporting a uniform but flexible
1857           interface for menu programming.</p>
1858         </li>
1859
1860         <li>
1861           <p>the form library, supporting data collection through
1862           on-screen forms.</p>
1863         </li>
1864       </ul>
1865     </li>
1866
1867     <li>
1868       <p><em class="small-caps">ncurses</em>'s terminal database is
1869       fully compatible with that used by SVr4 curses.</p>
1870
1871       <ul>
1872         <li><em class="small-caps">ncurses</em> supports
1873         user-defined capabilities which it can see, but which are
1874         hidden from SVr4 curses applications using the
1875         <em>same</em> terminal database.</li>
1876
1877         <li>
1878           <p>It can be optionally configured to match the format
1879           used in related systems such as AIX and Tru64.</p>
1880         </li>
1881
1882         <li>
1883           <p>Alternatively, <em class="small-caps">ncurses</em> can
1884           be configured to use hashed databases rather than the
1885           directory of files used by SVr4 curses.</p>
1886         </li>
1887       </ul>
1888     </li>
1889
1890     <li>
1891       <p>The <em class="small-caps">ncurses</em> utilities have
1892       options to allow you to filter terminfo entries for use with
1893       less capable <em>curses</em>/<em>terminfo</em> versions such
1894       as the HP/UX and AIX ports.</p>
1895     </li>
1896   </ul>
1897
1898   <p>The <em class="small-caps">ncurses</em> package also has many
1899   useful extensions over SVr4:</p>
1900
1901   <ul>
1902     <li>
1903       <p>The API is 8-bit clean and base-level conformant with the
1904       X/OPEN curses specification, XSI curses (that is, it
1905       implements all BASE level features, and most EXTENDED
1906       features). It includes many function calls not supported
1907       under SVr4 curses (but portability of all calls is documented
1908       so you can use the SVr4 subset only).</p>
1909     </li>
1910
1911     <li>
1912       <p>Unlike SVr3 curses, <em class="small-caps">ncurses</em>
1913       can write to the rightmost-bottommost corner of the screen if
1914       your terminal has an insert-character capability.</p>
1915     </li>
1916
1917     <li>
1918       <p>Ada95 and C++ bindings.</p>
1919     </li>
1920
1921     <li>
1922       <p>Support for mouse event reporting with X Window xterm and
1923       FreeBSD and OS/2 console windows.</p>
1924     </li>
1925
1926     <li>
1927       <p>Extended mouse support via Alessandro Rubini's gpm
1928       package.</p>
1929     </li>
1930
1931     <li>
1932       <p>The function <code>wresize</code> allows you to resize
1933       windows, preserving their data.</p>
1934     </li>
1935
1936     <li>
1937       <p>The function <code>use_default_colors</code> allows you to
1938       use the terminal's default colors for the default color pair,
1939       achieving the effect of transparent colors.</p>
1940     </li>
1941
1942     <li>
1943       <p>The functions <code>keyok</code> and
1944       <code>define_key</code> allow you to better control the use
1945       of function keys, e.g., disabling the <em class=
1946       "small-caps">ncurses</em> KEY_MOUSE, or by defining more than
1947       one control sequence to map to a given key code.</p>
1948     </li>
1949
1950     <li>
1951       <p>Support for 256-color terminals, such as modern xterm.</p>
1952     </li>
1953
1954     <li>
1955       <p>Support for 16-color terminals, such as <em>aixterm</em>
1956       and <em>modern xterm</em>.</p>
1957     </li>
1958
1959     <li>
1960       <p>Better cursor-movement optimization. The package now
1961       features a cursor-local-movement computation more efficient
1962       than either BSD's or System V's.</p>
1963     </li>
1964
1965     <li>
1966       <p>Super hardware scrolling support. The screen-update code
1967       incorporates a novel, simple, and cheap algorithm that
1968       enables it to make optimal use of hardware scrolling,
1969       line-insertion, and line-deletion for screen-line movements.
1970       This algorithm is more powerful than the 4.4BSD curses
1971       <code>quickch</code> routine.</p>
1972     </li>
1973
1974     <li>
1975       <p>Real support for terminals with the magic-cookie glitch.
1976       The screen-update code will refrain from drawing a highlight
1977       if the magic- cookie unattributed spaces required just before
1978       the beginning and after the end would step on a non-space
1979       character. It will automatically shift highlight boundaries
1980       when doing so would make it possible to draw the highlight
1981       without changing the visual appearance of the screen.</p>
1982     </li>
1983
1984     <li>
1985       <p>It is possible to generate the library with a list of
1986       pre-loaded fallback entries linked to it so that it can serve
1987       those terminal types even when no terminfo tree or termcap
1988       file is accessible (this may be useful for support of
1989       screen-oriented programs that must run in single-user
1990       mode).</p>
1991     </li>
1992
1993     <li>
1994       <p>The <a href=
1995       "http://invisible-island.net/ncurses/man/tic.1m.html">tic</a>/<a href="http://invisible-island.net/ncurses/man/captoinfo.1m.html">captoinfo</a>
1996       utility provided with <em class="small-caps">ncurses</em> has
1997       the ability to translate many termcaps from the XENIX, IBM
1998       and AT&amp;T extension sets.</p>
1999     </li>
2000
2001     <li>
2002       <p>A BSD-like <a href=
2003       "http://invisible-island.net/ncurses/man/tset.1.html">tset</a>
2004       utility is provided.</p>
2005     </li>
2006
2007     <li>
2008       <p>The <em class="small-caps">ncurses</em> library and
2009       utilities will automatically read terminfo entries from
2010       $HOME/.terminfo if it exists, and compile to that directory
2011       if it exists and the user has no write access to the system
2012       directory. This feature makes it easier for users to have
2013       personal terminfo entries without giving up access to the
2014       system terminfo directory.</p>
2015     </li>
2016
2017     <li>
2018       <p>You may specify a path of directories to search for
2019       compiled descriptions with the environment variable
2020       TERMINFO_DIRS (this generalizes the feature provided by
2021       TERMINFO under stock System V.)</p>
2022     </li>
2023
2024     <li>
2025       <p>In terminfo source files, use capabilities may refer not
2026       just to other entries in the same source file (as in System
2027       V) but also to compiled entries in either the system terminfo
2028       directory or the user's $HOME/.terminfo directory.</p>
2029     </li>
2030
2031     <li>
2032       <p>The table-of-entries utility <a href=
2033       "http://invisible-island.net/ncurses/man/toe.1m.html">toe</a>
2034       makes it easy for users to see exactly what terminal types
2035       are available on the system.</p>
2036     </li>
2037
2038     <li>
2039       <p>The library meets the XSI requirement that every macro
2040       entry point have a corresponding function which may be linked
2041       (and will be prototype-checked) if the macro definition is
2042       disabled with <code>#undef</code>.</p>
2043     </li>
2044
2045     <li>
2046       <p>Extensive documentation is provided (see the <em><a href=
2047       "http://invisible-island.net/ncurses/ncurses.faq.html#additional_reading">
2048       Additional Reading</a></em> section of the <em><a href=
2049       "http://invisible-island.net/ncurses/ncurses.faq.html"><em class="small-caps">
2050       ncurses</em> FAQ</a></em> for online documentation).</p>
2051     </li>
2052   </ul>
2053
2054   <h2><a name="h2-who-uses" id="h2-who-uses">Applications using
2055   <em class="small-caps">ncurses</em></a></h2>
2056
2057   <p>The <em class="small-caps">ncurses</em> distribution includes
2058   a selection of test programs (including a few games). These are
2059   available separately as <a href=
2060   "http://invisible-island.net/ncurses/ncurses-examples.html">ncurses-examples</a></p>
2061
2062   <p>The ncurses library has been tested with a wide variety of
2063   applications including:</p>
2064
2065   <blockquote>
2066     <dl>
2067       <dt>cdk</dt>
2068
2069       <dd>
2070         <p>Curses Development Kit</p>
2071
2072         <p><a href=
2073         "http://invisible-island.net/cdk/">http://invisible-island.net/cdk/</a><br>
2074         </p>
2075       </dd>
2076
2077       <dt>ded</dt>
2078
2079       <dd>
2080         <p>directory-editor</p>
2081
2082         <p><a href=
2083         "http://invisible-island.net/ded/">http://invisible-island.net/ded/</a></p>
2084       </dd>
2085
2086       <dt>dialog</dt>
2087
2088       <dd>
2089         <p>the underlying application used in Slackware's setup,
2090         and the basis for similar install/configure applications on
2091         many systems.</p>
2092
2093         <p><a href=
2094         "http://invisible-island.net/dialog/">http://invisible-island.net/dialog/</a></p>
2095       </dd>
2096
2097       <dt>lynx</dt>
2098
2099       <dd>
2100         <p>the text WWW browser</p>
2101
2102         <p><a href=
2103         "http://lynx.isc.org/">http://lynx.isc.org/</a></p>
2104       </dd>
2105
2106       <dt>Midnight Commander</dt>
2107
2108       <dd>
2109         <p>file manager</p>
2110
2111         <p><a href=
2112         "http://www.midnight-commander.org/">http://www.midnight-commander.org/</a></p>
2113       </dd>
2114
2115       <dt>mutt</dt>
2116
2117       <dd>
2118         <p>mail utility</p>
2119
2120         <p><a href=
2121         "http://www.mutt.org/">http://www.mutt.org/</a></p>
2122       </dd>
2123
2124       <dt>ncftp</dt>
2125
2126       <dd>
2127         <p>file-transfer utility</p>
2128
2129         <p><a href=
2130         "http://www.ncftp.com/">http://www.ncftp.com/</a></p>
2131       </dd>
2132
2133       <dt>nvi</dt>
2134
2135       <dd>
2136         <p>New vi uses ncurses.</p>
2137
2138         <p><a href=
2139         "https://sites.google.com/a/bostic.com/keithbostic/nvi">https://sites.google.com/a/bostic.com/keithbostic/nvi</a><br>
2140         </p>
2141       </dd>
2142
2143       <dt>tin</dt>
2144
2145       <dd>
2146         <p>newsreader, supporting color, MIME</p>
2147
2148         <p><a href=
2149         "http://www.tin.org/">http://www.tin.org/</a></p>
2150       </dd>
2151     </dl>
2152   </blockquote>
2153
2154   <p>as well as some that use <em class="small-caps">ncurses</em>
2155   for the terminfo support alone:</p>
2156
2157   <blockquote>
2158     <dl>
2159       <dt>minicom</dt>
2160
2161       <dd>
2162         <p>terminal emulator for serial modem connections</p>
2163
2164         <p><a href=
2165         "http://alioth.debian.org/projects/minicom/">http://alioth.debian.org/projects/minicom/</a></p>
2166       </dd>
2167
2168       <dt>mosh</dt>
2169
2170       <dd>
2171         <p>a replacement for <code>ssh</code>.</p>
2172
2173         <p><a href=
2174         "https://mosh.mit.edu/">https://mosh.mit.edu/</a></p>
2175       </dd>
2176
2177       <dt>tack</dt>
2178
2179       <dd>
2180         <p>terminfo action checker</p>
2181
2182         <p><a href=
2183         "http://invisible-island.net/ncurses/tack.html">http://invisible-island.net/ncurses/tack.html</a></p>
2184       </dd>
2185
2186       <dt>tmux</dt>
2187
2188       <dd>
2189         <p>terminal multiplexor</p>
2190
2191         <p><a href=
2192         "http://tmux.github.io/">http://tmux.github.io/</a></p>
2193       </dd>
2194
2195       <dt>vile</dt>
2196
2197       <dd>
2198         <p>vi-like-emacs may be built to use the terminfo, termcap
2199         or curses interfaces.</p>
2200
2201         <p><a href=
2202         "http://invisible-island.net/vile/">http://invisible-island.net/vile/</a></p>
2203       </dd>
2204     </dl>
2205   </blockquote>
2206
2207   <p>and finally, those which use only the termcap interface:</p>
2208
2209   <blockquote>
2210     <dl>
2211       <dt>emacs</dt>
2212
2213       <dd>
2214         <p>text editor</p>
2215
2216         <p><a href=
2217         "http://www.gnu.org/software/emacs/">http://www.gnu.org/software/emacs/</a></p>
2218       </dd>
2219
2220       <dt>screen</dt>
2221
2222       <dd>
2223         <p>terminal multiplexor</p>
2224
2225         <p><a href=
2226         "http://www.gnu.org/software/screen/">http://www.gnu.org/software/screen/</a></p>
2227       </dd>
2228
2229       <dt>vim</dt>
2230
2231       <dd>
2232         <p>text editor</p>
2233
2234         <p><a href=
2235         "http://www.vim.org/">http://www.vim.org/</a></p>
2236       </dd>
2237     </dl>
2238   </blockquote>
2239
2240   <h2><a name="h2-development" id="h2-development">Development
2241   activities</a></h2>
2242
2243   <p>Zeyd Ben-Halim started <em class="small-caps">ncurses</em>
2244   from a previous package pcurses, written by Pavel Curtis. Eric S.
2245   Raymond continued development. J&uuml;rgen Pfeifer wrote most of
2246   the form and menu libraries. Ongoing development work is done by
2247   <a href="mailto:dickey@invisible-island.net">Thomas Dickey</a>.
2248   Thomas Dickey also acts as the maintainer for the Free Software
2249   Foundation, which holds the <a href=
2250   "http://invisible-island.net/ncurses/ncurses-license.html">copyright
2251   on ncurses</a>.</p>
2252
2253   <p>Contact the current maintainers at</p>
2254
2255   <blockquote>
2256     <a href="mailto:bug-ncurses@gnu.org">bug-ncurses@gnu.org</a>
2257   </blockquote>
2258
2259   <p>To join the ncurses mailing list, please write email to</p>
2260
2261   <blockquote>
2262     <a href=
2263     "mailto:bug-ncurses-request@gnu.org">bug-ncurses-request@gnu.org</a>
2264   </blockquote>containing the line:
2265
2266   <blockquote>
2267     <p><code>subscribe</code>
2268     <em>&lt;name&gt;@&lt;host.domain&gt;</em></p>
2269   </blockquote>
2270
2271   <p>This list is open to anyone interested in helping with the
2272   development and testing of this package.</p>
2273
2274   <p>Beta versions of <em class="small-caps">ncurses</em> and
2275   patches to the current release are made available at</p>
2276
2277   <blockquote>
2278     <p><a href=
2279     "ftp://invisible-island.net/ncurses/">ftp://invisible-island.net/ncurses/</a>&nbsp;.</p>
2280   </blockquote>
2281
2282   <p>There is an archive of the mailing list here:</p>
2283
2284   <blockquote>
2285     <p><a href=
2286     "http://lists.gnu.org/archive/html/bug-ncurses">http://lists.gnu.org/archive/html/bug-ncurses</a>
2287     (also <a href=
2288     "https://lists.gnu.org/archive/html/bug-ncurses">https</a>)</p>
2289   </blockquote>
2290
2291   <h2><a name="h2-this-stuff" id="h2-this-stuff">Related
2292   resources</a></h2>
2293
2294   <p>The release notes make scattered references to these pages,
2295   which may be interesting by themselves:</p>
2296
2297   <ul>
2298     <li><a href=
2299     "http://invisible-island.net/scripts/man2html.html">man2html</a></li>
2300
2301     <li><a href=
2302     "http://invisible-island.nethttp://invisible-island.net/ncurses/ncurses-license.html">
2303     <em class="small-caps">ncurses</em> licensing</a></li>
2304
2305     <li><a href=
2306     "http://invisible-island.net/ncurses/ncurses-mapsyms.html">Symbol
2307     versioning in <em class="small-caps">ncurses</em></a></li>
2308
2309     <li><a href=
2310     "http://invisible-island.net/ncurses/ncurses-mingw.html">The
2311     MinGW port of <em class="small-caps">ncurses</em></a></li>
2312
2313     <li><a href=
2314     "http://invisible-island.net/ncurses/tack.html">tack &ndash;
2315     terminfo action checker</a></li>
2316
2317     <li><a href=
2318     "http://invisible-island.net/autoconf/portability-tar.html">tar
2319     versus portability</a></li>
2320
2321     <li><a href=
2322     "http://invisible-island.net/ncurses/tctest.html">tctest
2323     &ndash; termcap library checker</a></li>
2324
2325     <li><a href=
2326     "http://invisible-island.net/ncurses/ncurses.html#download_database">
2327     Terminal Database</a></li>
2328   </ul>
2329
2330   <h2><a name="h2-other-stuff" id="h2-other-stuff">Other
2331   resources</a></h2>
2332
2333   <p>The distribution provides a newer version of the
2334   terminfo-format terminal description file once maintained by
2335   <a href="http://www.catb.org/~esr/terminfo/">Eric
2336   Raymond</a>&nbsp;. Unlike the older version, the termcap and
2337   terminfo data are provided in the same file, and provides several
2338   user-definable extensions beyond the X/Open specification.</p>
2339
2340   <p>You can find lots of information on terminal-related topics
2341   not covered in the terminfo file at <a href=
2342   "http://web.archive.org/web/*/http://www.cs.utk.edu/~shuford/terminal">
2343   Richard Shuford's archive</a>&nbsp;.</p>
2344
2345   <div class="nav">
2346     <ul>
2347       <li><a href="#h2-overview">Overview</a></li>
2348
2349       <li>
2350         <a href="#h2-release-notes">Release Notes</a>
2351
2352         <ul>
2353           <li>
2354             <a href="#h3-library">Library improvements</a>
2355
2356             <ul>
2357               <li><a href="#h3-lib-setbuf">Output
2358               buffering</a></li>
2359
2360               <li><a href="#h3-lib-versioning">Symbol
2361               versioning</a></li>
2362
2363               <li><a href="#h3-lib-other">Miscellaneous</a></li>
2364             </ul>
2365           </li>
2366
2367           <li>
2368             <a href="#h3-programs">Program improvements</a>
2369
2370             <ul>
2371               <li><a href="#h4-utilities">Utilities</a></li>
2372
2373               <li><a href="#h4-examples">Examples</a></li>
2374             </ul>
2375           </li>
2376
2377           <li><a href="#h3-database">Terminal database</a></li>
2378
2379           <li><a href="#h3-documentation">Documentation</a></li>
2380
2381           <li><a href="#h3-bug-fixes">Interesting
2382           bug-fixes</a></li>
2383
2384           <li>
2385             <a href="#h3-config-config">Configuration changes</a>
2386
2387             <ul>
2388               <li><a href="#h4-config-major">Major changes</a></li>
2389
2390               <li><a href="#h4-config-options">Configuration
2391               options</a></li>
2392             </ul>
2393           </li>
2394
2395           <li>
2396             <a href="#h3-portability">Portability</a>
2397
2398             <ul>
2399               <li><a href="#h4-port-mingw">MinGW</a></li>
2400
2401               <li><a href="#h4-port-systems">Other ports</a></li>
2402             </ul>
2403           </li>
2404         </ul>
2405       </li>
2406
2407       <li><a href="#h2-features">Features of <em class=
2408       "small-caps">ncurses</em></a></li>
2409
2410       <li><a href="#h2-who-uses">Applications using <em class=
2411       "small-caps">ncurses</em></a></li>
2412
2413       <li><a href="#h2-development">Development activities</a></li>
2414
2415       <li><a href="#h2-this-stuff">Related resources</a></li>
2416
2417       <li><a href="#h2-other-stuff">Other resources</a></li>
2418     </ul>
2419   </div>
2420 </body>
2421 </html>