
                            Announcing ncurses 5.3

   The  ncurses  (new  curses)  library  is  a free software emulation of
   curses  in  System  V  Release 4.0, and more. It uses terminfo format,
   supports  pads  and color and multiple highlights and forms characters
   and   function-key   mapping,   and  has  all  the  other  SYSV-curses
   enhancements over BSD curses.

   In  mid-June  1995,  the  maintainer of 4.4BSD curses declared that he
   considered  4.4BSD  curses obsolete, and is encouraging the keepers of
   Unix  releases  such  as  BSD/OS, freeBSD and netBSD to switch over to
   ncurses.

   The ncurses code was developed under GNU/Linux. It has been in use for
   some  time  with  OpenBSD as the system curses library, and on FreeBSD
   and  NetBSD  as  an  external  package.  It  should port easily to any
   ANSI/POSIX-conforming UNIX. It has even been ported to OS/2 Warp!

   The distribution includes the library and support utilities, including
   a   terminfo  compiler  tic(1),  a  decompiler  infocmp(1),  clear(1),
   tput(1),  tset(1),  and  a  termcap conversion tool captoinfo(1). Full
   manual pages are provided for the library and tools.

   The  ncurses  distribution  is  available via anonymous FTP at the GNU
   distribution site [1]ftp://ftp.gnu.org/pub/gnu/ncurses.
   It is also available at [2]ftp://invisible-island.net/ncurses.

                                 Release Notes

   This  release is designed to be upward compatible from ncurses 5.0 and
   5.2;  very  few  applications will require recompilation, depending on
   the  platform.  These  are  the  highlights  from the change-log since
   ncurses 5.2 release.

   Interface changes:
     * change  type  for  bool  used  in  headers  to NCURSES_BOOL, which
       usually is the same as the compiler's definition for bool.
     * add  all  but  two  functions  for  X/Open  curses  wide-character
       support.  These  are  only  available if the library is configured
       using the --enable-widec option. Missing functions are
          + pecho_wchar()
          + slk_wset()
     * add  environment  variable  $NCURSES_ASSUMED_COLORS  to modify the
       assume_default_colors() extension.

   New features and improvements:
     * Improved support for termcap applications:
          + add  logic to dump_entry.c to remove function-key definitions
            that  do  not  fit  into  the  1023-byte  limit for generated
            termcaps. This makes hds200 fit.
          + modify  tgetent()  to check if exit_attribute_mode resets the
            alternate  character  set,  and  if so, attempt to adjust the
            copy  of  the  termcap  "me"  string  which it will return to
            eliminate that part. In particular, 'screen' would lose track
            of line-drawing characters.
          + add  check/fix  to  comp_parse.c  to  suppress  warning about
            missing acsc string. This happens in configurations where raw
            termcap  information  is processed; tic already does this and
            other checks.
          + add   tic  -A  option  to  suppress  capabilities  which  are
            commented out when translating to termcap.
          + modify  logic  in  lib_baudrate.c  for ospeed, for FreeBSD to
            make  it  work  properly  for  termcap applications (patch by
            Andrey A Chernov).
     * add a call to _nc_keypad() in keypad() to accommodate applications
       such  as nvi, which use curses for output but not for input (fixes
       Debian #131263, cf: 20011215).
     * correct  logic  for  COLORFGBG  environment  variable:  if rxvt is
       compiled  with  xpm support, the variable has three fields, making
       it   slightly  incompatible  with  itself.  In  either  case,  the
       background color is the last field.

   Major bug fixes:
     * rewrote     limit-checks     in     wscrl()     and     associated
       _nc_scroll_window(), to ensure that if the parameter of wscrl() is
       larger  than  the size of the scrolling region, then the scrolling
       region will be cleared.
     * modify  tset  to  restore  original  I/O  modes  if  an  error  is
       encountered.  Also  modify  to  use  buffered  stderr consistently
       rather than mixing with write().
     * move  calls  to  def_shell_mode()  and def_prog_mode() before loop
       with  callbacks  in  lib_set_term.c,  since the c++ demo otherwise
       initialized the tty modes before saving them.
     * modified  wresize()  to  ensure  that  a  failed  realloc will not
       corrupt  the  window  structure, and to make subwindows fit within
       the resized window.
     * altered  resizeterm()  to avoid having it fail when a child window
       cannot be resized because it would be larger than its parent.
     * correct/improve  logic  to  produce  an  exit status for errors in
       tput,  which  did not exit with an error when told to put a string
       not in the current terminfo entry.
     * modify  behavior  of can_clear_with() so that if an application is
       running  in  a  non-bce  terminals with default colors enabled, it
       returns  true,  allowing  the  user  to  select/paste text without
       picking up extraneous trailing blanks.
     * add a check in relative_move() to guard against buffer overflow in
       the overwrite logic.
     * add some limit/pointer checks to -S option of tputs.
     * modify  mvcur()  to  avoid emitting newline characters when nonl()
       mode  is  set.  Normally  this  is  not a problem since the actual
       terminal  mode is set to suppress nl/crlf translations, however it
       is  useful  to allow the caller to manipulate the terminal mode to
       avoid  staircasing  effects  after spawning a process which writes
       messages (for lynx 2.8.4).

   Portability:
     * configure script:
          + modify check in --disable-overwrite option so that it is used
            by  default unless the --prefix/$prefix value is not /usr, in
            attempt  to work around packagers who do not read the INSTALL
            notes.
          + correct  a  typo  in configure --enable-colorfgbg option, and
            move it to the experimental section (cf: 20011208).
          + modify  configure script to allow building with termcap only,
            or with fallbacks only. In this case, we do not build tic and
            toe.
          + modify  run_tic.sh  to check if the build is a cross-compile.
            In  that  case,  do  not  use  the build's tic to install the
            terminfo database.
          + modify  c++/Makefile.in  to accommodate archive programs that
            are  different for C++ than for C, and add cases for vendor's
            C++ compilers on Solaris and IRIX.
          + add   several   configure   script   options   to   aid  with
            cross-compiling:     --with-build-cc,    --with-build-cflags,
            --with-build-ldflags, and --with-build-libs.
          + add  experimental  --with-caps=XXX  option  to  customize  to
            similar terminfo database formats such as AIX 4.x
          + add  configure  option  --with-ospeed  to assist packagers in
            transition to 5.3 change to ospeed type.
     * library:
          + implement a simple vsscanf() fallback function which uses the
            %n conversion to help parse the input data.
          + various fixes to build/work with different implementations of
            vsscanf().
          + add/use  macro  to  suppress  sign-extension  of char type on
            platforms  where  this  is  a  problem in ctype macros, e.g.,
            Solaris.
          + finish changes needed to build dll's on cygwin.
          + add  #undef's  before  possible redefinition of ERR and OK in
            curses.h
     * programs:
          + modify  ifdef's  in  write_entry.c  to  allow use of symbolic
            links on platforms with no hard links, e.g., BeOS.
          + modify  _nc_write_entry()  to  allow for the possibility that
            linking  aliases  on a filesystem that ignores case would not
            succeed  because  the  source  and destination differ only by
            case, e.g., NCR260VT300WPP0 on cygwin.
          + modify  logic  in  tic,  toe,  tput and tset which checks for
            basename  of argv[0] to work properly on systems such as OS/2
            which   have   case-independent   filenames   and/or  program
            suffixes, e.g., ".ext".

                              Features of Ncurses

   The ncurses package is fully compatible with SVr4 (System V Release 4)
   curses:
     * All  257  of  the  SVr4  calls  have  been  implemented  (and  are
       documented).
     * Full  support for SVr4 curses features including keyboard mapping,
       color,   forms-drawing   with   ACS   characters,   and  automatic
       recognition of keypad and function keys.
     * An  emulation  of  the  SVr4 panels library, supporting a stack of
       windows with backing store, is included.
     * An  emulation  of the SVr4 menus library, supporting a uniform but
       flexible interface for menu programming, is included.
     * An  emulation of the SVr4 form library, supporting data collection
       through on-screen forms, is included.
     * Binary   terminfo   entries   generated   by  the  ncurses  tic(1)
       implementation  are  bit-for-bit-compatible  with the entry format
       SVr4 curses uses.
     * The utilities have options to allow you to filter terminfo entries
       for  use  with  less  capable curses/terminfo versions such as the
       HP/UX and AIX ports.

   The ncurses package also has many useful extensions over SVr4:
     * The  API  is 8-bit clean and base-level conformant with the X/OPEN
       curses  specification, XSI curses (that is, it implements all BASE
       level   features,   but   not   all   EXTENDED   features).   Most
       EXTENDED-level features not directly concerned with wide-character
       support   are  implemented,  including  many  function  calls  not
       supported  under  SVr4  curses  (but  portability  of all calls is
       documented so you can use the SVr4 subset only).
     * Unlike  SVr3 curses, ncurses can write to the rightmost-bottommost
       corner  of  the  screen  if  your terminal has an insert-character
       capability.
     * Ada95 and C++ bindings.
     * Support  for  mouse  event  reporting with X Window xterm and OS/2
       console windows.
     * Extended mouse support via Alessandro Rubini's gpm package.
     * The  function  wresize()  allows you to resize windows, preserving
       their data.
     * The function use_default_colors() allows you to use the terminal's
       default colors for the default color pair, achieving the effect of
       transparent colors.
     * The functions keyok() and define_key() allow you to better control
       the  use  of function keys, e.g., disabling the ncurses KEY_MOUSE,
       or  by  defining  more than one control sequence to map to a given
       key code.
     * Support for 16-color terminals, such as aixterm and XFree86 xterm.
     * Better  cursor-movement  optimization.  The package now features a
       cursor-local-movement computation more efficient than either BSD's
       or System V's.
     * Super   hardware   scrolling   support.   The  screen-update  code
       incorporates  a novel, simple, and cheap algorithm that enables it
       to  make  optimal  use  of hardware scrolling, line-insertion, and
       line-deletion  for  screen-line  movements. This algorithm is more
       powerful than the 4.4BSD curses quickch() routine.
     * Real  support  for  terminals  with  the  magic-cookie glitch. The
       screen-update  code  will  refrain from drawing a highlight if the
       magic-   cookie  unattributed  spaces  required  just  before  the
       beginning  and  after the end would step on a non-space character.
       It  will  automatically  shift  highlight boundaries when doing so
       would  make it possible to draw the highlight without changing the
       visual appearance of the screen.
     * It  is  possible to generate the library with a list of pre-loaded
       fallback  entries linked to it so that it can serve those terminal
       types  even  when  no  terminfo tree or termcap file is accessible
       (this  may  be useful for support of screen-oriented programs that
       must run in single-user mode).
     * The tic(1)/captoinfo utility provided with ncurses has the ability
       to  translate many termcaps from the XENIX, IBM and AT&T extension
       sets.
     * A BSD-like tset(1) utility is provided.
     * The ncurses library and utilities will automatically read terminfo
       entries  from  $HOME/.terminfo  if  it exists, and compile to that
       directory  if  it  exists  and the user has no write access to the
       system  directory.  This feature makes it easier for users to have
       personal  terminfo  entries without giving up access to the system
       terminfo directory.
     * You  may  specify  a  path  of  directories to search for compiled
       descriptions  with  the  environment  variable TERMINFO_DIRS (this
       generalizes  the  feature  provided by TERMINFO under stock System
       V.)
     * In  terminfo  source files, use capabilities may refer not just to
       other entries in the same source file (as in System V) but also to
       compiled  entries  in  either the system terminfo directory or the
       user's $HOME/.terminfo directory.
     * A  script  (capconvert)  is  provided to help BSD users transition
       from  termcap to terminfo. It gathers the information in a TERMCAP
       environment  variable  and/or  a ~/.termcap local entries file and
       converts   it   to   an   equivalent  local  terminfo  tree  under
       $HOME/.terminfo.
     * Automatic  fallback  to  the  /etc/termcap file can be compiled in
       when  it is not possible to build a terminfo tree. This feature is
       neither  fast  nor cheap, you don't want to use it unless you have
       to, but it's there.
     * The  table-of-entries  utility  toe makes it easy for users to see
       exactly what terminal types are available on the system.
     * The library meets the XSI requirement that every macro entry point
       have  a  corresponding  function  which may be linked (and will be
       prototype-checked)  if  the  macro  definition  is  disabled  with
       #undef.
     * An  HTML  "Introduction  to  Programming  with  NCURSES"  document
       provides  a  narrative  introduction  to  the  curses  programming
       interface.

                             State of the Package

   Numerous bugs present in earlier versions have been fixed; the library
   is  far  more  reliable  than  it  used to be. Bounds checking in many
   `dangerous'  entry points has been improved. The code is now type-safe
   according  to gcc -Wall. The library has been checked for malloc leaks
   and arena corruption by the Purify memory-allocation tester.

   The  ncurses  code has been tested with a wide variety of applications
   including (versions starting with those noted):

   cdk
          Curses Development Kit
          [3]http://invisible-island.net/cdk.
          [4]http://www.vexus.ca/CDK.html

   ded
          directory-editor
          [5]http://invisible-island.net/ded.

   dialog
          the  underlying  application used in Slackware's setup, and the
          basis for similar applications on GNU/Linux.
          [6]http://invisible-island.net/dialog.

   lynx
          the character-screen WWW browser
          [7]http://lynx.isc.org/release.

   Midnight Commander
          file manager
          [8]www.gnome.org/mc/.

   mutt
          mail utility
          [9]http://www.mutt.org.

   ncftp
          file-transfer utility
          [10]http://www.ncftp.com.

   nvi
          New vi versions 1.50 are able to use ncurses versions 1.9.7 and
          later.
          [11]http://www.bostic.com/vi/.

   tin
          newsreader, supporting color, MIME
          [12]http://www.tin.org.

   taper
          tape archive utility
          [13]http://members.iinet.net.au/~yusuf/taper/.

   vh-1.6
          Volks-Hypertext browser for the Jargon File
          [14]http://www.bg.debian.org/Packages/unstable/text/vh.html.

   as well as some that use ncurses for the terminfo support alone:

   minicom
          terminal emulator
          [15]http://www.pp.clinet.fi/~walker/minicom.html.

   vile
          vi-like-emacs
          [16]http://invisible-island.net/vile.

   The  ncurses  distribution  includes  a  selection  of  test  programs
   (including a few games).

Who's Who and What's What

   The original developers of ncurses are [17]Zeyd Ben-Halim and [18]Eric
   S.  Raymond.  Ongoing  work  is  being  done  by [19]Thomas Dickey and
   [20]Jürgen  Pfeifer.  [21]Thomas Dickey acts as the maintainer for the
   Free  Software  Foundation,  which  holds  the  copyright  on ncurses.
   Contact the current maintainers at [22]bug-ncurses@gnu.org.

   To   join   the   ncurses   mailing   list,   please  write  email  to
   bug-ncurses-request@gnu.org containing the line:
             subscribe <name>@<host.domain>

   This list is open to anyone interested in helping with the development
   and testing of this package.

   Beta  versions  of ncurses and patches to the current release are made
   available at [23]ftp://invisible-island.net/ncurses.

Future Plans

     * Extended-level   XPG4   conformance,   with   internationalization
       support.
     * Ports to more systems, including DOS and Windows.

   We  need  people to help with these projects. If you are interested in
   working on them, please join the ncurses list.

Other Related Resources

   The  distribution  includes  and uses a version of the terminfo-format
   terminal    description    file    maintained    by    Eric   Raymond.
   [24]http://earthspace.net/~esr/terminfo.

   You  can  find  lots  of  information  on  terminal-related topics not
   covered in the terminfo file at [25]Richard Shuford's archive.

References

   1. ftp://ftp.gnu.org/pub/gnu/ncurses
   2. ftp://invisible-island.net/ncurses
   3. http://invisible-island.net/cdk/cdk.html
   4. http://www.vexus.ca/CDK.html
   5. http://invisible-island.net/ded/ded.html
   6. http://invisible-island.net/dialog/dialog.html
   7. http://lynx.isc.org/release/
   8. file://localhost/usr/build/ncurses/ncurses-5.2-20021012/doc/html/www.gnome.org/mc/
   9. http://www.mutt.org/
  10. http://www.ncftp.com/
  11. http://www.bostic.com/vi/
  12. http://www.tin.org/
  13. http://members.iinet.net.au/~yusuf/taper/
  14. http://www.bg.debian.org/Packages/unstable/text/vh.html
  15. http://www.pp.clinet.fi/~walker/minicom.html
  16. http://invisible-island.net/vile/vile.html
  17. mailto:zmbenhal@netcom.com
  18. http://www.ccil.org/~esr/home.html
  19. mailto:dickey@herndon4.his.com
  20. http://www.familiepfeifer.de/Contact.aspx?Lang=en
  21. mailto:dickey@herndon4.his.com
  22. mailto:bug-ncurses@gnu.org
  23. ftp://invisible-island.net/ncurses
  24. http://earthspace.net/~esr/terminfo
  25. http://www.cs.utk.edu/~shuford/terminal_index.html
