5a2a139850d892ffa8efa3b34501cbf10710a5f0
[ncurses.git] / ANNOUNCE
1                             Announcing ncurses 5.5
2
3    The  ncurses  (new  curses)  library  is  a free software emulation of
4    curses  in  System  V  Release 4.0, and more. It uses terminfo format,
5    supports  pads  and color and multiple highlights and forms characters
6    and   function-key   mapping,   and  has  all  the  other  SYSV-curses
7    enhancements over BSD curses.
8
9    In  mid-June  1995,  the  maintainer of 4.4BSD curses declared that he
10    considered  4.4BSD curses obsolete, and encouraged the keepers of Unix
11    releases such as BSD/OS, FreeBSD and NetBSD to switch over to ncurses.
12
13    The ncurses code was developed under GNU/Linux. It has been in use for
14    some  time  with  OpenBSD as the system curses library, and on FreeBSD
15    and  NetBSD  as  an  external  package.  It  should port easily to any
16    ANSI/POSIX-conforming UNIX. It has even been ported to OS/2 Warp!
17
18    The distribution includes the library and support utilities, including
19    a   terminfo  compiler  tic(1),  a  decompiler  infocmp(1),  clear(1),
20    tput(1),  tset(1),  and  a  termcap conversion tool captoinfo(1). Full
21    manual pages are provided for the library and tools.
22
23    The  ncurses  distribution  is  available via anonymous FTP at the GNU
24    distribution site [1]ftp://ftp.gnu.org/gnu/ncurses/ .
25    It is also available at [2]ftp://invisible-island.net/ncurses/ .
26
27                                  Release Notes
28
29    This  release  is  designed  to  be upward compatible from ncurses 5.0
30    through   5.4;  very  few  applications  will  require  recompilation,
31    depending   on  the  platform.  These  are  the  highlights  from  the
32    change-log since ncurses 5.4 release.
33
34    Interface changes:
35      * terminfo   installs  "xterm-new"  as  "xterm"  entry  rather  than
36        "xterm-old" (aka xterm-r6).
37      * terminfo  data  is  installed using the tic -x option (few systems
38        still use ncurses 4.2).
39      * modify  C++  binding to work with newer C++ compilers by providing
40        initializers  and  using  modern casts. Old-style header names are
41        still  used  in  this  release  to allow compiling with not-so-old
42        compilers.
43      * modify parameter type in c++ binding for insch() and mvwinsch() to
44        be  consistent  with  underlying  ncurses  library  (was  char, is
45        chtype).
46      * change NCursesWindow::err_handler() to a virtual function.
47      * form  and  menu  libraries  now  work  with  wide-character  data.
48        Applications  which  bypassed the form library and manipulated the
49        FIELD.buf  data  directly  will  not  work properly with libformw,
50        since   that   no   longer   points  to  an  array  of  char.  The
51        set_field_buffer()  and field_buffer() functions translate to/from
52        the actual field data.
53      * add  symbol  to  curses.h which can be used to suppress include of
54        stdbool.h, e.g.,
55                 #define NCURSES_ENABLE_STDBOOL_H 0
56                 #include <curses.h>
57
58      * change  SP->_current_attr  to  a pointer, adjust ifdef's to ensure
59        that  libtinfo.so  and  libtinfow.so have the same ABI. The reason
60        for  this  is  that  the  corresponding  data which belongs to the
61        upper-level ncurses library has a different size in each model.
62      * winnstr()   now   returns  multibyte  character  strings  for  the
63        wide-character configuration.
64      * assume_default_colors()      no      longer      requires     that
65        use_default_colors() be called first.
66      * data_ahead() now works with wide-characters.
67      * slk_set()  and  slk_wset()  now  accept  and  store  multibyte  or
68        multicolumn characters.
69      * start_color()  now returns OK if colors have already been started.
70        start_color() also returns ERR if it cannot allocate memory.
71      * pair_content()  now returns -1 for consistency with init_pair() if
72        it corresponds to the default-color.
73      * unctrl()  now returns null if its parameter does not correspond to
74        an unsigned char.
75
76    New features and improvements:
77      * library
78           + environment     variable     NCURSES_NO_UTF8_ACS     supports
79             miscellaneous   terminal  emulators  which  ignore  alternate
80             character set escape sequences when in UTF-8 mode.
81           + modify  initialization  of  key  lookup  table  so that if an
82             extended  capability (tic -x) string is defined, and its name
83             begins  with  'k',  ncurses  will automatically treat it as a
84             key.
85           + change  GPM  initialization,  using  dl  library  to  load it
86             dynamically at runtime.
87           + form, menu and panel libraries support debug-tracing.
88      * add   NCURSES-Programming-HOWTO.html   by   Pradeep   Padala  (see
89        http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/).
90      * programs:
91      * infocmp:
92           + The  -i  option  now matches 8-bit controls against its table
93             entries, e.g., so it can analyze the xterm-8bit entry.
94           + add  "-x"  option to infocmp like tic's "-x", for use in "-F"
95             comparisons.  This  modifies  infocmp to only report extended
96             capabilities  if  the  -x  option  is given, making this more
97             consistent  with  tic.  Some scripts may break, since infocmp
98             previous gave this information without an option.
99      * tic:
100           + modify  termcap-parsing  to retain 2-character aliases at the
101             beginning of an entry if the "-x" option is used in tic.
102           + filter  out  long  extended names when translating to termcap
103             format.  Only  two  characters  are  permissible  for termcap
104             capability names.
105           + correct  translation  of  "%%" in terminfo format to termcap,
106             e.g., using "tic -C".
107           + modify  the  "-c  -v" options to ignore delays when comparing
108             strings.  Also  modify  it  to  ignore a canceled sgr string,
109             e.g.,  for terminals which cannot properly combine attributes
110             in one control sequence.
111           + add  a  check  for  improperly  ended  strings, i.e., where a
112             following line begins in column 1.
113           + add a check in tic for terminfo entries having an sgr0 but no
114             sgr string. This confuses Tru64 and HPUX curses when combined
115             with  color,  e.g., making them leave line-drawing characters
116             in odd places.
117           + add  check (with debug configuration) that provides about the
118             runtime  changes  that  would  be  made  to  sgr0 for termcap
119             applications.
120      * tset:
121           + add  -c  and  -w  options  to allow user to suppress ncurses'
122             resizing  of the terminal emulator window in the special case
123             where it is not able to detect the true size.
124
125    Major bug fixes:
126      * improve  logic  in tgetent() which adjusts the termcap "me" string
127        to  work with ISO-2022 string used in xterm-new. This is a feature
128        that was incompletely implemented in ncurses 5.3. ncurses attempts
129        to  provide  termcap clients with the portion of the sgr0 (termcap
130        "me") string that does not reset line-drawing.
131      * cells  in  the  WINDOW  which  are  continuations of a multicolumn
132        character   are   encoded   differently,  making  repainting  more
133        reliable.
134      * amend  change to setupterm() in ncurses 5.4 (20030405) which would
135        reuse  the value of cur_term if the same output was selected. This
136        now  reuses  it  only  when  setupterm() is called from tgetent(),
137        which  has no notion of separate SCREENs. Note that tgetent() must
138        be called after initscr() or newterm() to use this feature.
139      * make  setcchar() now works when its wchar_t* parameter is pointing
140        to a string which contains more data than can be converted.
141      * win_wchnstr() now works for more than one cell.
142      * resizeterm() now processes all levels of window hierarchy.
143      * disable  GPM  mouse support when $TERM happens to be prefixed with
144        "xterm".  Gpm_Open()  would otherwise assert that it can deal with
145        mouse events in this case.
146      * add  SP->_screen_acs_map[], used to ensure that mapping of missing
147        line-drawing   characters   is   handled  properly.  For  example,
148        ACS_DARROW  is  absent  from  xterm-new, and it was coincidentally
149        displayed the same as ACS_BTEE.
150
151    Portability:
152      * configure script:
153           + new options:
154
155               --enable-largefile
156                       set  compiler  and  linker  flags  to use largefile
157                       support.
158
159               --enable-ext-colors
160                       Allow  encoding  of  256  foreground and background
161                       colors,    e.g.,   with   the   xterm-256color   or
162                       xterm-88color terminfo entries. This requires ABI 6
163                       because it changes the size of cchar_t.
164
165               --enable-ext-mouse
166                       This  defines NCURSES_MOUSE_VERSION 2, and modifies
167                       the encoding of mouse events to support wheel mice,
168                       which may transmit buttons 4 and 5. This works with
169                       xterm and similar terminal emulators. This requires
170                       ABI  6  because  it  changes  the encoding of mouse
171                       events.
172
173               --with-chtype
174                       overriding of the non-LP64 model's use of chtype
175
176               --with-mmask-t
177                       overriding of the non-LP64 model's use of mmask_t
178
179               --without-xterm-new
180                       Installs  "xterm-old"  as  the "xterm" entry of the
181                       terminfo database.
182
183           + The  --with-termlib option now accepts a value which sets the
184             name  of the terminfo library. This would allow a packager to
185             build libtinfow.so renamed to coincide with libtinfo.so
186           + fixes/improvements for cross-compiling:
187                o suppress     $suffix     in     misc/run_tic.sh     when
188                  cross-compiling.  This  allows cross-compiles to use the
189                  host's  tic  program  to  handle the "make install.data"
190                  step.
191                o correct       BUILD_CPPFLAGS       substitution       in
192                  ncurses/Makefile.in,  to  allow  cross-compiling  from a
193                  separate directory tree.
194      * library:
195           + add  ifdef's  for  _LP64  in curses.h to avoid using wasteful
196             64-bits  for  chtype  and  mmask_t,  but add configure option
197             --disable-lp64 in case anyone used that configuration.
198           + modify  C++  binding to use some C internal functions to make
199             it compile properly on Solaris (and other platforms).
200           + remove  check  in  newwin()  that prevents allocating windows
201             that extend beyond the screen (Solaris does this).
202           + check  for  nl_langinfo(CODESET),  use  it if available. This
203             replaces  ad  hoc  tests of environment variables to check if
204             the  terminal is setup for UTF-8 encoding. Applications which
205             do  not  call  setlocale()  should be corrected, to make them
206             work properly with UTF-8 encoding.
207             In  particular,  applications  which  assume (and do not call
208             setlocale())  that Latin-1 codes are printable will no longer
209             work  in a UTF-8 locale since the ad hoc check of environment
210             variables  to  see  if  the locale was UTF-8 is not used when
211             nl_langinfo(CODESET) is available.
212           + use  setlocale() to query the program's current locale rather
213             than  using  getenv().  This supports applications which rely
214             upon  legacy treatment of 8-bit characters when the locale is
215             not initialized.
216
217                               Features of Ncurses
218
219    The ncurses package is fully compatible with SVr4 (System V Release 4)
220    curses:
221      * All  257  of  the  SVr4  calls  have  been  implemented  (and  are
222        documented).
223      * Full  support for SVr4 curses features including keyboard mapping,
224        color,   forms-drawing   with   ACS   characters,   and  automatic
225        recognition of keypad and function keys.
226      * An  emulation  of  the  SVr4 panels library, supporting a stack of
227        windows with backing store, is included.
228      * An  emulation  of the SVr4 menus library, supporting a uniform but
229        flexible interface for menu programming, is included.
230      * An  emulation of the SVr4 form library, supporting data collection
231        through on-screen forms, is included.
232      * Binary   terminfo   entries   generated   by  the  ncurses  tic(1)
233        implementation  are  bit-for-bit-compatible  with the entry format
234        SVr4 curses uses.
235      * The utilities have options to allow you to filter terminfo entries
236        for  use  with  less  capable curses/terminfo versions such as the
237        HP/UX and AIX ports.
238
239    The ncurses package also has many useful extensions over SVr4:
240      * The  API  is 8-bit clean and base-level conformant with the X/OPEN
241        curses  specification, XSI curses (that is, it implements all BASE
242        level   features,   but   not   all   EXTENDED   features).   Most
243        EXTENDED-level features not directly concerned with wide-character
244        support   are  implemented,  including  many  function  calls  not
245        supported  under  SVr4  curses  (but  portability  of all calls is
246        documented so you can use the SVr4 subset only).
247      * Unlike  SVr3 curses, ncurses can write to the rightmost-bottommost
248        corner  of  the  screen  if  your terminal has an insert-character
249        capability.
250      * Ada95 and C++ bindings.
251      * Support  for  mouse  event  reporting with X Window xterm and OS/2
252        console windows.
253      * Extended mouse support via Alessandro Rubini's gpm package.
254      * The  function  wresize()  allows you to resize windows, preserving
255        their data.
256      * The function use_default_colors() allows you to use the terminal's
257        default colors for the default color pair, achieving the effect of
258        transparent colors.
259      * The functions keyok() and define_key() allow you to better control
260        the  use  of function keys, e.g., disabling the ncurses KEY_MOUSE,
261        or  by  defining  more than one control sequence to map to a given
262        key code.
263      * Support for 16-color terminals, such as aixterm and XFree86 xterm.
264      * Better  cursor-movement  optimization.  The package now features a
265        cursor-local-movement computation more efficient than either BSD's
266        or System V's.
267      * Super   hardware   scrolling   support.   The  screen-update  code
268        incorporates  a novel, simple, and cheap algorithm that enables it
269        to  make  optimal  use  of hardware scrolling, line-insertion, and
270        line-deletion  for  screen-line  movements. This algorithm is more
271        powerful than the 4.4BSD curses quickch() routine.
272      * Real  support  for  terminals  with  the  magic-cookie glitch. The
273        screen-update  code  will  refrain from drawing a highlight if the
274        magic-   cookie  unattributed  spaces  required  just  before  the
275        beginning  and  after the end would step on a non-space character.
276        It  will  automatically  shift  highlight boundaries when doing so
277        would  make it possible to draw the highlight without changing the
278        visual appearance of the screen.
279      * It  is  possible to generate the library with a list of pre-loaded
280        fallback  entries linked to it so that it can serve those terminal
281        types  even  when  no  terminfo tree or termcap file is accessible
282        (this  may  be useful for support of screen-oriented programs that
283        must run in single-user mode).
284      * The tic(1)/captoinfo utility provided with ncurses has the ability
285        to  translate many termcaps from the XENIX, IBM and AT&T extension
286        sets.
287      * A BSD-like tset(1) utility is provided.
288      * The ncurses library and utilities will automatically read terminfo
289        entries  from  $HOME/.terminfo  if  it exists, and compile to that
290        directory  if  it  exists  and the user has no write access to the
291        system  directory.  This feature makes it easier for users to have
292        personal  terminfo  entries without giving up access to the system
293        terminfo directory.
294      * You  may  specify  a  path  of  directories to search for compiled
295        descriptions  with  the  environment  variable TERMINFO_DIRS (this
296        generalizes  the  feature  provided by TERMINFO under stock System
297        V.)
298      * In  terminfo  source files, use capabilities may refer not just to
299        other entries in the same source file (as in System V) but also to
300        compiled  entries  in  either the system terminfo directory or the
301        user's $HOME/.terminfo directory.
302      * A  script  (capconvert)  is  provided to help BSD users transition
303        from  termcap to terminfo. It gathers the information in a TERMCAP
304        environment  variable  and/or  a ~/.termcap local entries file and
305        converts   it   to   an   equivalent  local  terminfo  tree  under
306        $HOME/.terminfo.
307      * Automatic  fallback  to  the  /etc/termcap file can be compiled in
308        when  it is not possible to build a terminfo tree. This feature is
309        neither  fast  nor cheap, you don't want to use it unless you have
310        to, but it's there.
311      * The  table-of-entries  utility  toe makes it easy for users to see
312        exactly what terminal types are available on the system.
313      * The library meets the XSI requirement that every macro entry point
314        have  a  corresponding  function  which may be linked (and will be
315        prototype-checked)  if  the  macro  definition  is  disabled  with
316        #undef.
317      * An  HTML  "Introduction  to  Programming  with  NCURSES"  document
318        provides  a  narrative  introduction  to  the  curses  programming
319        interface.
320
321                              State of the Package
322
323    Numerous bugs present in earlier versions have been fixed; the library
324    is  far  more  reliable  than  it  used to be. Bounds checking in many
325    `dangerous'  entry points has been improved. The code is now type-safe
326    according  to gcc -Wall. The library has been checked for malloc leaks
327    and arena corruption by the Purify memory-allocation tester.
328
329    The  ncurses  code has been tested with a wide variety of applications
330    including (versions starting with those noted):
331
332    cdk
333           Curses Development Kit
334           [3]http://invisible-island.net/cdk/
335           [4]http://www.vexus.ca/products/CDK/
336
337    ded
338           directory-editor
339           [5]http://invisible-island.net/ded/
340
341    dialog
342           the  underlying  application used in Slackware's setup, and the
343           basis for similar applications on GNU/Linux.
344           [6]http://invisible-island.net/dialog/
345
346    lynx
347           the character-screen WWW browser
348           [7]http://lynx.isc.org/release/
349
350    Midnight Commander
351           file manager
352           [8]http://www.ibiblio.org/mc/
353
354    mutt
355           mail utility
356           [9]http://www.mutt.org/
357
358    ncftp
359           file-transfer utility
360           [10]http://www.ncftp.com/
361
362    nvi
363           New vi versions 1.50 are able to use ncurses versions 1.9.7 and
364           later.
365           [11]http://www.bostic.com/vi/
366
367    pinfo
368           Lynx-like info browser.
369           [12]http://dione.ids.pl/~pborys/software/pinfo/
370
371    tin
372           newsreader, supporting color, MIME [13]http://www.tin.org/
373
374    vh-1.6
375           Volks-Hypertext browser for the Jargon File
376           [14]http://www.debian.org/Packages/unstable/text/vh.html
377
378    as well as some that use ncurses for the terminfo support alone:
379
380    minicom
381           terminal emulator
382           [15]http://www.netsonic.fi/~walker/minicom.html
383
384    vile
385           vi-like-emacs
386           [16]http://invisible-island.net/vile/
387
388    The  ncurses  distribution  includes  a  selection  of  test  programs
389    (including a few games).
390
391 Who's Who and What's What
392
393    Zeyd  Ben-Halim started it from a previous package pcurses, written by
394    Pavel  Curtis.  Eric  S. Raymond continued development. Jürgen Pfeifer
395    wrote  most of the form and menu libraries. Ongoing work is being done
396    by  [17]Thomas  Dickey.  Thomas  Dickey acts as the maintainer for the
397    Free  Software  Foundation,  which  holds  the  copyright  on ncurses.
398    Contact the current maintainers at [18]bug-ncurses@gnu.org.
399
400    To   join   the   ncurses   mailing   list,   please  write  email  to
401    bug-ncurses-request@gnu.org containing the line:
402              subscribe <name>@<host.domain>
403
404    This list is open to anyone interested in helping with the development
405    and testing of this package.
406
407    Beta  versions  of ncurses and patches to the current release are made
408    available at [19]ftp://invisible-island.net/ncurses/ .
409
410 Future Plans
411
412      * Extended-level   XPG4   conformance,   with   internationalization
413        support.
414      * Ports to more systems, including DOS and Windows.
415
416    We  need  people to help with these projects. If you are interested in
417    working on them, please join the ncurses list.
418
419 Other Related Resources
420
421    The  distribution  provides  a  newer  version  of the terminfo-format
422    terminal  description file maintained by [20]Eric Raymond . Unlike the
423    older  version, the termcap and terminfo data are provided in the same
424    file.
425
426    You  can  find  lots  of  information  on  terminal-related topics not
427    covered in the terminfo file at [21]Richard Shuford's archive .
428
429 References
430
431    1. ftp://ftp.gnu.org/gnu/ncurses/
432    2. ftp://invisible-island.net/ncurses/
433    3. http://invisible-island.net/cdk/
434    4. http://www.vexus.ca/products/CDK/
435    5. http://invisible-island.net/ded/
436    6. http://invisible-island.net/dialog/
437    7. http://lynx.isc.org/release/
438    8. http://www.ibiblio.org/mc/
439    9. http://www.mutt.org/
440   10. http://www.ncftp.com/
441   11. http://www.bostic.com/vi/
442   12. http://dione.ids.pl/~pborys/software/pinfo/
443   13. http://www.tin.org/
444   14. http://www.debian.org/Packages/unstable/text/vh.html
445   15. http://www.netsonic.fi/~walker/minicom.html
446   16. http://invisible-island.net/vile/
447   17. mailto:dickey@invisible-island.net
448   18. mailto:bug-ncurses@gnu.org
449   19. ftp://invisible-island.net/ncurses/
450   20. http://www.catb.org/~esr/terminfo/
451   21. http://www.cs.utk.edu/~shuford/terminal_index.html