X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=announce.html.in;h=89fb3ebeb4622d3121cdf68190348d4c95538c1a;hp=da9298a298deb6b14bedb468b8cb23c3d706b3da;hb=5dbe81a41e3c75806996cd762b9e55dcc9edb835;hpb=f86cbeb5f9bd96ab041d34039c35749a14965039 diff --git a/announce.html.in b/announce.html.in index da9298a2..89fb3ebe 100644 --- a/announce.html.in +++ b/announce.html.in @@ -1,8 +1,7 @@ - + + "HTML Tidy for Linux (vers 25 March 2009), see www.w3.org"> Announcing ncurses @VERSION@ + -

Announcing ncurses @VERSION@

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 +

Announcing ncurses @VERSION@

+ +

Overview

+ +

The ncurses (new curses) library + is a free software emulation of curses in System V Release 4.0 + (SVr4), 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. + function-key mapping, and has all the other SVr4-curses + enhancements over BSD curses. SVr4 curses is better known today + as X/Open Curses.

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

+ keepers of unix releases such as + BSD/OS, FreeBSD and NetBSD to switch over to ncurses.

+ +

Since 1995, ncurses has been + ported to many systems:

+ +

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.

+ including

+ + -

The ncurses distribution is available via anonymous FTP at the - GNU distribution site ftp://ftp.gnu.org/gnu/ncurses/ .
+

Full manual pages are provided for the library and tools.

- It is also available at ftp://invisible-island.net/ncurses/ .

+

The ncurses distribution is + available via anonymous FTP at the GNU distribution site

-

Release Notes

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

ftp://ftp.gnu.org/gnu/ncurses/ .

+
It is also available at -

Interface changes

+
+

ftp://invisible-island.net/ncurses/ .

+
+ +

Release + Notes

+ +

These notes are for ncurses + @VERSION@, released August 8, 2015.

+ +

This release is designed to be source-compatible with + ncurses 5.0 through 5.9; providing a + new application binary interface (ABI). Although the source can + still be configured to support the ncurses 5 ABI, the intent of the release is to + provide extensions which are generally useful, but + binary-incompatible with ncurses + 5:

