New: Updated: {ncursesw/libncursesw10/libncursesw-devel/ncursesw-demo}-5.7-18

Charles Wilson
Sun Jan 3 13:45:00 GMT 2010

ncurses is a package that provides character and terminal handling
libraries, including 'gui-like' panels and menus.  It is often used
instead of termcap. ncursesw provides a version of this library and
related tools compiled to support wide characters (that is, wchar_t
rather than char).

Note that ncursesw does NOT contain man pages for the applications;
they are provided by the ncurses package under the 'narrow' names (e.g.
'man clear' for clearw.exe). Similarly, the libncursesw-devel package
does NOT contain man pages about the API; these are provided by the
'narrow' libncurses-devel package.

This is the first official release of ncurses compiled to support
wide characters, and can be installed simultaineously with the "narrow"
ncurses package(s). Like recent (narrow) ncurses packages, it is
compiled with support for reentrancy, and uses the same ABI number
("10" on cygwin for historical reasons; "ABI 6" according to the
upstream ncurses developers). ncurses is not compiled with full
multi-thread support, as that slows operation drastically (see below).

Note that this "reentrancy" support doesn't magically make your client
programs/libraries re-entrant. Internal to libncurses, all calls carry
a specific context variable.  However, the POSIX curses interface
still specifies calls that operate on the "current screen" -- an
obvious re-entrancy violation. Clients must instead use the non-POSIX
extensions provided by ncurses, to ensure that all curses operations are
actually re-entrant. That is:
  POSIX:      int addch(const chtype ch);
  REENTRANT:  int waddch(WINDOW *win, const chtype ch);
Naturally, if reentrancy is not a concern, the POSIX interface can
continue to be used as always. See the man pages for more information.

Clients can be made threadsafe, by universally using the reentrant
interfaces, and managing mutexes on the WINDOW* variables manually. If
ncurses were compiled with full thread support, the WINDOW object would
itself contain a mutex, and all ncurses calls would use it to manage
access. This slows ncurses to a crawl -- even in single-thread
applications. Therefore, I believe the better choice is to compile ncurses
with support for re-entrancy, so that multi-thread client apps that
actually NEED thread safety can use it, and make intelligent decisions
about where they need to incur the mutex locking overhead.

[[ compiled using gcc-4.3.4-3 ]]

As expected now that cygwin-1.7.1 has been officially released, this
ncursesw package is available exclusively for cygwin-1.7.

To use the wide version of ncurses, you must specify explicitly
-I/usr/include/ncursesw and -L/usr/include/libncursesw when compiling
and linking. See /usr/share/doc/Cygwin/ncursesw.README for more
information on how libncursesw-devel can assist you in arranging that
these flags are properly passed to your clients.

cygwin-1.7 now supports UTF-8 encoding by default. It is expected that
the "wide char" version of ncurses, ncursesw, will be of increasing
utility for clients as time goes on. Maintainers, I recommend that you
first attempt to rebuild your applications against libncursesw, and only
use libncurses if it doesn't work, and you can't figure out how to fix
it right away.  See ncursesw.README for more information.

Charles Wilson
volunteer ncurses[w] maintainer for cygwin


To update your installation, click on the "Install Cygwin now" link
on the web page.  This downloads setup.exe to
your system.  Then, run setup and answer all of the questions.


If you want to unsubscribe from the cygwin-announce mailing list, look
at the "List-Unsubscribe: " tag in the email header of this message.
Send email to the address specified there.  It will be in the format:

If you need more information on unsubscribing, start reading here:

Please read *all* of the information on unsubscribing that is
available starting at this URL.

More information about the Cygwin-announce mailing list