X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=announce.html.in;h=24da9f52356f09497ee9f3d74c1e2303ce181436;hp=89fb3ebeb4622d3121cdf68190348d4c95538c1a;hb=643ec2bf782cd02efafe3ccdeaea8920a404645e;hpb=02f02dcd4464143580e783ae32c822d8eb8cdcbf;ds=sidebyside diff --git a/announce.html.in b/announce.html.in index 89fb3ebe..24da9f52 100644 --- a/announce.html.in +++ b/announce.html.in @@ -1,7 +1,7 @@ - + + "HTML Tidy for HTML5 for Linux version 5.2.0"> Announcing ncurses @VERSION@ - + @@ -50,21 +63,21 @@ p,li { max-width:700px; }

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 February 12, 2020.

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:

- - - -

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

+

There are, of course, numerous other improvements, listed in + this announcement.

- +

Library 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.

+

New features

-

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

+

There are several new features:

- -

Library - improvements

- -

Output - buffering

- -

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

- - -

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:

+

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

- -

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
-
+
  • reordered loop-limit checks in winsnstr in case the + string has no terminating null and only the number of + characters is used.
  • -

    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

    - - -

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

    +
  • +

    scrolling is improved:

    -
    -
    -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
    -
    -
    + +
  • + -

    Miscellaneous

    +

    Other + improvements

    -

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

    +

    These are revised features:

    - -

    There are also new features in the libraries:

    - - +

    These were done to limit or ultimately deprecate features:

    + + -

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

    +

    These are improvements to existing features:

    -

    Program - improvements

    +
  • +

    amend check for + repeat_char to handle a case where setlocale() was + called after initscr

    +
  • -

    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:

    +
  • +

    move macro for is_linetouched + inside NCURSES_NOMACROS + ifndef.

    +
  • - - -

    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:

    - -

    Other user-visible improvements and new features include:

    +

    These are corrections to existing features:

    -

    Examples

    +

    Program + improvements

    -

    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).

    +

    Several improvements were made to the utility programs:

    -

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

    +
    +
    clear +
    - +
    + +
    -

    These changes were made to verify new extensions in ncurses:

    +
    tset +
    -
    +

    Several changes were made to the generated ncurses*config + scripts and the analogous “.pc” files to + reduce differences between the configurations they report:

    + + -

    These changes were made to make the examples more useful:

    +

    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:

    - -

    Terminal - database

    -

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

    +
  • +

    update tracemunch to work with perl + 5.26.2, which changed the rules for escaping regular + expressions.

    +
  • - -

    There are several new terminal descriptions:

    +

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

    - +
    parse_rgb +
    -

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

    +
    Sample implementation of the ncurses RGB extension from + user_caps.5, used + in picsmap and savescreen programs.
    + + +

    A variety of improvements were made to existing programs, both + new features as well as options added to make the set of programs + more consistent.

    - -

    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.

    - - - -

    Documentation

    - -

    As usual, this release

    - - -

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

    +

    Terminal database

    - +
    +

    alacritty, domterm, kitty, + mintty, mintty-direct, ms-terminal, + n7900, nsterm-build309, + nsterm-direct, screen5, ti703, + ti707, ti703-w, ti707-w + vscode, vscode-direct, xterm-mono, + xterm.js

    +
    -

    Interesting - bug-fixes

    +

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

    - +

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

    -
  • -

    Resizing the screen:

    +
    +

    terminator, st

    +
    - - -

    Configuration changes

    + -

    Major - changes

    +
    linux-16color +
    -

    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
    +
    nsterm-256color:
    -

    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.

    +
      +
    • add nsterm-build309 to replace nsterm-256color, + assigning the latter as an alias of nsterm, to make mouse + work with nsterm-256color
    • +
    -
    --enable-ext-colors
    +
    regent40:
    -

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

    +
      +
    • renumber function-keys to match manual
    • +
    -
    --enable-ext-mouse
    +
    regent60:
    -

    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.

    +
      +
    • add cd (clr_eos)
    • + +
    • corrected acsc
    • + +
    • add shifted function-keys
    • +
    -
    --enable-ext-putwin
    +
    tvi950:
    -

    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-lp64
    +
    tvi955:
    -

    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.

    +
      +
    • fix typo
    • +
    -
    --enable-sp-funcs
    +
    vi200:
    -

    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.

    +
      +
    • add acsc string, including right/down-arrow
    • +
    -
    --with-chtype=uint32_t
    +
    wy50:
    -

    Makes chtype explicitly a 32-bit unsigned - value.

    +
      +
    • corrected acsc
    • +
    -
    --with-mmask_t=uint32_t
    +
    wy50 and + wy60:
    -

    Makes mmask_t explicitly a 32-bit unsigned - value.

    +
      +
    • add shifted function-keys as kF1 to kF16
    • +
    -
    --with-tparm-arg=intptr_t
    +
    xterm+x11hilite:
    -

    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.

    +
      +
    • eliminate unused p5 parameter.
    • +
    -

    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
    - -

    -
    - -

    Other major changes to the configure script include:

    +

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

    -
    -

    adacurses-config to - adacurses5-config and
    - adacursesw-config to - adacursesw5-config

    -
    +

    Documentation

    + +

    As usual, this release

    + + -

    Configuration options

    +

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

    -

    There are several new (or extended) configure options:

    + -
    -

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

    -
    - +

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

    -

    Portability

    +

    Some of the improvements are more subtle, relating to the way + the information is presented. For instance, the generated + terminfo.5 file uses a different table layout, allowing it to use + space on wide terminals more effectively.

    -

    MinGW

    +

    Interesting + bug-fixes

    -

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

    +

    While there were many bugs fixed during development of ncurses + 6.2, 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.

    -

    The MinGW port can be readily cross-compiled:

    +

    The interesting bugs were in tic/infocmp's handling of + user-defined capabilities. These were not recent bugs. Initially + it was a simple problem:

    -

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

    +

    For ncurses, the elapsed time to fix this bug was less than + three years. Someone reported a problem with the terminal + description a few weeks after releasing ncurses 6.1 (in tmux #1264), and + the terminal description was updated that week (ncurses patch + 20180224):

    + +
    +
    +20180224
    +        + modify _nc_resolve_uses2() to detect incompatible types when merging
    +          a "use=" clause of extended capabilities.  The problem was seen in a
    +          defective terminfo integrated from simpleterm sources in 20171111,
    +          compounded by repair in 20180121.
    +        + correct Ss/Ms interchange in st-0.7 entry (tmux #1264) -TD
    +
    +
    + +

    The larger part of that change added a check to prevent a + simple merge of terminal descriptions where the same user-defined + name was used with different types. But it raised some + questions:

    -
  • -

    the driver handles repainting on endwin/refresh - combination.

    -
  • +

    Since the correction to terminfo.src + could have been readily adopted by packagers, there was nothing + more to be done from ncurses' standpoint on that part. But + improving ncurses to prevent issues like that is the reason for + making a release.

    -
  • -

    modified treatment of TERM variable for MinGW - port to allow explicit use of the Windows console driver by - checking if $TERM is set to - “#win32console” or an abbreviation - of that.

    -
  • +

    Nothing more (constructive) was mentioned with regard to + simpleterm. But a few problems were found in the handling of + user-defined capabilities:

    + -

    Finally, there are other improvements:

    +

    Both of these issues dated from the original implementation of + user-defined capabilities. Fixing them does not change the + terminal database, but a older tic without the fixes + will not be able to handle terminfo sources which rely upon those + fixes. Starting in June 2019, the download link for the terminfo + source file was capped at that date. The development sources have + an up-to-date copy of the file, for people with a legitimate need + for it.

    + +

    The “-c” (check) option of tic + is not very useful if it cannot offer advice on parameters needed + for user-defined capabilities. The various Caps files + were reorganized to reduce redundancy, and in the common portion + (Caps-ncurses), + a registry of user-defined capabilities is provided for use by + tic. While users can still define their own custom + capabilities, tic will not offer any advice when their + parameters do not match.

    + +

    In ncurses 6.2, tic makes a special check to allow + any type for RGB, but its being able to do this relies + upon fixes made in the ncurses library in mid-2019.

    -