-
  • add is_pad and is_subwin - functions for opaque access to the WINDOW structure.
  • +

    There are, of course, numerous other improvements, + including

    + + -

    New features and improvements

    +

    The release notes mention some bug-fixes, but are focused on + new features and improvements to existing features log since + ncurses 5.9 release.

    -

    Library Improvements

    +

    While the intent of the release is to provide a new stable + ABI, there are other development activities which are summarized + below.

    -
  • improve the NCURSES_NO_UTF8_ACS feature by - adding a check for an extended terminfo capability - U8.
  • +

    Library + improvements

    -
  • improve performance of tigetstr, etc., by - using hashing code from tic.
  • +

    Output + buffering

    -
  • add WACS_xxx definitions to wide-character - configuration for thick- and double-lines.
  • +

    X/Open curses provides more than one initialization + function:

    -
  • modify init_pair to allow caller to create extra color - pairs beyond the color_pairs limit, which use default - colors.
  • + -

    Improvements to Programs

    +

    They are documented in X/Open as if + initscr calls newterm using + stdout for output stream, and in turn + newterm calls setupterm using + fileno(stdout) for the file descriptor. As long as + an implementation acts as if it does this, it conforms. + In practice, implementations do what is implied. This creates a + problem: the low-level setupterm function's file + descriptor is unbuffered, while newterm implies + buffered output. X/Open Curses says that all output is done + through the file descriptor, and does not say how the output + stream is actually used.

    + +

    Initially, ncurses used the file + descriptor (obtained from the output stream passed to + newterm) for changing the terminal modes, and relied + upon the output parameter of newterm for buffered + output. Later (to avoid using unsafe buffered I/O in signal + handlers), ncurses was modified to + use the file descriptor (unbuffered output) when cleaning up on + receipt of a signal. Otherwise (when not handling a signal), it + continued to use the buffered output.

    + +

    That approach worked reasonably well and as a side effect, + using the same buffered output as an application might use for + printf meant that no flushing was needed when + switching between normal- and screen-modes.

    + +

    There were a couple of problems:

    + + + +

    Conveniently, solving the second problem (by making ncurses do its own output buffering) + also fixed the first one. But there were special cases to + resolve: + low-level functions such as mvcur, putp, vidattr + explicitly use the standard output. Those functions were reused + internally, and required modification to distinguish whether they + were used by the high-level or low-level interfaces.

    + +

    Finally, there may still be a few programs which should be + modified to improve their portability, e.g., adding an

    + +
    +
    +fflush(stdout);
    +
    +
    + +

    when switching from “shell” + mode to “program” + (curses) mode. Those are fairly rare because most programmers + have learned not to mix printf and printw.

    + +

    Symbol + versioning

    + +

    This release introduces symbol-versioning to ncurses because without it, the change of ABI + would be less successful. A lengthy discussion will be presented + in Symbol + versioning in ncurses. These + notes summarize what has changed, and what can be done with the + new release.

    + +

    Symbol-versioning allows the developers of a library to mark + each public symbol (both data and functions) with an identifier + denoting the library name and the version for which it was built. + By doing this, users of the library have a way to help ensure + that applications do not accidentally load an incompatible + library. In addition, private symbols can be hidden entirely.

    + +

    This release provides sample files for the four principal + configurations of ncurses libraries: + ncurses, ncursesw, + ncursest and ncursestw. Each sample is + given in two forms:

    + +
    +
    +
    .map
    + +
    These list all public symbols, together with version + names.
    + +
    .sym
    + +
    These list all public symbols, without version + names.
    +
    +
    + +

    The sample files are generated by scripts which take + into account a few special cases such as tack to omit + many of the ncurses private symbols + (beginning with “_nc_”). Here are + counts of globals versus locals:

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ConfigSymbolsGlobalsLocals"_nc_"
    ncurses976796180332
    ncursesw1089905184343
    ncursest979804175358
    ncursestw1098914184372
    +
    + +

    Although only four sample configurations are presented, each + is formed by merging symbols from several combinations of + configure-script options, taking into account advice from + downstream packagers. Because they are formed by merging, the + sample files may list a symbol which is not in a given package. + That is expected. The samples have been tested and are working + with systems (such as Fedora, FreeBSD and Debian) which fully + support this feature. There are other systems which do + not support the feature, and a few (such as Solaris) + which provide incomplete support.

    + +

    The version-naming convention used allows these sample files + to build distinct libraries for ABI 5 and 6. Version names + consist of

    -

    Terminal Database

    +

    For example, running nm -D on the libraries in + the ncurses6 test package shows these symbol-versions:

    + +
    +
    +0000000000000000 A NCURSES6_TIC_5.0.19991023
    +0000000000000000 A NCURSES6_TIC_5.1.20000708
    +0000000000000000 A NCURSES6_TIC_5.5.20051010
    +0000000000000000 A NCURSES6_TIC_5.7.20081102
    +0000000000000000 A NCURSES6_TIC_5.9.20150530
    +0000000000000000 A NCURSES6_TINFO_5.0.19991023
    +0000000000000000 A NCURSES6_TINFO_5.1.20000708
    +0000000000000000 A NCURSES6_TINFO_5.2.20001021
    +0000000000000000 A NCURSES6_TINFO_5.3.20021019
    +0000000000000000 A NCURSES6_TINFO_5.4.20040208
    +0000000000000000 A NCURSES6_TINFO_5.5.20051010
    +0000000000000000 A NCURSES6_TINFO_5.6.20061217
    +0000000000000000 A NCURSES6_TINFO_5.7.20081102
    +0000000000000000 A NCURSES6_TINFO_5.8.20110226
    +0000000000000000 A NCURSES6_TINFO_5.9.20150530
    +0000000000000000 A NCURSESW6_5.1.20000708
    +0000000000000000 A NCURSESW6_5.3.20021019
    +0000000000000000 A NCURSESW6_5.4.20040208
    +0000000000000000 A NCURSESW6_5.5.20051010
    +0000000000000000 A NCURSESW6_5.6.20061217
    +0000000000000000 A NCURSESW6_5.7.20081102
    +0000000000000000 A NCURSESW6_5.8.20110226
    +0000000000000000 A NCURSESW6_5.9.20150530
    +
    +
    + +

    As a special case, this release (which makes the final change + for ABI 5) is marked with release version 5.9 and patch date + 20150530.

    + +

    Miscellaneous

    + +

    The new release has several improvements for performance and + building. For instance: