~ubuntu-branches/debian/sid/ncurses/sid

« back to all changes in this revision

Viewing changes to doc/html/announce.html

  • Committer: Package Import Robot
  • Author(s): Sven Joachim
  • Date: 2015-08-17 18:01:53 UTC
  • mfrom: (1.32.11)
  • Revision ID: package-import@ubuntu.com-20150817180153-ywf02awpkuzvqwdv
Tags: 6.0+20150810-1
* New upstream release.
  - Fix comparison against "/usr/include" in misc/gen-pkgconfig.in
    (Closes: #790548).
* Configure with "--with-abi-version=5", upstream defaults to abi 6 now.
* Configure with "--with-versioned-syms" (Closes: #788610).
  - Bump minimal versions of all symbols as well as shlibs to 6.
* After building the wide library, install it into a temporary
  scratchdir so that test/configure can find the necessary auxiliary
  files (see #786436).
* Drop the libncursesw5-dev build-dependency.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
2
1
<!--
3
 
  $Id: announce.html,v 1.56 2013/05/17 23:34:26 tom Exp $
 
2
  @Id: announce.html.in,v 1.90 2015/08/08 18:39:58 tom Exp @
4
3
  ****************************************************************************
5
 
  * Copyright (c) 1998-2010,2011 Free Software Foundation, Inc.              *
 
4
  * Copyright (c) 1998-2013,2015 Free Software Foundation, Inc.              *
6
5
  *                                                                          *
7
6
  * Permission is hereby granted, free of charge, to any person obtaining a  *
8
7
  * copy of this software and associated documentation files (the            *
29
28
  * authorization.                                                           *
30
29
  ****************************************************************************
31
30
-->
 
31
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
32
32
 
33
33
<html>
34
34
<head>
35
35
  <meta name="generator" content=
36
 
  "HTML Tidy for Linux/x86 (vers 6 November 2007), see www.w3.org">
 
36
  "HTML Tidy for Linux (vers 25 March 2009), see www.w3.org">
37
37
 
38
 
  <title>Announcing ncurses 5.9</title>
 
38
  <title>Announcing ncurses 6.0</title>
39
39
  <link rev="made" href="mailto:bug-ncurses@gnu.org">
40
40
  <meta http-equiv="Content-Type" content=
41
41
  "text/html; charset=us-ascii">
 
42
  <style type="text/css">
 
43
p,li { max-width:700px; }
 
44
  dd { max-width:630px; }
 
45
  </style>
42
46
</head>
43
47
 
44
48
<body>
45
 
  <h1>Announcing ncurses 5.9</h1>The ncurses (new curses)
46
 
  library is a free software emulation of curses in System V
47
 
  Release 4.0, and more. It uses terminfo format, supports pads and
 
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
48
56
  color and multiple highlights and forms characters and
49
 
  function-key mapping, and has all the other SYSV-curses
50
 
  enhancements over BSD curses.
 
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>
51
60
 
52
61
  <p>In mid-June 1995, the maintainer of 4.4BSD curses declared
53
62
  that he considered 4.4BSD curses obsolete, and encouraged the
54
 
  keepers of Unix releases such as BSD/OS, FreeBSD and NetBSD to
55
 
  switch over to ncurses.</p>
56
 
 
57
 
  <p>The ncurses code was developed under GNU/Linux. It has been in
58
 
  use for some time with OpenBSD as the system curses library, and
59
 
  on FreeBSD and NetBSD as an external package. It should port
60
 
  easily to any ANSI/POSIX-conforming UNIX. It has even been ported
61
 
  to OS/2 Warp!</p>
 
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>
62
87
 
63
88
  <p>The distribution includes the library and support utilities,
64
 
  including a terminfo compiler tic(1), a decompiler infocmp(1),
65
 
  clear(1), tput(1), tset(1), and a termcap conversion tool
66
 
  captoinfo(1). Full manual pages are provided for the library and
67
 
  tools.</p>
68
 
 
69
 
  <p>The ncurses distribution is available via anonymous FTP at the
70
 
  GNU distribution site <a href=
71
 
  "ftp://ftp.gnu.org/gnu/ncurses/">ftp://ftp.gnu.org/gnu/ncurses/</a>&nbsp;.<br>
72
 
 
73
 
  It is also available at <a href=
74
 
  "ftp://invisible-island.net/ncurses/">ftp://invisible-island.net/ncurses/</a>&nbsp;.</p>
75
 
 
76
 
  <h1>Release Notes</h1>This release is designed to be upward
77
 
  compatible from ncurses 5.0 through 5.8; very few applications
78
 
  will require recompilation, depending on the platform. These are
79
 
  the highlights from the change-log since ncurses 5.8 release.
80
 
  <p>
81
 
  This is a bug-fix release, correcting a small number of urgent problems
82
 
  in the ncurses library from the 5.8 release.
83
 
  <p>
84
 
  It also improves the Ada95 binding:
85
 
  <ul>
86
 
  <li>fixes a longstanding portability problem with its use of the
87
 
      <a href="http://invisible-island.net/ncurses/man/form_fieldtype.3x">set_field_type</a>
88
 
      function.  Because that function uses variable-length argument lists,
89
 
      its interface with gnat does not work with certain platforms.
90
 
  <li>improves configurability and portability, particularly when built
91
 
      separately from the main ncurses tree.  The 5.8 release introduced
92
 
      scripts which can be used to construct separate tarballs for the
93
 
      Ada95 and ncurses examples.
94
 
      <p>Those were a proof of concept.  For the 5.9 release, those
95
 
      scripts are augmented with rpm- and dpkg-scripts used in test builds
96
 
      against a variety of gnat- and system ncurses versions as old as
97
 
      gnat 3.15 and ncurses 5.4 (see snapshots and systems tested
98
 
      <a href="http://invisible-island.net/ncurses/ncurses-Ada95.html">here</a>.
99
 
  <li>additional improvements were made for portability of the
100
 
      ncurses examples, adding rpm- and dpkg-scripts for test-builds.
101
 
      See 
102
 
      <a href="http://invisible-island.net/ncurses/ncurses-examples.html">this page</a>
103
 
      for snapshots and other information.
104
 
  </ul>
105
 
 
106
 
  <h1>Features of Ncurses</h1>The ncurses package is fully
107
 
  compatible with SVr4 (System V Release 4) curses:
108
 
 
109
 
  <ul>
110
 
    <li>All 257 of the SVr4 calls have been implemented (and are
111
 
    documented).</li>
112
 
 
113
 
    <li>Full support for SVr4 curses features including keyboard
114
 
    mapping, color, forms-drawing with ACS characters, and
115
 
    automatic recognition of keypad and function keys.</li>
116
 
 
117
 
    <li>An emulation of the SVr4 panels library, supporting a stack
118
 
    of windows with backing store, is included.</li>
119
 
 
120
 
    <li>An emulation of the SVr4 menus library, supporting a
121
 
    uniform but flexible interface for menu programming, is
122
 
    included.</li>
123
 
 
124
 
    <li>An emulation of the SVr4 form library, supporting data
125
 
    collection through on-screen forms, is included.</li>
126
 
 
127
 
    <li>Binary terminfo entries generated by the ncurses tic(1)
128
 
    implementation are bit-for-bit-compatible with the entry format
129
 
    SVr4 curses uses.</li>
130
 
 
131
 
    <li>The utilities have options to allow you to filter terminfo
132
 
    entries for use with less capable
133
 
    <strong>curses</strong>/<strong>terminfo</strong> versions such
134
 
    as the HP/UX and AIX ports.</li>
135
 
  </ul>The ncurses package also has many useful extensions over
136
 
  SVr4:
137
 
 
138
 
  <ul>
139
 
    <li>The API is 8-bit clean and base-level conformant with the
140
 
    X/OPEN curses specification, XSI curses (that is, it implements
141
 
    all BASE level features, and most EXTENDED features). It
142
 
    includes many function calls not supported under SVr4 curses
143
 
    (but portability of all calls is documented so you can use the
144
 
    SVr4 subset only).</li>
145
 
 
146
 
    <li>Unlike SVr3 curses, ncurses can write to the
147
 
    rightmost-bottommost corner of the screen if your terminal has
148
 
    an insert-character capability.</li>
149
 
 
150
 
    <li>Ada95 and C++ bindings.</li>
151
 
 
152
 
    <li>Support for mouse event reporting with X Window xterm and
153
 
    FreeBSD and OS/2 console windows.</li>
154
 
 
155
 
    <li>Extended mouse support via Alessandro Rubini's gpm
156
 
    package.</li>
157
 
 
158
 
    <li>The function <code>wresize</code> allows you to resize
159
 
    windows, preserving their data.</li>
160
 
 
161
 
    <li>The function <code>use_default_colors</code> allows you to
162
 
    use the terminal's default colors for the default color pair,
163
 
    achieving the effect of transparent colors.</li>
164
 
 
165
 
    <li>The functions <code>keyok</code> and
166
 
    <code>define_key</code> allow you to better control the use of
167
 
    function keys, e.g., disabling the ncurses KEY_MOUSE, or by
168
 
    defining more than one control sequence to map to a given key
169
 
    code.</li>
170
 
 
171
 
    <li>Support for 256-color terminals, such as modern xterm, when
172
 
    configured using the <code>--enable-ext-colors</code>
173
 
    option.</li>
174
 
 
175
 
    <li>Support for 16-color terminals, such as <em>aixterm</em>
176
 
    and <em>modern xterm</em>.</li>
177
 
 
178
 
    <li>Better cursor-movement optimization. The package now
179
 
    features a cursor-local-movement computation more efficient
180
 
    than either BSD's or System V's.</li>
181
 
 
182
 
    <li>Super hardware scrolling support. The screen-update code
183
 
    incorporates a novel, simple, and cheap algorithm that enables
184
 
    it to make optimal use of hardware scrolling, line-insertion,
185
 
    and line-deletion for screen-line movements. This algorithm is
186
 
    more powerful than the 4.4BSD curses <code>quickch</code>
187
 
    routine.</li>
188
 
 
189
 
    <li>Real support for terminals with the magic-cookie glitch.
190
 
    The screen-update code will refrain from drawing a highlight if
191
 
    the magic- cookie unattributed spaces required just before the
192
 
    beginning and after the end would step on a non-space
193
 
    character. It will automatically shift highlight boundaries
194
 
    when doing so would make it possible to draw the highlight
195
 
    without changing the visual appearance of the screen.</li>
196
 
 
197
 
    <li>It is possible to generate the library with a list of
198
 
    pre-loaded fallback entries linked to it so that it can serve
199
 
    those terminal types even when no terminfo tree or termcap file
200
 
    is accessible (this may be useful for support of
201
 
    screen-oriented programs that must run in single-user
202
 
    mode).</li>
203
 
 
204
 
    <li>The tic(1)/captoinfo utility provided with ncurses has the
205
 
    ability to translate many termcaps from the XENIX, IBM and
206
 
    AT&amp;T extension sets.</li>
207
 
 
208
 
    <li>A BSD-like tset(1) utility is provided.</li>
209
 
 
210
 
    <li>The ncurses library and utilities will automatically read
211
 
    terminfo entries from $HOME/.terminfo if it exists, and compile
212
 
    to that directory if it exists and the user has no write access
213
 
    to the system directory. This feature makes it easier for users
214
 
    to have personal terminfo entries without giving up access to
215
 
    the system terminfo directory.</li>
216
 
 
217
 
    <li>You may specify a path of directories to search for
218
 
    compiled descriptions with the environment variable
219
 
    TERMINFO_DIRS (this generalizes the feature provided by
220
 
    TERMINFO under stock System V.)</li>
221
 
 
222
 
    <li>In terminfo source files, use capabilities may refer not
223
 
    just to other entries in the same source file (as in System V)
224
 
    but also to compiled entries in either the system terminfo
225
 
    directory or the user's $HOME/.terminfo directory.</li>
226
 
 
227
 
    <li>A script (<strong>capconvert</strong>) is provided to help
228
 
    BSD users transition from termcap to terminfo. It gathers the
229
 
    information in a TERMCAP environment variable and/or a
230
 
    ~/.termcap local entries file and converts it to an equivalent
231
 
    local terminfo tree under $HOME/.terminfo.</li>
232
 
 
233
 
    <li>Automatic fallback to the /etc/termcap file can be compiled
234
 
    in when it is not possible to build a terminfo tree. This
235
 
    feature is neither fast nor cheap, you don't want to use it
236
 
    unless you have to, but it's there.</li>
237
 
 
238
 
    <li>The table-of-entries utility <strong>toe</strong> makes it
239
 
    easy for users to see exactly what terminal types are available
240
 
    on the system.</li>
241
 
 
242
 
    <li>The library meets the XSI requirement that every macro
243
 
    entry point have a corresponding function which may be linked
244
 
    (and will be prototype-checked) if the macro definition is
245
 
    disabled with <code>#undef</code>.</li>
246
 
 
247
 
    <li>An HTML "Introduction to Programming with NCURSES" document
248
 
    provides a narrative introduction to the curses programming
249
 
    interface.</li>
250
 
  </ul>
251
 
 
252
 
  <h1>State of the Package</h1>Numerous bugs present in earlier
253
 
  versions have been fixed; the library is far more reliable than
254
 
  it used to be. Bounds checking in many `dangerous' entry points
255
 
  has been improved. The code is now type-safe according to gcc
256
 
  -Wall. The library has been checked for malloc leaks and arena
257
 
  corruption by the Purify memory-allocation tester.
258
 
 
259
 
  <p>The ncurses code has been tested with a wide variety of
260
 
  applications including (versions starting with those noted):</p>
261
 
 
262
 
  <dl>
263
 
    <dt>cdk</dt>
264
 
 
265
 
    <dd>Curses Development Kit<br>
266
 
    <a href=
267
 
    "http://invisible-island.net/cdk/">http://invisible-island.net/cdk/</a><br>
268
 
 
269
 
    <a href=
270
 
    "http://www.vexus.ca/products/CDK/">http://www.vexus.ca/products/CDK/</a></dd>
271
 
 
272
 
    <dt>ded</dt>
273
 
 
274
 
    <dd>directory-editor<br>
275
 
    <a href=
276
 
    "http://invisible-island.net/ded/">http://invisible-island.net/ded/</a></dd>
277
 
 
278
 
    <dt>dialog</dt>
279
 
 
280
 
    <dd>the underlying application used in Slackware's setup, and
281
 
    the basis for similar applications on GNU/Linux.<br>
282
 
    <a href=
283
 
    "http://invisible-island.net/dialog/">http://invisible-island.net/dialog/</a></dd>
284
 
 
285
 
    <dt>lynx</dt>
286
 
 
287
 
    <dd>the character-screen WWW browser<br>
288
 
    <a href=
289
 
    "http://lynx.isc.org/release/">http://lynx.isc.org/release/</a></dd>
290
 
 
291
 
    <dt>Midnight Commander</dt>
292
 
 
293
 
    <dd>file manager<br>
294
 
    <a href=
295
 
    "http://www.midnight-commander.org/">http://www.midnight-commander.org/</a></dd>
296
 
 
297
 
    <dt>mutt</dt>
298
 
 
299
 
    <dd>mail utility<br>
300
 
    <a href="http://www.mutt.org/">http://www.mutt.org/</a></dd>
301
 
 
302
 
    <dt>ncftp</dt>
303
 
 
304
 
    <dd>file-transfer utility<br>
305
 
    <a href="http://www.ncftp.com/">http://www.ncftp.com/</a></dd>
306
 
 
307
 
    <dt>nvi</dt>
308
 
 
309
 
    <dd>New vi versions 1.50 are able to use ncurses versions 1.9.7
310
 
    and later.<br>
311
 
    <a href=
312
 
    "https://sites.google.com/a/bostic.com/keithbostic/nvi">https://sites.google.com/a/bostic.com/keithbostic/nvi</a><br>
313
 
    </dd>
314
 
 
315
 
    <dt>pinfo</dt>
316
 
 
317
 
    <dd>Lynx-like info browser. <a href=
318
 
    "https://alioth.debian.org/projects/pinfo/">https://alioth.debian.org/projects/pinfo/</a></dd>
319
 
 
320
 
    <dt>tin</dt>
321
 
 
322
 
    <dd>newsreader, supporting color, MIME <a href=
323
 
    "http://www.tin.org/">http://www.tin.org/</a></dd>
324
 
  </dl>as well as some that use ncurses for the terminfo support
325
 
  alone:
326
 
 
327
 
  <dl>
328
 
    <dt>minicom</dt>
329
 
 
330
 
    <dd>terminal emulator<br>
331
 
    <a href=
332
 
    "http://alioth.debian.org/projects/minicom/">http://alioth.debian.org/projects/minicom/</a></dd>
333
 
 
334
 
    <dt>vile</dt>
335
 
 
336
 
    <dd>vi-like-emacs<br>
337
 
    <a href=
338
 
    "http://invisible-island.net/vile/">http://invisible-island.net/vile/</a></dd>
339
 
  </dl>
340
 
 
341
 
  <p>The ncurses distribution includes a selection of test programs
342
 
  (including a few games).</p>
343
 
 
344
 
  <h2>Who's Who and What's What</h2>Zeyd Ben-Halim started it from
345
 
  a previous package pcurses, written by Pavel Curtis. Eric S.
 
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.
346
2245
  Raymond continued development. J&uuml;rgen Pfeifer wrote most of
347
 
  the form and menu libraries. Ongoing work is being done by
 
2246
  the form and menu libraries. Ongoing development work is done by
348
2247
  <a href="mailto:dickey@invisible-island.net">Thomas Dickey</a>.
349
 
  Thomas Dickey acts as the maintainer for the Free Software
350
 
  Foundation, which holds the copyright on ncurses. Contact the
351
 
  current maintainers at <a href=
352
 
  "mailto:bug-ncurses@gnu.org">bug-ncurses@gnu.org</a>.
353
 
 
354
 
  <p>To join the ncurses mailing list, please write email to
355
 
  <code>bug-ncurses-request@gnu.org</code> containing the line:</p>
356
 
  <pre>
357
 
             subscribe &lt;name&gt;@&lt;host.domain&gt;
358
 
</pre>
 
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>
359
2270
 
360
2271
  <p>This list is open to anyone interested in helping with the
361
2272
  development and testing of this package.</p>
362
2273
 
363
 
  <p>Beta versions of ncurses and patches to the current release
364
 
  are made available at <a href=
365
 
  "ftp://invisible-island.net/ncurses/">ftp://invisible-island.net/ncurses/</a>&nbsp;.</p>
366
 
 
367
 
  <h2>Future Plans</h2>
 
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>
368
2296
 
369
2297
  <ul>
370
 
    <li>Extended-level XPG4 conformance, with internationalization
371
 
    support.</li>
372
 
 
373
 
    <li>Ports to more systems, including DOS and Windows.</li>
374
 
  </ul>We need people to help with these projects. If you are
375
 
  interested in working on them, please join the ncurses list.
376
 
 
377
 
  <h2>Other Related Resources</h2>The distribution provides a newer
378
 
  version of the terminfo-format terminal description file once
379
 
  maintained by <a href="http://www.catb.org/~esr/terminfo/">Eric
 
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
380
2336
  Raymond</a>&nbsp;. Unlike the older version, the termcap and
381
2337
  terminfo data are provided in the same file, and provides several
382
 
  user-definable extensions beyond the X/Open specification.
 
2338
  user-definable extensions beyond the X/Open specification.</p>
383
2339
 
384
2340
  <p>You can find lots of information on terminal-related topics
385
2341
  not covered in the terminfo file at <a href=
386
2342
  "http://web.archive.org/web/*/http://www.cs.utk.edu/~shuford/terminal">
387
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>
388
2420
</body>
389
2421
</html>