X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=announce.html.in;h=caaa2899b0e3f527478d3dd22ca072aa6c8c39d6;hp=89fb3ebeb4622d3121cdf68190348d4c95538c1a;hb=63d26709472433a4660c88461162252bf0e5fde8;hpb=02f02dcd4464143580e783ae32c822d8eb8cdcbf diff --git a/announce.html.in b/announce.html.in index 89fb3ebe..caaa2899 100644 --- a/announce.html.in +++ b/announce.html.in @@ -1,7 +1,7 @@ - - + - + "HTML Tidy for HTML5 for Linux version 5.6.0"> Announcing ncurses @VERSION@ - + -

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 +

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 SVr4-curses - enhancements over BSD curses. SVr4 curses is better known today - as X/Open Curses.

+ enhancements over BSD curses. SVr4 curses became the basis of + 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 +

Since 1995, ncurses has been ported to many systems:

The distribution includes the library and support utilities, including

Full manual pages are provided for the library and tools.

-

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

+

The ncurses distribution is + available at ncurses' homepage:

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

-
It is also available at + "ftp://ftp.invisible-island.net/ncurses/">ftp://ftp.invisible-island.net/ncurses/ + or
+ https://invisible-mirror.net/archives/ncurses/ .

+ + +

It is also available via anonymous FTP at the GNU distribution + site

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

+ "ftp://ftp.gnu.org/gnu/ncurses/">ftp://ftp.gnu.org/gnu/ncurses/ .

Release Notes

-

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

+

These notes are for ncurses + @VERSION@, released October 21, 2021.

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:

+ ncurses 5.0 through 6.2; providing + extensions to the application binary interface (ABI). Although + the source can still be configured to support the ncurses 5 ABI, the reason for the release is + to reflect improvements to the ncurses 6 ABI and the supporting utility + programs.

- +

The most important + bug-fixes/improvements dealt with portability issues. The + release notes also mention some other bug-fixes, but are focused + on new features and improvements to existing features since + ncurses 6.2 release.

-

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

+

Library improvements

+ +

New features

+ +

There are a few new features:

-

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

- -

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

+

Additionally, to improve performance other changes (and + extensions) are provided in this release:

-

Library - improvements

+

Other + improvements

-

Output - buffering

- -

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

+

These are revised features:

-

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:

+

These were done to limit or ultimately deprecate features:

-

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

+

These are improvements to existing features:

- -

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:

- -

There are also new features in the libraries:

+

These are corrections to existing features:

