libncurses: updated to 6.0
[tomato.git] / release / src / router / libncurses / doc / html / announce.html
blob694848a1e939642f9eda9a2143b928f7e5102bbc
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">
33 <html>
34 <head>
35 <meta name="generator" content=
36 "HTML Tidy for Linux (vers 25 March 2009), see www.w3.org">
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>
48 <body>
49 <h1 class="no-header">Announcing ncurses 6.0</h1>
51 <h2><a name="h2-overview" id="h2-overview">Overview</a></h2>
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>
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>
67 <p>Since 1995, <em class="small-caps">ncurses</em> has been
68 ported to many systems:</p>
70 <ul>
71 <li>It is used in almost every system based on the Linux kernel
72 (aside from some embedded applications).</li>
74 <li>It is used as the system curses library on OpenBSD, FreeBSD
75 and OSX.</li>
77 <li>It is used in environments such as Cygwin and MinGW. The
78 first of these was EMX on OS/2 Warp.</li>
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>
84 <li>It should work readily on any ANSI/POSIX-conforming
85 <em class="small-caps">unix</em>.</li>
86 </ul>
88 <p>The distribution includes the library and support utilities,
89 including</p>
91 <ul>
92 <li><a href=
93 "http://invisible-island.net/ncurses/man/captoinfo.1m.html">captoinfo</a>,
94 a termcap conversion tool</li>
96 <li><a href=
97 "http://invisible-island.net/ncurses/man/clear.1.html">clear</a>,
98 utility for clearing the screen</li>
100 <li><a href=
101 "http://invisible-island.net/ncurses/man/infocmp.1m.html">infocmp</a>,
102 the terminfo decompiler</li>
104 <li><a href=
105 "http://invisible-island.net/ncurses/man/tabs.1.html">tabs</a>,
106 set tabs on a terminal</li>
108 <li><a href=
109 "http://invisible-island.net/ncurses/man/tic.1m.html">tic</a>,
110 the terminfo compiler</li>
112 <li><a href=
113 "http://invisible-island.net/ncurses/man/toe.1m.html">toe</a>,
114 list (table of) terminfo entries</li>
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>
121 <li><a href=
122 "http://invisible-island.net/ncurses/man/tset.1.html">tset</a>,
123 to initialize the terminal</li>
124 </ul>
126 <p>Full manual pages are provided for the library and tools.</p>
128 <p>The <em class="small-caps">ncurses</em> distribution is
129 available via anonymous FTP at the GNU distribution site</p>
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
136 <blockquote>
137 <p><a href=
138 "ftp://invisible-island.net/ncurses/">ftp://invisible-island.net/ncurses/</a>&nbsp;.</p>
139 </blockquote>
141 <h2><a name="h2-release-notes" id="h2-release-notes">Release
142 Notes</a></h2>
144 <p>These notes are for <em class="small-caps">ncurses</em>
145 6.0, released <strong>August 8, 2015</strong>.</p>
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>
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>
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>
170 <p>There are, of course, numerous other improvements,
171 including</p>
173 <ul>
174 <li>
175 <p>fixes made based on the Clang and Coverity static
176 analyzers.</p>
177 </li>
179 <li>
180 <p>memory leak fixes using Valgrind</p>
181 </li>
182 </ul>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
264 <h3><a name="h3-library" id="h3-library">Library
265 improvements</a></h3>
267 <h3><a name="h3-lib-setbuf" id="h3-lib-setbuf">Output
268 buffering</a></h3>
270 <p>X/Open curses provides more than one initialization
271 function:</p>
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>
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>
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>
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>
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>
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>
317 <p>There were a couple of problems:</p>
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>
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>
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>
350 <p>Finally, there may still be a few programs which should be
351 modified to improve their portability, e.g., adding an</p>
353 <blockquote>
354 <pre class="code-block">
355 fflush(stdout);
356 </pre>
357 </blockquote>
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>
367 <h3><a name="h3-lib-versioning" id="h3-lib-versioning">Symbol
368 versioning</a></h3>
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>
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>
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>
392 <blockquote>
393 <dl>
394 <dt>&ldquo;<code>.map</code>&rdquo;</dt>
396 <dd>These list all public symbols, together with version
397 names.</dd>
399 <dt>&ldquo;<code>.sym</code>&rdquo;</dt>
401 <dd>These list all public symbols, without version
402 names.</dd>
403 </dl>
404 </blockquote>
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>
413 <blockquote>
414 <table border="1" summary="Total global and local symbols">
415 <tr>
416 <th>Config</th>
418 <th>Symbols</th>
420 <th>Globals</th>
422 <th>Locals</th>
424 <th>"_nc_"</th>
425 </tr>
427 <tr>
428 <td>ncurses</td>
430 <td align="right">976</td>
432 <td align="right">796</td>
434 <td align="right">180</td>
436 <td align="right">332</td>
437 </tr>
439 <tr>
440 <td>ncursesw</td>
442 <td align="right">1089</td>
444 <td align="right">905</td>
446 <td align="right">184</td>
448 <td align="right">343</td>
449 </tr>
451 <tr>
452 <td>ncursest</td>
454 <td align="right">979</td>
456 <td align="right">804</td>
458 <td align="right">175</td>
460 <td align="right">358</td>
461 </tr>
463 <tr>
464 <td>ncursestw</td>
466 <td align="right">1098</td>
468 <td align="right">914</td>
470 <td align="right">184</td>
472 <td align="right">372</td>
473 </tr>
474 </table>
475 </blockquote>
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>
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>
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>
499 <li>
500 <p>ABI version (if not 5)</p>
501 </li>
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>
510 <li>
511 <p>release version</p>
512 </li>
514 <li>
515 <p>patch date (for the release version)</p>
516 </li>
517 </ul>
519 <p>For example, running <code>nm -D</code> on the libraries in
520 the ncurses6 test package shows these symbol-versions:</p>
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>
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>
554 <h3><a name="h3-lib-other" id=
555 "h3-lib-other">Miscellaneous</a></h3>
557 <p>The new release has several improvements for performance and
558 building. For instance:</p>
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>
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>
575 <p>There are also new features in the libraries:</p>
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>
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>
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>
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>
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>
613 <blockquote>
614 <pre class="code-block">
615 0 string \210\210 Screen-dump (ncurses)
616 </pre>
617 </blockquote>
618 </li>
620 <li>
621 <p>several changes to mouse support include:</p>
623 <ul>
624 <li>added decoder for xterm SGR 1006 mouse mode.</li>
626 <li>added experimental support for
627 &ldquo;<code>%u</code>&rdquo; format to terminfo.</li>
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>
637 <p>There are a few new configure options dealing with library
638 customization:</p>
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>
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>
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>
666 <h3><a name="h3-programs" id="h3-programs">Program
667 improvements</a></h3>
669 <h4><a name="h4-utilities" id="h4-utilities">Utilities</a></h4>
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>
686 <p>Still, there are a few. A comment about the translation of the
687 ASCII <code>NUL</code> character prompted a review:</p>
689 <ul>
690 <li>
691 <p>Both terminfo and termcap store string capabilities as
692 <code>NUL</code>-terminated strings.</p>
693 </li>
695 <li>
696 <p>In terminfo, a <code>\0</code> in a terminal description
697 is stored as <code>\200</code>.</p>
698 </li>
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>
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>
713 <li>
714 <p>It has done this since 1998 (quoting from the NEWS
715 file):</p>
717 <blockquote>
718 <pre class="code-block">
719 <a href=
720 "http://invisible-island.net/ncurses/NEWS.html#t980103">980103</a>
722 + modify _nc_tic_expand() to generate \0 rather than \200.
724 + correct translation of terminfo "^@", to \200, like \0.
725 </pre>
726 </blockquote>
727 </li>
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>
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>
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>
754 <li>
755 <p>the &ldquo;<code>-K</code>&rdquo; option provides stricter
756 BSD-compatibility for termcap output.</p>
757 </li>
758 </ul>
760 <p>Other user-visible improvements and new features include:</p>
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>
769 <li>
770 <p>added &ldquo;<code>-s</code>&rdquo; option to toe, to sort
771 its output.</p>
772 </li>
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>
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>
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>
794 <h4><a name="h4-examples" id="h4-examples">Examples</a></h4>
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>
805 <p>These changes were made to verify compatibility or compare
806 performance of <em class="small-caps">ncurses</em>:</p>
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>
816 <li>
817 <p>added dots_termcap test-program</p>
818 </li>
820 <li>
821 <p>added dots_curses test-program, for comparison with the
822 low-level examples.</p>
823 </li>
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>
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>
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>
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>
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>
860 <p>These changes were made to help with the MinGW port:</p>
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>
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>
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>
882 <p>These changes were made to verify new extensions in <em class=
883 "small-caps">ncurses</em>:</p>
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>
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>
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>
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>
913 <li>
914 <p>modified the ncurses test-program to also show position
915 reports in 'a' test.</p>
916 </li>
917 </ul>
919 <p>These changes were made to make the examples more useful:</p>
921 <ul>
922 <li>
923 <p>added scripts for building dpkg and rpm test-packages</p>
924 </li>
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>
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>
939 <h3><a name="h3-database" id="h3-database">Terminal
940 database</a></h3>
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>
946 <ul>
947 <li>
948 <p>make <code>sgr</code> in several entries agree with other
949 caps.</p>
950 </li>
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>
958 <p>There are several new terminal descriptions:</p>
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>
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>
969 <li><a href=
970 "http://invisible-island.net/ncurses/terminfo.src.html#tic-putty-sco">
971 putty-sco</a></li>
973 <li><a href=
974 "http://invisible-island.net/ncurses/terminfo.src.html#tic-teken">
975 teken</a> is FreeBSD's "xterm" console.</li>
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>
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>
985 <li><a href=
986 "http://invisible-island.net/ncurses/terminfo.src.html#tic-tmux">
987 tmux</a> is derived from screen.</li>
989 <li>several screen.XXX entries support the respective
990 variations for 256 colors.</li>
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>
996 <li><a href=
997 "http://invisible-island.net/ncurses/terminfo.src.html#tic-vte">
998 vte</a> is aliased to vte-2012</li>
1000 <li><a href=
1001 "http://invisible-island.net/ncurses/terminfo.src.html#tic-vt520ansi">
1002 vt520ansi</a></li>
1003 </ul>
1005 <p>A few entries use extensions (user-defined terminal
1006 capabilities):</p>
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>
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>
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>
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>
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>
1045 <ul>
1046 <li>konsole, mlterm3 (italics)</li>
1048 <li>nsterm (dim)</li>
1050 <li>screen (dim)</li>
1052 <li>vte (dim, italics)</li>
1054 <li>xterm (dim, italics)</li>
1055 </ul>
1057 <h3><a name="h3-documentation" id=
1058 "h3-documentation">Documentation</a></h3>
1060 <p>As usual, this release</p>
1062 <ul>
1063 <li>
1064 <p>improves documentation by describing new features,</p>
1065 </li>
1067 <li>
1068 <p>attempts to improve the description of features which
1069 users have found confusing</p>
1070 </li>
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>
1080 <p>In addition, the mechanism for producing HTML versions of the
1081 documentation has been improved:</p>
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>
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>
1098 <h3><a name="h3-bug-fixes" id="h3-bug-fixes">Interesting
1099 bug-fixes</a></h3>
1101 <ul>
1102 <li>
1103 <p>Ada95 binding:</p>
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>
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>
1123 <li>
1124 <p>Color and attributes:</p>
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>
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>
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>
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>
1160 <li>
1161 <p>Resizing the screen:</p>
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>
1172 <li>
1173 <p>add check for zero/negative dimensions for
1174 <code>resizeterm</code> and <code>resize_term</code>.</p>
1175 </li>
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>
1191 <li>
1192 <p>Low-level interfaces</p>
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>
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>
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>
1218 <li>High-level interfaces
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>
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>
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>
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>
1252 <h3><a name="h3-config-config" id=
1253 "h3-config-config">Configuration changes</a></h3>
1255 <h4><a name="h4-config-major" id="h4-config-major">Major
1256 changes</a></h4>
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>
1264 <dl>
1265 <dt><code>--enable-const</code></dt>
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>
1275 <dt><code>--enable-ext-colors</code></dt>
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>
1284 <dt><code>--enable-ext-mouse</code></dt>
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>
1292 <dt><code>--enable-ext-putwin</code></dt>
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>
1305 <dt><code>--enable-interop</code></dt>
1307 <dd>
1308 <p>Modifies the <code>FIELDTYPE</code> structure used for the
1309 form library to make it more generic.</p>
1310 </dd>
1312 <dt><code>--enable-lp64</code></dt>
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>
1322 <dt><code>--enable-sp-funcs</code></dt>
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>
1334 <dt><code>--with-chtype=uint32_t</code></dt>
1336 <dd>
1337 <p>Makes <code>chtype</code> explicitly a 32-bit unsigned
1338 value.</p>
1339 </dd>
1341 <dt><code>--with-mmask_t=uint32_t</code></dt>
1343 <dd>
1344 <p>Makes <code>mmask_t</code> explicitly a 32-bit unsigned
1345 value.</p>
1346 </dd>
1348 <dt><code>--with-tparm-arg=intptr_t</code></dt>
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>
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>
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>
1378 <blockquote class="code-block">
1379 <!--{{atr2html-->
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>
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>
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>
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>
1423 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--disable-echo&nbsp;\<br>
1425 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--disable-overwrite&nbsp;\<br>
1427 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--enable-warnings&nbsp;\<br>
1429 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--with-warnings&nbsp;\<br>
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>
1433 <!--atr2html}}--></p>
1434 </blockquote>
1436 <p>Other major changes to the configure script include:</p>
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>
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>
1450 <p><strong>NOTE:</strong> as a side-effect, this renames</p>
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>
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>
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>
1475 <h4><a name="h4-config-options" id=
1476 "h4-config-options">Configuration options</a></h4>
1478 <p>There are several new (or extended) configure options:</p>
1480 <dl>
1481 <dt><code>--disable-db-install</code></dt>
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>
1490 <dt><code>--disable-gnat-projects</code></dt>
1492 <dd>
1493 <p>This option is used for regression testing</p>
1494 </dd>
1496 <dt><code>--disable-lib-suffixes</code></dt>
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>
1505 <dt><code>--with-cxx-shared</code></dt>
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>
1515 <dt><code>--with-hashed-db</code></dt>
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>
1523 <dt><code>--with-pc-suffix</code></dt>
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>
1533 <dt><code>--with-xterm-kbs</code></dt>
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>
1542 <h3><a name="h3-portability" id=
1543 "h3-portability">Portability</a></h3>
1545 <h4><a name="h4-port-mingw" id="h4-port-mingw">MinGW</a></h4>
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>
1554 <p>The MinGW port can be readily cross-compiled:</p>
1556 <ul>
1557 <li>
1558 <p>modified configure script to allow creating dll's for
1559 MinGW when cross-compiling.</p>
1560 </li>
1562 <li>
1563 <p>enforced Windows-style path-separator if
1564 cross-compiling,</p>
1565 </li>
1567 <li>
1568 <p>added scripts for test-builds of cross-compiled packages
1569 for ncurses6 to MinGW.</p>
1570 </li>
1572 <li>
1573 <p>added pc-files to the MinGW cross-compiling
1574 test-packages.</p>
1575 </li>
1577 <li>
1578 <p>added script for building test-packages of binaries
1579 cross-compiled to MinGW using NSIS.</p>
1580 </li>
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>
1588 <li>
1589 <p>added test-packages for cross-compiling ncurses-examples
1590 using the MinGW test-packages.</p>
1591 </li>
1592 </ul>
1594 <p>The MinGW-specific Windows driver accounts for several
1595 changes:</p>
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>
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>
1614 <li>
1615 <p>the driver handles repainting on endwin/refresh
1616 combination.</p>
1617 </li>
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>
1627 <li>
1628 <p>the Windows driver also matches the special
1629 <code>TERM</code> value &ldquo;unknown&rdquo;</p>
1630 </li>
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>
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>
1648 <p>Finally, there are other improvements:</p>
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>
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>
1660 <li>
1661 <p>extend Windows support to work with MSYS2;</p>
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>
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>
1676 <li>
1677 <p>ensure <code>WINVER</code> is defined in makefiles rather
1678 than using headers.</p>
1679 </li>
1681 <li>
1682 <p>add check for the <code>gnatprep</code>
1683 &ldquo;<code>-T</code>&rdquo; option.</p>
1684 </li>
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>
1692 <li>
1693 <p>add a driver-name method to each of the drivers.</p>
1694 </li>
1695 </ul>
1697 <h4><a name="h4-port-systems" id="h4-port-systems">Other
1698 ports</a></h4>
1700 <p>These changes affect certain platforms (ports):</p>
1702 <ul>
1703 <li>
1704 <p>the configure script knows how to build shared libraries
1705 with DragonFlyBSD and Interix.</p>
1706 </li>
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>
1712 <ul>
1713 <li>
1714 <p>the shared-library suffix for AIX 5 and 6 is now
1715 ".so"</p>
1716 </li>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
1792 <li>
1793 <p>OS/2 redux:</p>
1795 <ul>
1796 <li>
1797 <p>the configure script supports OS/2 kLIBC.</p>
1798 </li>
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>
1807 <li>
1808 <p>improved configure-script checks for
1809 <code>_XOPEN_SOURCE</code>:</p>
1811 <ul>
1812 <li>
1813 <p>the definition works starting with Solaris 10.</p>
1814 </li>
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>
1826 <h2><a name="h2-features" id="h2-features">Features of <em class=
1827 "small-caps">ncurses</em></a></h2>
1829 <p>The <em class="small-caps">ncurses</em> package is fully
1830 upward-compatible with SVr4 (System V Release 4) curses:</p>
1832 <ul>
1833 <li>
1834 <p>All of the SVr4 calls have been implemented (and are
1835 documented).</p>
1836 </li>
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>
1845 <li>
1846 <p><em class="small-caps">ncurses</em> provides these SVr4
1847 add-on libraries (not part of X/Open Curses):</p>
1849 <ul>
1850 <li>
1851 <p>the panels library, supporting a stack of windows with
1852 backing store.</p>
1853 </li>
1855 <li>
1856 <p>the menus library, supporting a uniform but flexible
1857 interface for menu programming.</p>
1858 </li>
1860 <li>
1861 <p>the form library, supporting data collection through
1862 on-screen forms.</p>
1863 </li>
1864 </ul>
1865 </li>
1867 <li>
1868 <p><em class="small-caps">ncurses</em>'s terminal database is
1869 fully compatible with that used by SVr4 curses.</p>
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>
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>
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>
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>
1898 <p>The <em class="small-caps">ncurses</em> package also has many
1899 useful extensions over SVr4:</p>
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>
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>
1917 <li>
1918 <p>Ada95 and C++ bindings.</p>
1919 </li>
1921 <li>
1922 <p>Support for mouse event reporting with X Window xterm and
1923 FreeBSD and OS/2 console windows.</p>
1924 </li>
1926 <li>
1927 <p>Extended mouse support via Alessandro Rubini's gpm
1928 package.</p>
1929 </li>
1931 <li>
1932 <p>The function <code>wresize</code> allows you to resize
1933 windows, preserving their data.</p>
1934 </li>
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>
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>
1950 <li>
1951 <p>Support for 256-color terminals, such as modern xterm.</p>
1952 </li>
1954 <li>
1955 <p>Support for 16-color terminals, such as <em>aixterm</em>
1956 and <em>modern xterm</em>.</p>
1957 </li>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
2054 <h2><a name="h2-who-uses" id="h2-who-uses">Applications using
2055 <em class="small-caps">ncurses</em></a></h2>
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>
2062 <p>The ncurses library has been tested with a wide variety of
2063 applications including:</p>
2065 <blockquote>
2066 <dl>
2067 <dt>cdk</dt>
2069 <dd>
2070 <p>Curses Development Kit</p>
2072 <p><a href=
2073 "http://invisible-island.net/cdk/">http://invisible-island.net/cdk/</a><br>
2074 </p>
2075 </dd>
2077 <dt>ded</dt>
2079 <dd>
2080 <p>directory-editor</p>
2082 <p><a href=
2083 "http://invisible-island.net/ded/">http://invisible-island.net/ded/</a></p>
2084 </dd>
2086 <dt>dialog</dt>
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>
2093 <p><a href=
2094 "http://invisible-island.net/dialog/">http://invisible-island.net/dialog/</a></p>
2095 </dd>
2097 <dt>lynx</dt>
2099 <dd>
2100 <p>the text WWW browser</p>
2102 <p><a href=
2103 "http://lynx.isc.org/">http://lynx.isc.org/</a></p>
2104 </dd>
2106 <dt>Midnight Commander</dt>
2108 <dd>
2109 <p>file manager</p>
2111 <p><a href=
2112 "http://www.midnight-commander.org/">http://www.midnight-commander.org/</a></p>
2113 </dd>
2115 <dt>mutt</dt>
2117 <dd>
2118 <p>mail utility</p>
2120 <p><a href=
2121 "http://www.mutt.org/">http://www.mutt.org/</a></p>
2122 </dd>
2124 <dt>ncftp</dt>
2126 <dd>
2127 <p>file-transfer utility</p>
2129 <p><a href=
2130 "http://www.ncftp.com/">http://www.ncftp.com/</a></p>
2131 </dd>
2133 <dt>nvi</dt>
2135 <dd>
2136 <p>New vi uses ncurses.</p>
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>
2143 <dt>tin</dt>
2145 <dd>
2146 <p>newsreader, supporting color, MIME</p>
2148 <p><a href=
2149 "http://www.tin.org/">http://www.tin.org/</a></p>
2150 </dd>
2151 </dl>
2152 </blockquote>
2154 <p>as well as some that use <em class="small-caps">ncurses</em>
2155 for the terminfo support alone:</p>
2157 <blockquote>
2158 <dl>
2159 <dt>minicom</dt>
2161 <dd>
2162 <p>terminal emulator for serial modem connections</p>
2164 <p><a href=
2165 "http://alioth.debian.org/projects/minicom/">http://alioth.debian.org/projects/minicom/</a></p>
2166 </dd>
2168 <dt>mosh</dt>
2170 <dd>
2171 <p>a replacement for <code>ssh</code>.</p>
2173 <p><a href=
2174 "https://mosh.mit.edu/">https://mosh.mit.edu/</a></p>
2175 </dd>
2177 <dt>tack</dt>
2179 <dd>
2180 <p>terminfo action checker</p>
2182 <p><a href=
2183 "http://invisible-island.net/ncurses/tack.html">http://invisible-island.net/ncurses/tack.html</a></p>
2184 </dd>
2186 <dt>tmux</dt>
2188 <dd>
2189 <p>terminal multiplexor</p>
2191 <p><a href=
2192 "http://tmux.github.io/">http://tmux.github.io/</a></p>
2193 </dd>
2195 <dt>vile</dt>
2197 <dd>
2198 <p>vi-like-emacs may be built to use the terminfo, termcap
2199 or curses interfaces.</p>
2201 <p><a href=
2202 "http://invisible-island.net/vile/">http://invisible-island.net/vile/</a></p>
2203 </dd>
2204 </dl>
2205 </blockquote>
2207 <p>and finally, those which use only the termcap interface:</p>
2209 <blockquote>
2210 <dl>
2211 <dt>emacs</dt>
2213 <dd>
2214 <p>text editor</p>
2216 <p><a href=
2217 "http://www.gnu.org/software/emacs/">http://www.gnu.org/software/emacs/</a></p>
2218 </dd>
2220 <dt>screen</dt>
2222 <dd>
2223 <p>terminal multiplexor</p>
2225 <p><a href=
2226 "http://www.gnu.org/software/screen/">http://www.gnu.org/software/screen/</a></p>
2227 </dd>
2229 <dt>vim</dt>
2231 <dd>
2232 <p>text editor</p>
2234 <p><a href=
2235 "http://www.vim.org/">http://www.vim.org/</a></p>
2236 </dd>
2237 </dl>
2238 </blockquote>
2240 <h2><a name="h2-development" id="h2-development">Development
2241 activities</a></h2>
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>
2253 <p>Contact the current maintainers at</p>
2255 <blockquote>
2256 <a href="mailto:bug-ncurses@gnu.org">bug-ncurses@gnu.org</a>
2257 </blockquote>
2259 <p>To join the ncurses mailing list, please write email to</p>
2261 <blockquote>
2262 <a href=
2263 "mailto:bug-ncurses-request@gnu.org">bug-ncurses-request@gnu.org</a>
2264 </blockquote>containing the line:
2266 <blockquote>
2267 <p><code>subscribe</code>
2268 <em>&lt;name&gt;@&lt;host.domain&gt;</em></p>
2269 </blockquote>
2271 <p>This list is open to anyone interested in helping with the
2272 development and testing of this package.</p>
2274 <p>Beta versions of <em class="small-caps">ncurses</em> and
2275 patches to the current release are made available at</p>
2277 <blockquote>
2278 <p><a href=
2279 "ftp://invisible-island.net/ncurses/">ftp://invisible-island.net/ncurses/</a>&nbsp;.</p>
2280 </blockquote>
2282 <p>There is an archive of the mailing list here:</p>
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>
2291 <h2><a name="h2-this-stuff" id="h2-this-stuff">Related
2292 resources</a></h2>
2294 <p>The release notes make scattered references to these pages,
2295 which may be interesting by themselves:</p>
2297 <ul>
2298 <li><a href=
2299 "http://invisible-island.net/scripts/man2html.html">man2html</a></li>
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>
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>
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>
2313 <li><a href=
2314 "http://invisible-island.net/ncurses/tack.html">tack &ndash;
2315 terminfo action checker</a></li>
2317 <li><a href=
2318 "http://invisible-island.net/autoconf/portability-tar.html">tar
2319 versus portability</a></li>
2321 <li><a href=
2322 "http://invisible-island.net/ncurses/tctest.html">tctest
2323 &ndash; termcap library checker</a></li>
2325 <li><a href=
2326 "http://invisible-island.net/ncurses/ncurses.html#download_database">
2327 Terminal Database</a></li>
2328 </ul>
2330 <h2><a name="h2-other-stuff" id="h2-other-stuff">Other
2331 resources</a></h2>
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>
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>
2345 <div class="nav">
2346 <ul>
2347 <li><a href="#h2-overview">Overview</a></li>
2349 <li>
2350 <a href="#h2-release-notes">Release Notes</a>
2352 <ul>
2353 <li>
2354 <a href="#h3-library">Library improvements</a>
2356 <ul>
2357 <li><a href="#h3-lib-setbuf">Output
2358 buffering</a></li>
2360 <li><a href="#h3-lib-versioning">Symbol
2361 versioning</a></li>
2363 <li><a href="#h3-lib-other">Miscellaneous</a></li>
2364 </ul>
2365 </li>
2367 <li>
2368 <a href="#h3-programs">Program improvements</a>
2370 <ul>
2371 <li><a href="#h4-utilities">Utilities</a></li>
2373 <li><a href="#h4-examples">Examples</a></li>
2374 </ul>
2375 </li>
2377 <li><a href="#h3-database">Terminal database</a></li>
2379 <li><a href="#h3-documentation">Documentation</a></li>
2381 <li><a href="#h3-bug-fixes">Interesting
2382 bug-fixes</a></li>
2384 <li>
2385 <a href="#h3-config-config">Configuration changes</a>
2387 <ul>
2388 <li><a href="#h4-config-major">Major changes</a></li>
2390 <li><a href="#h4-config-options">Configuration
2391 options</a></li>
2392 </ul>
2393 </li>
2395 <li>
2396 <a href="#h3-portability">Portability</a>
2398 <ul>
2399 <li><a href="#h4-port-mingw">MinGW</a></li>
2401 <li><a href="#h4-port-systems">Other ports</a></li>
2402 </ul>
2403 </li>
2404 </ul>
2405 </li>
2407 <li><a href="#h2-features">Features of <em class=
2408 "small-caps">ncurses</em></a></li>
2410 <li><a href="#h2-who-uses">Applications using <em class=
2411 "small-caps">ncurses</em></a></li>
2413 <li><a href="#h2-development">Development activities</a></li>
2415 <li><a href="#h2-this-stuff">Related resources</a></li>
2417 <li><a href="#h2-other-stuff">Other resources</a></li>
2418 </ul>
2419 </div>
2420 </body>
2421 </html>