Compatibility with older versions

There are some differences between ncurses and the behavior of older curses implementations that are undocumented. These arise from ambiguities or omissions in the application programming interface (API) documentation. This topic discusses some of these differences.

Mouse support

Note that the mouse interfacing features found in the ncurses source are not enabled for Interix.

Refresh of overlapping windows

If you define two overlapping windows, A and B, and then alternately scribble on and refresh them, you might find that changes made to the overlapping region under historic curses versions are not precisely documented. This is a problem because screen updates are calculated between two representations of the entire display. The documentation says that when you refresh a window, it is first copied to the virtual screen, and changes are then calculated to update the physical screen (and are applied to the terminal). But "copied to" is not very specific. As a result, subtle differences in how copying works can produce different behaviors if two overlapping windows are each being refreshed at unpredictable intervals.

What happens to the overlapping region depends on what wnoutrefresh() does with its argument; that is, which portions of the argument window it copies to the virtual screen. Some implementations perform a "change copy," copying down only locations in the window that have changed (or have been marked changed with wtouchln() or related functions). Some implementations perform an "entire copy," copying all window locations to the virtual screen, whether or not they have changed.

The ncurses library has not always been consistent in this regard. Due to a bug, versions 1.8.7 to 1.9.8a perform an "entire copy." Versions 1.8.6 and older, and versions 1.9.9 and newer, perform a "change copy."

For most commercial curses implementations, it is not documented and not certain (at least not to the those who maintain ncurses) whether they do a "change copy" or an "entire copy." System V release 3 curses contains logic that appears to be an attempt to do "change copy," but the surrounding logic and data representations are sufficiently complex that it is hard to determine whether this is reliable.

It is not clear what the System V release 4 documentation and the XSI standard intend. The XSI curses standard mentions wnoutrefresh() only briefly; the System V release 4 documents seem to be describing "entire copy," but it is possible to read them differently.

It can be unwise, therefore, to rely on either behavior in programs that might have to be linked with other curses implementations. Instead, you can do an explicit touchwin() before the wnoutrefresh() call to guarantee an entire-contents copy anywhere.

The best way to handle this is to use the panels library. If, when you want a screen update, you do update_panels(), it will do all the necessary wnoutrfresh() calls for the panel-stacking order you have defined. You can then preform one doupdate(), and a single burst of physical input/output (I/O) will then do all your updates.

XSI curses conformance

The ncurses library is intended to be base-level conformant with the XSI curses standard from X/Open. Many extended-level features (almost all features not directly concerned with wide characters and internationalization) are also supported.

Erased areas of a window are filled with a blank with the normal attribute, unless and until they are modified by the functions bkgdset() or wbkgdset().

In addition, ncurses meets the XSI requirement that every macro entry point have a corresponding function that can be linked (and will be prototype-checked) if the macro definition is disabled with #undef.

500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at webmaster@systemmanager.forsenergy.ru to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.