-
  • -

    added form library extension - O_DYNAMIC_JUSTIFY option which can be used to override - the different treatment of justification for static versus - dynamic fields .

    -
  • +

    Program + improvements

    -
  • -

    rewrote - putwin and - getwin, making an extended version which is capable of - reading screen-dumps between the wide/normal ncurses configurations. These are text - files, except for a magic code at the beginning:

    +

    Several improvements were made to the + utility programs:

    -
    -
    -0       string          \210\210        Screen-dump (ncurses)
    -
    -
    -
  • +
    +
    tabs +
    -
  • -

    several changes to mouse support include:

    +
    +
      +
    • +

      implement “+m” option

      +
    • +
    +
    + +
    tic +
    +
      -
    • added decoder for xterm SGR 1006 mouse mode.
    • +
    • +

      add check for duplicate “use=” + clauses.

      +
    • -
    • added experimental support for - “%u” format to terminfo.
    • +
    • +

      add check to report instances where tparm + would detect an error in an expression.

      +
    • -
    • improved behavior of wheel-mice for xterm protocol: - noting that there are only button-presses for buttons - “4” and “5”, so there is no need to - wait to combine events into double-clicks .
    • -
    -
  • - +
  • +

    add user-defined capabilities from mintty to + Caps-ncurses, for checking consistency.

    +
  • -

    There are a few new configure options dealing with library - customization:

    +
  • +

    improve warning when oc/op do not mention SGR 39/49 + for xterm compatible XT flag.

    +
  • - +
  • +

    improve check for errors detected in + tparm.

    +
  • -

    Program - improvements

    +
  • +

    improve format of output, to ensure that the messages + contain only printable text.

    +
  • -

    Utilities

    - -

    Most of the termcap-related changes based on development of - tctest - (termcap library checker) are implemented in the tic and - infocmp programs rather than affecting the library. As noted in - the - discussion of tctest, ncurses's ability to translate between terminfo - and termcap formats has been improved at different times, but - subject to feedback from "real" termcap users. There are very few - of those. Nowadays, virtually all termcap users are - using ncurses (or NetBSD, with its - own terminfo library) and their programs are actually using - terminfo rather than termcap data.

    - -

    Still, there are a few. A comment about the translation of the - ASCII NUL character prompted a review:

    +
  • +

    modify to eliminate unnecessary + “\” to escape + “:” in terminfo format.

    +
  • - + -
  • -

    In terminfo, a \0 in a terminal description - is stored as \200.

    -
  • +
    toe +
    -
  • -

    There are no (known) terminals which would behave - differently when sent \0 or - \200.

    -
  • +
    + +
    -
  • -

    It has done this since 1998 (quoting from the NEWS - file):

    +
    tput +
    -
    -
    -980103
    -...
    -        + modify _nc_tic_expand() to generate \0 rather than \200.
    -...
    -        + correct translation of terminfo "^@", to \200, like \0.
    -
    -
    -
  • +
    + +
  • +

    improve parameter-checking by analyzing all extended + string capabilities, e.g., as used in the Cs + and Ms capabilities of the tmux + description.

    +
  • -

    As a result of the review, several improvements were made to - ncurses translation to/from termcap - format — and improving the checks made in tic for - consistency of entries. Most of these are not of general - interest, except for two new command-line options for tic and - infocmp:

    +
  • +

    make warning messages consistently using alias names + when those are used, rather than the underlying program's + name.

    +
  • - +
  • +

    modify initialization to avoid opening + /dev/tty for cases other than + reset/init, e.g., for clear.

    +
  • + +
    +
    -

    Other user-visible improvements and new features include:

    +

    Examples

    + +

    Along with the library and utilities, improvements were made + to the ncurses-examples. Most of + this activity aimed at improving the test-packages. A few changes + are more generally useful, e.g., for the main ncurses + test-program, and for analyzing traces using the + tracemunch script:

    -

    Examples

    +

    There are other new demo/test programs and reusable + examples:

    -

    Along with the library and utilities, many improvements were - made to the ncurses-examples. - Some were made to allow building (and comparison-testing) against - NetBSD curses and PDCurses. Both lack some of the X/Open Curses - features, necessitating customization. But this activity was - useful because it showed some remaining performance issues (which - have been resolved in this release).

    +
    +
    back_ground +
    -

    These changes were made to verify compatibility or compare - performance of ncurses:

    +
    to exercise the wide-character background functions.
    -
    -
  • -

    added “-d”, - “-e” and - “-q” options to the demo_terminfo - and demo_termcap test-programs.

    -
  • +

    Terminal database

    -
  • -

    added “-y” option to demo_termcap - and test/demo_terminfo test-programs to demonstrate behavior - with/without extended capabilities.

    -
  • +

    There are several new terminal descriptions:

    -
  • -

    modified demo_termcap and demo_terminfo test-programs to - make their options more directly comparable, and add - “-i” option to specify a terminal - description filename to parse for names to lookup.

    -
  • +
    +

    absolute, + att610+cvis, + foot, + foot-direct, + hp98550-color, + hpterm-color2, + hterm, + hterm-256color, + linux-s, + putty+keypad, + putty+screen, + putty-screen, + screen.linux-s, + scrt/securecrt, + tmux-direct, + vt220+cvis, + vt220+cvis8, + vt220+pcedit, + vt220+vtedit, + vt220-base, + vt52+keypad, + xterm+256color2, + xterm+88color2, + xterm-direct16, + xterm-direct256, + xterm+nofkeys, + and xterm+nopcfkeys.

    +
    -
  • -

    rewrote the tests for - mvderwin and test for recursive - mvwin in the movewindow test-program.

    -
  • +

    There are many changes to existing terminal descriptions. Some + were updates to several descriptions:

    + + -

    These changes were made to help with the MinGW port:

    +

    while others affected specific descriptions. These were + retested, to take into account changes by their developers:

    - +
    +
    aaa+dec, + aaa+rv
    -

    These changes were made to verify new extensions in ncurses:

    +
    correct rmacs/smacs
    - +
    kitty +
    -

    These changes were made to make the examples more useful:

    +
    use att610+cvis, xterm+tmux and ansi+enq
    - +
    linux2.6 +
    -

    Terminal - database

    +
    fix pound-sign mapping in acsc
    -

    This release provides improvements to tic's - “-c” checking option, which was used for - example to

    +
    linux3.0 +
    - +
    pccons +
    -

    There are several new terminal descriptions:

    +
    fill in some missing pieces, to make it comparable to the + vt220 entry
    - +
    vt220 +
    -

    A few entries use extensions (user-defined terminal - capabilities):

    +
    use vt220+cvis
    - +
    use vt420+lrmm
    -

    A few terminals support italics and/or dim capabilities. In - particular, screen does not. Documented that, and accommodated - the terminals where this feature works with the - A_ITALIC extension.

    +
    xterm-new +
    -
    -
  • vte (dim, italics)
  • +

    A few entries use extensions (user-defined terminal + capabilities):

    -
  • xterm (dim, italics)
  • +

    fills in overlooked descriptions of features which were - described in the NEWS file - but treated sketchily in manual pages.

    - - - -

    In addition, the mechanism for producing HTML versions of the - documentation has been improved:

    - - -

    Interesting - bug-fixes

    +

    In addition to providing background information to explain + these features and show how they evolved, there are corrections, + clarifications, etc.:

    -

    Configuration changes

    - -

    Major - changes

    - -

    The ncurses 6.0 configure script - makes changes to the default value of several configure - options, depending on the --with-abi-version option - (i.e., whether its value is “5” or - “6”):

    - -
    -
    --enable-const
    - -
    -

    Feature introduced in 970405 - supports the use of const where X/Open Curses - should have, but did not. NetBSD curses does something - similar with const.

    -
    - -
    --enable-ext-colors
    - -
    -

    Extends the cchar_t structure to allow more - than 16 colors to be encoded. This applies only to the - wide-character (--enable-widec) - configuration.

    -
    - -
    --enable-ext-mouse
    - -
    -

    Modifies the encoding of mouse state to make room for a - 5th mouse button. That allows one to use ncurses with a wheel - mouse with xterm or similar X terminal emulators.

    -
    - -
    --enable-ext-putwin
    - -
    -

    Modifies the file-format written by putwin to - use printable text rather than binary files, allowing - getwin to read screen dumps written by - differently-configured ncurses libraries. The extended - getwin can still read binary screen dumps from - the same configuration of ncurses. This does not - change the ABI (the binary interface seen by calling - applications).

    -
    - -
    --enable-interop
    - -
    -

    Modifies the FIELDTYPE structure used for the - form library to make it more generic.

    -
    - -
    --enable-lp64
    - -
    -

    Allows an application to define _LP64 to - declare chtype and mmask_t as - simply “unsigned” rather than the - configured types using the --with-chtype and - --with-mmask_t options.

    -
    - -
    --enable-sp-funcs
    - -
    -

    Compile-in support for extended functions which accept a - SCREEN pointer, reducing the need for juggling the global SP - value with - set_term and - delscreen.

    -
    - -
    --with-chtype=uint32_t
    - -
    -

    Makes chtype explicitly a 32-bit unsigned - value.

    -
    - -
    --with-mmask_t=uint32_t
    - -
    -

    Makes mmask_t explicitly a 32-bit unsigned - value.

    -
    +

    There are no new manual pages (all of the manual page updates + are to existing pages).

    -
    --with-tparm-arg=intptr_t
    +

    Some of the improvements are more subtle, relating to the way + the information is presented. For instance, hyphenation is + suppressed in the HTML files generated from manual pages because + an upgrade to groff gave noticeably poorer results, + interfering with the process of creating links between the + resulting webpages.

    -
    -

    X/Open Curses declares - tparm using long for each of the parameters - aside from the formatting string, presuming that - long and char* are the same size. - This configure option uses intptr_t which - provides a better guarantee of the sizes.

    -
    -
    +

    Interesting + bug-fixes

    -

    The configure script no longer checks for antique compilers; - c89 is assumed as a minimum. There are a few - features from later revisions which are used when available. The - configure script makes checks to turn on useful warnings from - clang, gcc and icc. You should be able to build ncurses 6.0 with any of the current (or not so - current) C compilers available in 2015.

    - -

    The configure script, by the way, makes changes which do not - work with systems whose /bin/sh is non-POSIX. This - mainly affects Solaris (the other vendor unix systems have followed the POSIX guidelines - for the past twenty years). If you must build on Solaris, its - xpg4 - binaries suffice, e.g.,

    - -
    - - -

    - #!/bin/sh
    - WHAT=`hostname|sed -e 's/\..*//'`
    - - OUT=configure.out
    - cat >>$OUT <<EOF/
    - ** 
    `date`
    - ** node: 
    $WHAT
    - ** user: 
    `id`
    - ** conf: $*
    - EOF/

    -  
    - SHELL=/bin/sh
    - if test -f /usr/xpg4/bin/sh
    - - then
    -         CONFIG_SHELL=/usr/xpg4/bin/sh
    -         export CONFIG_SHELL
    - -         SHELL=$CONFIG_SHELL
    - fi
    -  
    - rm -f config.status config.cache
    - TOP=$HOME/$WHAT
    - $SHELL ./configure --verbose \
    - -         --disable-echo \
    - -         --disable-overwrite \
    - -         --enable-warnings \
    - -         --with-warnings \
    - -         --prefix=$TOP $* 2>&1 | tee -a $OUT
    - -

    -
    +

    While there were many bugs fixed during development of ncurses + 6.3, only a few (the reason for this release) were both important + and interesting. Most of the bug-fixes were for local issues + which did not affect compatibility across releases. Since those + are detailed in the NEWS file no elaboration is + needed here.

    -

    Other major changes to the configure script include:

    +

    The interesting bugs were:

    +

    Configuration changes

    + +

    Major + changes

    + +

    There are no major changes. Several new options were added to + ease integration of packages with systems using different + versions of GNAT and ncurses. Also, + improvements were made to configure checks.

    +

    Configuration options

    -

    There are several new (or extended) configure options:

    +

    There are a few new/modified configure options:

    -
    --disable-db-install
    +
    --enable-fvisibility +
    -

    Do not install the terminal database. This is used to omit - features for packages, as done with - --without-progs. The option simplifies building - cross-compile support packages.

    +

    new configure option and check for gcc + -fvisibility=hidden feature

    -
    --disable-gnat-projects
    +
    --enable-leaks +
    -

    This option is used for regression testing

    +

    corrected to allow turning leak-checking off later in a + set of options.

    -
    --disable-lib-suffixes
    +
    --enable-stdnoreturn +
    -

    Suppress the “w”, “t” or - “tw” suffixes which normally would be added to - the library names for the --enable-widec and - --with-pthread options.

    +

    new configure option makes the _Noreturn + keyword optional to ease transition.

    -
    --with-cxx-shared
    +
    --disable-pkg-ldflags +
    -

    When --with-shared is set, build libncurses++ - as a shared library. This implicitly relies upon building - with gcc/g++, since other compiler suites may have - differences in the way shared libraries are built. libtool by - the way has similar limitations.

    +

    revised option also controls whether $LDFLAGS + from the build is provided in “-config” + and “.pc” files.

    -
    --with-hashed-db
    +
    --disable-root-access +
    -

    Extended this configure option to simplify building with - different versions of Berkeley database using FreeBSD - ports.

    +

    add configure option which tells ncurses to disallow most + file-opens by setuid processes.

    -
    --with-pc-suffix
    +
    --disable-wattr-macros +
    -

    If ".pc" files are installed, optionally add a suffix to - the files and corresponding package names to separate unusual - configurations. If no option value is given (or if it is - "none"), no suffix is added. This option is used in the test - package for ncurses6.

    +

    changed default to help packagers who reuse wide ncursesw + header file with non-wide ncurses library.

    -
    --with-xterm-kbs
    +
    --with-pkg-config-libdir +
    -

    Configure xterm's terminfo entries to use either BS - (^H, i.e., ASCII backspace) or DEL - (^?, or 127).

    +

    revised option uses the actual search path from + pkg-config or pkgconf using the output from + --debug.

    -
    - -

    Portability

    - -

    MinGW

    - -

    Most of the portability-related work since - ncurses 5.9 extended and improved the MinGW port - introduced in - ncurses 5.8.

    - -

    The MinGW port can be readily cross-compiled:

    - - +

    Portability

    -

    The MinGW-specific Windows driver accounts for several - changes:

    +

    Many of the portability changes are implemented via the + configure script:

    - -

    Finally, there are other improvements:

    - -

    Other - ports

    - -

    These changes affect certain platforms (ports):

    +

    Here are some of the other portability fixes:

    +
    -

    Features of ncurses

    +

    Features of + ncurses

    -

    The ncurses package is fully +

    The ncurses package is fully upward-compatible with SVr4 (System V Release 4) curses: