@Bill-Gray Bill-Gray released this Sep 9, 2017 · 171 commits to master since this release

Assets 4

Note - new maintainer: Bill Gray (based on PDCurses 3.4 from William McBrine)
This is only a brief summary of the changes. For more details, consult the VCS log.

Major new features:

  • New Win32a(Windows GUI) and SDL2 backends.
    SDL1 is still supported, but may eventually go away.

  • Bold, italic, underlined, overlined, dimmed, 'strikeout', blinking text, 256 colors and color pairs, and full RGB colors.
    These are all supported in Win32a and mostly supported in X11, SDL1 and SDL2.

  • In Win32a, one can choose a font, and both programmatic and user resizing are supported.
    (Recompiling is necessary to change the font in X11.)

  • (Win32a only) Support of SMP Unicode (points beyond 64K) and combining characters.
    This may be extended to X11 and SDL2 eventually.

  • Demos corrected to be buildable and testable with ncurses.

Minor new features:

(note that not all of these are available on all backends)

  • Support for up to nine mouse buttons and wheel and tilt-wheel mice, and double and triple mouse clicks.

  • (X11, Win32a, Win32) Extended range of keys that are recognized.
    This now includes most of the "oddball" keys such as 'browser back' and 'favorites' found on some keyboards.

  • Blinking cursors in Win32a and X11 of various shapes (this could be extended to SDLx eventually).

  • In X11 and Win32a, one can call resize_term( ) before initscr( ) to set the initial window size.

  • Soft Label Keys (SLKs) are considerably more flexible, with the ability to set arbitrary numbers of keys and groupings.
    See slk.c for details. This applies to all backends.

  • Many changes to testcurs to test all these new features, and newtest added to test still more features.

  • Option to get detailed version information of the used PDCurses library at run time with new exported PDC_version as PDC_version_info structure.

  • ACS_x and WACS_x #defines extended to include a lot of "alternative characters" that overlap in Unicode and CP-437: double-line box chars, card suits, vulgar fractions, etc.
    This applies to all backends. See acs_defs.h for the full list.

  • Cleaned up some makefiles for Win32 and Win32a.
    On both platforms, vcwin32.mak can now be used with the Intel(R) compiler, and mingwin32.mak can be used to cross-compile from Linux, or in command.com under Windows, or with Cygwin/MSYS.
    Also added a makefile for Digital Mars for the DOS version.

  • The "def" files that were needed before to create PDCurses on Windows are removed as they are no longer necessary.

@GitMensch GitMensch released this Sep 11, 2017 · 418 commits to master since this release

Assets 2

Nothing much new this time, but I've been sitting on some bug fixes for almost a year, so it's overdue. Apart from bugs, the main changes are in the documentation.

New features:

  • setsyx() is now a function rather than a macro.

Bug fixes and such:

  • In x11, the xc_atrtab table size was under-calculated by half, resulting in crashes at (oddly) certain line counts. (It should've crashed a lot more.) Reported by Mark Hessling.

  • Test for moved cursor was omitting the window origin offset. Reported by Carey Evans.

  • Is DOS and OS/2, the value for max items in key_table was still wrong. Reported by C.E.

  • Changed isendwin() so it won't crash after delscreen().

  • Ensure zero-termination in PDC_mbstowcs() and PDC_wcstombs().

  • Disable QuickEdit Mode when enabling mouse input for the Win32
    console; reported by "Zalapkrakna".

  • Fix for building under Innotek C (I hope). Report by Elbert Pol, fix
    courtesy of Paul Smedley.

  • Unified exports list with no duplicates -- pdcurses.def is now built from components at compile time.

  • Don't install curspriv.h, and don't include it with binary distributions.

  • Building DLLs with LCC is no longer supported, due to the primitive nature of its make.exe.

  • Export the terminfo stub functions from the DLLs, too.

  • Added support for Apple's ".dylib" in configure. Suggested by Marc Vaillant (who says it's needed with OS 10.5.)

  • In sdl1/Makefile.mng, ensure that CC is set.

  • In the gcc makefiles, "$?" didn't really have the desired effect -- all the dependencies showed up on the command line, including curses.h, and pdcurses.a twice. And apparently, this can mess up some old version (?) of MinGW. So, revert to spelling out "tuidemo.o tui.o". Reported by "Howard L."

  • Extensive documentation revision and reorganizing. More to do here. For example, I moved the build instructions from INSTALL (which never really described installation) to the platform-specific READMEs.

  • New indentation standard: four spaces, no tabs.

@GitMensch GitMensch released this Sep 11, 2017 · 468 commits to master since this release

Assets 2

This release adds an SDL backend, refines the demos, and is faster in some cases.

New features:

  • SDL port. See INSTALL, doc/sdl.txt and sdl1/* for details.

  • Double-buffering -- minimize screen writes by checking, in doupdate() and wnoutrefresh(), whether the changes to curscr are really changes. In most cases, this makes no difference (writes were already limited to areas marked as changed), but it can greatly reduce the overhead from touchwin(). It also helps if you have small, separated updates on the same line.

  • The PDC_RGB colors can now be used, or not, with any platform (as long as the same options are used when compiling both the library and apps). This may help if you have apps that are hardwired to assume certain definitions.

  • Restored the use_default_colors() stuff from the ncurses versions of the rain and worm demos, to make them "transparent" (this is useful now, with the SDL port); added transparency to newdemo.

  • Added setlocale() to tuidemo, to make it easier to browse files with non-ASCII characters.

  • Speed up firework demo by replacing unneeded clear() and init_pair() calls.

  • Allow exit from ptest demo by typing 'q'.

  • New functions for implementors: PDC_pair_content() and PDC_init_pair() (the old pdc_atrtab stuff was arguably the last remnant of code in the pdcurses directory that was based on platform details).

Bug fixes and such:

  • Implicit wrefresh() needs to be called from wgetch() when the window's cursor position is changed, even if there are no other changes.

  • Set SP->audible on a per-platform basis, as was documented in IMPLEMNT, but not actually being done.

  • Minor tweaks for efficiency and readability, notably with wscrl().

  • tuidemo didn't work correctly on monochrome screens when A_COLOR was defined -- the color pair numbers appeared as the corresponding character; also, the input box was (I now realize) broken with ncurses since our 2.7, and broke more subtly with PDCurses' new implicit refresh handling; also, the path to the default file for the Browse function was a bit off.

  • Assume in the demos that curs_set() is always available -- there's no good test for this, and the existing tests were bogus.

  • Made the command-line parameter for ptest work. (If given an argument, it delays that number of milliseconds between changes, instead of waiting for a key, and automatically loops five times.)

  • Building the Win32 DLL with MinGW or Cygwin wouldn't work from outside the platform directory.

  • Building the X11 port with Cygwin required manually editing the Makefile after configuring; no longer. Reported by Warren W. Gay.

  • Minor tightening of configure and makefiles.

  • Bogus references to "ACS_BLCORNER" in the border man page. Reported by "Walrii".

  • slk_wlabel() was not documented.

  • Spelling cleanup.

  • Changed RCSIDs to not end with a semicolon -- avoids warnings when compiling with the -pedantic option.

  • Merged latin-1.txt into x11.txt.

  • Updated config.guess and config.sub to more recent versions.

@GitMensch GitMensch released this Sep 12, 2017 · 609 commits to master since this release

Assets 2

This release mainly covers changes to the build process, along with a
few structural changes.

New features:

  • The panel library has been folded into the main library. What this means is that you no longer need to specify -lpanel or equivalent when linking programs that use panel functionality with PDCurses; however, panel.lib/.a is still provided (as a copy of pdcurses.lib/.a) so that you can, optionally, build your projects with no changes. It also means that panel functionality is available with the DLL or shared library. Note that panel.h remains separate from curses.h.

  • Setting the PDCURSES_SRCDIR environment variable is no longer required before building, unless you want to build in a location other than the platform directory. (See INSTALL.)

  • MinGW and Cygwin makefiles support building DLLs, via the "DLL=Y" option. Partly due to Timofei Shatrov.

  • Support for the Digital Mars compiler.

  • Watcom makefiles now use the "loaddll" feature.

Bug fixes and such:

  • Eliminated the platform defines (DOS, WIN32, OS2, XCURSES) from curses.h, except for X11-specific SCREEN elements and functions. Dynamically-linked X11 apps built against an old version will have their red and blue swapped until rebuilt. (You can define PDC_RGB to build the library with the old color scheme, but it would also have to be defined when building any new app.) Any app that depends on PDCurses to determine the platform it's building on will have to make other arrangements.

  • Documentation cleanup -- added more details; removed some content that didn't apply to PDCurses; moved the doc-building tool to the doc directory; changed *.man to *.txt.

  • The EMX makefile now accepts "DLL=Y", builds pdcurses.dll instead of curses.dll, builds either the static library or the DLL (not both at once), and links all the demos with the DLL when building it.

  • In Win32, read the registry only when needed: when init_color() or color_content() is called, instead of at startup.

  • A few additional consts in declarations.

  • The Win32 compilers that build DLLs now use common .def files.

  • panel.h functions sorted by name, as with other .h files; curses.h is no longer included by repeated inclusions of panel.h or term.h.

  • Simplified Borland makefiles.

  • Makefile.aix.in depended on a file, xcurses.exp, that was never there. This problem was fixed as part of the change to common .def files; however, I still haven't been able to test building on AIX.

@GitMensch GitMensch released this Sep 12, 2017 · 664 commits to master since this release

Assets 2

Primarily clipboard-related fixes, and special UTF-8 support.

New features:

  • "Force UTF-8" mode, a compile-time option to force the use of UTF-8 for multibyte strings, instead of the system locale. (Mainly for Windows, where UTF-8 doesn't work well in the console.) See INSTALL.

  • Multibyte string support in PDC_*clipboard() functions, and in Win32's PDC_set_title().

  • Added the global string "ttytype", per other curses implementations, for compatibility with old BSD curses.

  • Real functions for the "quasi-standard aliases" -- crmode(), nocrmode(), draino(), resetterm(), fixterm() and saveterm(). (Corresponding macros removed.)

Bug fixes and such:

  • In Win32, under NT-family OSes, the scrollback buffer would be restored by endwin(), but would not be turned off again when resuming curses after an endwin(). The result was an odd, partly-scrolled-up display. Now, the buffer is toggled by PDC_reset_prog_mode() and PDC_reset_shell_mode(), so it's properly turned off when returning from an endwin().

  • In 3.0, selection in X11 didn't work. (Well, the selecting worked, but the pasting elsewhere didn't.) This was due to the attempted fix "don't return selection start as a press event," so that's been reverted for now.

  • PDC_setclipboard() was locking up in X11. Reported by Mark Hessling.

  • Missing underscore in the declaration of XC_say() prevented compilation with PDCDEBUG defined. Reported by M.H.

  • Off-by-one error in copywin() -- the maximum coordinates for the destination window should be inclusive. Reported by Tiago Dionizio.

  • Start in echo mode, per X/Open. Reported by T.D.

  • Strip leading and trailing spaces from slk labels, per a literal reading of X/Open. Suggested by Alexey Miheev (about ncurses, but it also applies here).

  • The #endif for PDCURSES needs to come after the closing of the extern "C". This has been broken since June 2005. Fortunately (?), it only shows up if the file is included multiple times, and then only in C++. Reported on the DOSBox forums.

  • Use CF_OEMTEXT instead of CF_TEXT in the narrow versions of the clipboard functions in Win32, to match the console.

  • Changed the format of the string returned from longname().

  • In the clipboard test in the testcurs demo, use a single mvprintw() to display the return from PDC_getclipboard(), instead of a loop of addch(), which was incompatible with multibyte strings.

  • Moved has_key() into the keyname module, and documented it.

  • Moved RIPPEDOFFLINE to curspriv.h.

  • Typos in IMPLEMNT.

@GitMensch GitMensch released this Sep 12, 2017 · 706 commits to master since this release

Assets 2

The focuses for this release are X/Open conformance, i18n, better color support, cleaner code, and more consistency across platforms.

This is only a brief summary of the changes. For more details, consult the VCS log.

New features:

  • An almost complete implementation of X/Open curses, including the wide-character and attr_t functions (but excluding terminfo). The wide-character functions work only in Win32 and X11, for now, and require building the library with the appropriate options (see INSTALL). Note that this is a simplistic implementation, with exactly one wchar_t per cchar_t; the only characters it handles properly are those that are one column wide.

  • Support for X Input Methods in the X11 port (see INSTALL). When built this way, the internal compose key support is disabled in favor of XIM's, which is a lot more complete, although you lose the box cursor.

  • Multibyte character support in the non-wide string handling functions, per X/Open. This only works when the library is built with wide- character support enabled.

  • Mouse support for DOS and OS/2. The DOS version includes untested support for scroll wheels, via the "CuteMouse" driver.

  • An ncurses-compatible mouse interface, which can work in parallel with the traditional PDCurses mouse interface. See the man page (or mouse.c) for details.

  • DOS and OS/2 can now return modifiers as keys, as in Win32 and X11.

  • COLORS, which had been fixed at 8, is now either 8 or 16, depending on the terminal -- usually 16. When it's 8, blinking mode is enabled (controlled as before by the A_BLINK attribute); when it's 16, bright background colors are used instead. On platforms where it can be changed, the mode is toggled by the new function PDC_set_blink(). PDCurses tries to set PDC_set_blink(FALSE) at startup. (In Win32, it's always set to FALSE; in DOS, with other than an EGA or VGA card, it can't be.) Also, COLORS is now set to 0 until start_color() is called.

  • Corresponding to the change in COLORS, COLOR_PAIRS is now 256.

  • Working init_color() and color_content(). The OS/2 version of init_color() works only in a full-screen session; the Win32 version works only in windowed mode, and only in NT-family OSes; the DOS version works only with VGA adapters (real or simulated). The Win32 version is based mostly on James Brown's setconsoleinfo.c (www.catch22.net).

  • use_default_colors(), assume_default_colors(), and curses_version(), after ncurses.

  • Added global int TABSIZE, after ncurses and Solaris curses; removed window-specific _tabsize.

  • Logical extension to the wide-character slk_ funcs: slk_wlabel(), for retrieving the label as a wide-character string.

  • A non-macro implementation of ncurses' wresize().

  • Working putwin(), getwin(), scr_dump() and scr_restore().

  • A working acs_map[]. Characters from the ACS are now stored in window structures as a regular character plus the A_ALTCHARSET attribute, and rendered to the ACS only when displayed. (This allows, for example, the correct display on one platform of windows saved from another.)

  • In X11, allow selection and paste of UTF8_STRING.

  • The testcurs demo now includes a color chart and init_color() test, a wide character input test, a display of wide ACS characters with sample Unicode text, a specific test of flash(), more info in the resize test, and attempts to change the width as well as the height.

  • Command-line option for MSVC to build DLLs (see INSTALL). Also, the naming distinction for DLLs ("curses" vs. "pdcurses") is abandoned, and either the static lib or DLL is built, not both at once (except for X11).

  • For backwards compatibility, a special module just for deprecated functions -- currently PDC_check_bios_key(), PDC_get_bios_key(), PDC_get_ctrl_break() and PDC_set_ctrl_break(). These shouldn't be used in applications, but currently are... in fact, all the "private" functions (in curspriv.h) are subject to change and should be avoided.

  • A new document, IMPLEMNT, describing PDCurses' internal functions for those wishing to port it to new platforms.

  • Mark Hessling has released the X11 port to the public domain. (However, x11/ScrollBox* retain their separate copyright and MIT-like license.)

Bug fixes and such:

  • Most of the macros have been removed (along with the NOMACROS ifdef). The only remaining ones are those which have to be macros to work, and those that are required by X/Open to be macros. There were numerous problems with the macros, and no apparent reason to keep them, except tradition -- although it was PCcurses 1.x that first omitted them.

  • Clean separation of platform-specific code from the rest. Outside of the platform directories, there remain only a few ifdefs in curses.h and curspriv.h.

  • General reorganization and simplification.

  • Documentation revisions.

  • When expanding control characters in addch() or insch(), retain the attributes from the chtype.

  • Preserve the A_ALTCHARSET attribute in addch() and insch().

  • Per X/Open, beep() should always return OK.

  • On platforms with a controlling terminal (i.e., not X11), curs_set(1) now sets the cursor to the shape it had at the time of initscr(), rather than always making it small. (Exception for DOS: If the video mode has been changed by PDC_resize_screen(), curs_set(1) reverts to line 6/7.) The shape is taken from SP->orig_cursor (the meaning of which is platform-specific).

  • Stop updating the cursor position when the cursor is invisible (this gives a huge performance boost in Win 9x); update the cursor position from curs_set() if changing from invisible to visible.

  • Some tweaking of the behavior of def_prog_mode(), def_shell_mode(), savetty(), reset_prog_mode(), reset_shell_mode() and resetty()... still not quite right.

  • flash() was not implemented for Win32 or X. A portable implementation is now used for all platforms. Note that it's much slower than the old (DOS and OS/2) version, but this is only apparent on an extremely slow machine, such as an XT.

  • In getstr(), backspacing on high-bit characters caused a double backspace.

  • hline() and vline() used an incorrect (off by one) interpretation of _maxx and _maxy. If values of n greater than the max were specified, these functions could access unallocated memory.

  • innstr() is supposed to return the number of characters read, not just OK or ERR. Reported by Mike Aubury.

  • A proper implementation of insch() -- the PDC_chadd()-based version wasn't handling the control characters correctly.

  • Return ASCII and control key names from keyname() (problem revealed by ncurses' movewindow test); also, per X/Open, return "UNKNOWN KEY" when appropriate, rather than "NO KEY NAME".

  • Turn off the cursor from leaveok(TRUE), even in X11; leaveok(FALSE) now calls curs_set(1), regardless of the previous state of the cursor.

  • In the slk area, BUTTON_CLICKED events now translate to function keys, along with the previously recognized BUTTON_PRESSED events. Of course, it should really be checking the events specified by map_button(), which still doesn't work.

  • napms(0) now returns immediately.

  • A unified napms() implementation for DOS -- no longer throttles the CPU when built with any compiler.

  • Allow backspace editing of the nocbreak() buffer.

  • pair_content(0, ...) is valid.

  • There was no check to ensure that the pnoutrefresh() window fit within the screen. It now returns an ERR if it doesn't.

  • In X11, resize_term() must be called with parameters (0, 0), and only when SP->resized is set, else it returns ERR.

  • Copy _bkgd in resize_window(). Patch found on Frederic L. W. Meunier's web site.

  • slk_clear() now removes the buttons completely, as in ncurses.

  • Use the current foreground color for the line attributes (underline, left, right), unless PDC_set_line_color() is explicitly called. After setting the line color, you can reset it to this mode via "PDC_set_line_color(-1)".

  • Removed non-macro implementations of COLOR_PAIR() and PAIR_NUMBER().

  • Dispensed with PDC_chadd() and PDC_chins() -- waddch() and winsch() are now (again) the core functions.

  • Dropped or made static many obsolete, unused, and/or broken functions, including PDC_chg_attrs(), PDC_cursor_on() and _off(), PDC_fix_cursor(), PDC_get_attribute(), PDC_get_cur_col() and _row(), PDC_set_80x25(), PDC_set_cursor_mode(), PDC_set_rows(), PDC_wunderline(), PDC_wleftline(), PDC_wrightline(), XCursesModifierPress() and XCurses_refresh_scrollbar().


  • Obsolete/unused elements of the WINDOW struct: _pmax*, _lastp*, _lasts*.

  • Obsolete/unused elements of the SCREEN struct: orgcbr, visible_cursor, sizeable, shell, blank, cursor, orig_emulation, font, orig_font, tahead, adapter, scrnmode, kbdinfo, direct_video, video_page, video_seg, video_ofs, bogus_adapter. (Some of these persist outside the SCREEN struct, in the platform directories.) Added mouse_wait and key_code.

  • Removed all the EMALLOC stuff. Straight malloc calls were used elsewhere; it was undocumented outside of comments in curspriv.h; and there are better ways to use a substitute malloc().

  • Single mouse clicks are now reportable on all platforms (not just double-clicks). And in general, mouse event reporting is more consistent across platforms.

  • The mouse cursor no longer appears in full-screen mode in Win32 unless a nonzero mouse event mask is used.

  • ALT-keypad input now works in Win32.

  • In Win32, SetConsoleMode(ENABLE_WINDOW_INPUT) is not useful, and appears to be the source of a four-year-old bug report (hanging in THE) by Phil Smith.

  • Removed the PDC_THREAD_BUILD stuff, which has never worked. For the record: PDCurses is not thread-safe. Neither is ncurses; and the X/Open curses spec explicitly makes it a non-requirement.

  • With the internal compose key system in the X11 port, modifier keys were breaking out of the compose state, making it impossible to type accented capitals, etc. Also, Multi_key is now the default compose key, instead of leaving it undefined by default; and a few more combos are supported.

  • In X11, the first reported mouse event after startup always read as a double-click at position 0, 0. (This bug was introduced in 2.8.)

  • In X11, don't return selection start as a press event. (Shift-click on button 1 is still returned.)

  • In X11, properly handle pasting of high-bit chars. (It was doing an unwanted sign extension.)

  • In X11, BUTTON_MOVED was never returned, although PDC_MOUSE_MOVED was set.

  • The fix in 2.8 for the scroll wheel in X11 wasn't very good -- it did report the events as scroll wheel events, but it doubled them. Here's a proper fix.

  • Changed mouse handling in X11: Simpler translation table, with XCursesPasteSelection() called from XCursesButton() instead of the translation table; require shift with button 1 or 2 for select or paste when mouse events are being reported (as with ncurses), allowing passthrough of simple button 2 events. This fixes the previously unreliable button 2 behavior.

  • Modifier keys are now returned on key up in X11, as in Win32. And in general, modifier key reporting is more consistent across platforms.

  • Modifiers are not returned as keys when a mouse click has occurred since the key press.

  • In BIOS mode (in DOS), count successive identical output bytes, and make only one BIOS call for all of them. This dramatically improves performance.

  • The cursor position was not always updated correctly in BIOS mode.

  • In testcurs, the way the ACS test was written, it would really only work with a) PDCurses (with any compiler), or b) gcc (with any curses). Here's a more portable implementation.

  • Better reporting of mouse events in testcurs.

  • Blank out buffer and num before the scanw() test in testcurs, in case the user just hits enter or etc.; clear the screen after resizing.

  • Allow tuidemo to use the last line.

  • Separate left/right modifier keys are now reported properly in Win32. (Everything was being reported as _R.)

  • Attempts to redirect input in Win32 now cause program exit and an error message, instead of hanging.

  • Dropped support for the Microway NDP compiler.

  • Some modules renamed, rearranged.

  • Fixes for errors and warnings when building with Visual C++ 2005.

  • In MSVC, the panel library didn't work with the DLL.

  • Complete export lists for DLLs.

  • Simplified makefiles; moved common elements to .mif files; better optimization; strip demos when possible.

  • Changed makefile targets of "pdcurses.a/lib" and "panel.a/lib" to $(LIBCURSES) and $(LIBPANEL). Suggestion of Doug Kaufman.

  • Changed "install" target in the makefile to a double-colon rule, to get around a conflict with INSTALL on non-case-sensitive filesystems, such as Mac OS X's HFS+. Reported by Douglas Godfrey et al.

  • Make PDCurses.man dependent on manext. Suggestion of Tiziano Mueller.

  • Set up configure.ac so autoheader works; removed some obsolescent macros. Partly the suggestion of T.M.

  • The X11 port now builds in the x11 directory (including the demos), as with other ports.

  • The X11 port should now build on more 64-bit systems. Partly due to M.H.

  • The default window title and icons for the X11 port are now "PDCurses" instead of "XCurses".

  • Internal functions and variables made static where possible.

  • Adopted a somewhat more consistent naming style: Internal functions with external linkage, and only those, have the prefix "PDC_"; external variables that aren't part of the API use "pdc_"; static functions use ""; and "XC" and "xc_" prefixes are used for functions and variables, respectively, that are shared between both processes in the X11 port. Also eliminated camel casing, where possible.

  • Changed the encoding for non-ASCII characters in comments and documentation from Latin-1 to UTF-8.

@GitMensch GitMensch released this Sep 12, 2017 · 1446 commits to master since this release

Assets 2

As with the previous version, you should assume that apps linked against older dynamic versions of the library won't work with this one until recompiled.

New features:

  • Simpler, faster.

  • Declarations for all supported, standard functions, per the X/Open Curses 4.2 spec, with the notable exception of getch() and ungetch(). You can disable the use of the macro versions by defining NOMACROS before including curses.h (see xmas.c for an example). NOMACROS yields smaller but theoretically slower executables.

  • New functions: vwprintw(), vwscanw(), vw_printw() and vw_scanw(). This completes the list of X/Open 4.2 functions, except for those concerned with attr_t and wide characters. Some (especially the terminfo/termcap functions) aren't yet fully fleshed out, though.

  • Non-macro implementations for COLOR_PAIR(), PAIR_NUMBER(), getbkgd(), mvgetnstr(), mvwgetnstr(), mvhline(), mvvline(), mvwhline(), and mvwvline(). (The macros are still available, too.)

  • newterm() works now, in a limited way -- the parameters are ignored, and only the first invocation will work (i.e., only one SCREEN can be used).

  • start_color() works now -- which is to say, if you don't call it, you'll only get monochrome output. Also, without calling it, the terminal's default colors will be used, where supported (currently only in Win32). This is equivalent to the PDC_ORIGINAL_COLORS behavior introduced in 2.7, except that only the default colors will be used. (PDC_ORIGINAL_COLORS is still available, if you want to combine the use of specific colors and the default colors.)

  • New logic for termname() and longname(): termname() always returns "pdcurses"; longname() returns "PDCurses for [platform] [adapter] [COLOR/MONO]-YxX" (adapter is only defined for DOS and OS/2). This is the first time these functions return anything in Win32.

  • New installation method for XCurses: the header files are placed in a subdirectory "xcurses" within the include directory, rather than being renamed. (But the renamed xcurses.h and xpanel.h are also installed, for backwards compatibility.) curspriv.h and term.h are now available, and existing curses-based code need no longer be edited to use XCurses' curses.h. And with no more need for explicit XCursesExit() calls (see below), your code need not be changed at all to move from another curses implementation to XCurses. It can be as simple as "gcc -I/usr/local/include/xcurses -lXCurses -oprogname progname.c".

  • Combined readme.* into this HISTORY file, and incorporated the old 1.x (PCcurses) history.

  • New functionality for the testcurs demo: ACS character display; menu support for PgUp, PgDn, Home and End; centered menu; and it can now be resized in X.

  • Added modified versions of the rain and worm demos from ncurses.

Bug fixes and such:

  • Big cleanup of dead and redundant code, including unneeded defines, ifdefs, and structure elements.

  • flushinp() was not implemented for Win32.

  • resetty() was not restoring LINES and COLS.

  • nonl() made '\n' print a line feed without carriage return. This was incorrect.

  • Removed bogus implementation of intrflush().

  • The line-breakout optimization system, disabled by default in 2.7, is removed in 2.8. It simply didn't work, and never has. (The typeahead() function remains, for compatibility, but does nothing.)

  • The declarations for the printw() and scanw() function families were erroneously ifdef'd.

  • Safer printw() calls on platforms that support vsnprintf().

  • Use the native vsscanf() in DJGPP, MinGW and Cygwin.

  • ACS_BLOCK now works in X.

  • Explicit calls to XCursesExit() are no longer needed.

  • XCURSES is now defined automatically if not DOS, OS2 or WIN32.

  • The default icon for XCurses wasn't working (had to remove the focus hint code to fix this). Also, the default title is now "XCurses" instead of "main".

  • Incorrect dimensions (undercounting by two in each direction) were shown while resizing in X.

  • Scroll wheel events were not always correctly reported in X.

  • 32 bits are enough for the "long" chtype, but 64 bits were used on a 64-bit system, wasting memory. Now conditioned on _LP64. This could be faster, too.

  • The short, 16-bit chtype now works with XCurses.

  • Corrected return value for is_linetouched(), is_wintouched(), can_change_color() and isendwin() (bool instead of int).

  • timeout(), wtimeout(), idcok() and immedok() return void.

  • pair_content() takes a short.

  • Replaced incorrect usages of attr_t with chtype. attr_t is still typedef'd, for backwards compatibility. (It's supposed to be used for the WA_*-style functions, which PDCurses doesn't yet support.)

  • Added const where required by the spec, and in other appropriate places.

  • Removed PDC_usleep(). napms() is now the core delay routine.

  • Fixed poll() support in napms().

  • Various changes to the internal PDC_* functions -- don't depend on these, and don't use them unless you absolutely have to.

  • Some routines accessed window structures in their variable declarations, before checking for a NULL window pointer.

  • Dropped support for the undocumented PDC_FULL_DISPLAY, wtitle(), and PDC_print().

  • Cleaned up remaining warnings.

  • Reduced unnecessary #include directives -- speeds up compilation.

  • Fix for demos build in Borland/DOS -- the makefile in 2.7 didn't specify the memory model. Reported by Erwin Waterlander.

  • Simplified the makefiles; e.g., some now build each demo in a single step, and Watcom no longer uses demos.lnk. Also, the demo exes are now stripped when possible; maximum compression used for archives built by the makefiles; xcurses-config removed as part of "make distclean"; and I tweaked optimization for some platforms.

  • Reverted to /usr/local/ as default installation directory for XCurses.

  • Upgraded to autoconf 2.59... instantly doubling the size of the configure script. Ah well. Otherwise, simplified the build system.

  • Dropped support for pre-ANSI compilers. (It hasn't worked since at least version 2.4, anyway.)

  • Revised and, I hope, clarified the boilerplate and other comments.

  • Simplified logging and RCS ids; added RCS ids where missing.

  • Consistent formatting for all code, approximately equivalent to "indent -kr -i8 -bl -bli0", with adjustments for 80 columns.

@GitMensch GitMensch released this Sep 12, 2017 · 1817 commits to master since this release

Assets 2

Note - new maintainer: William McBrine


  • Functions: delscreen(), getattrs(), has_key(), slk_color(), wcolor_set(), wtimeout().

  • Macros: color_set(), mvhline(), mvvline(), mvwgetnstr(), mvwhline(), mvwvline(), timeout(), wresize().

  • Stub implementations of terminfo functions (including a term.h).

  • More stubs for compatibility: filter(), getwin(), putwin(), noqiflush(), qiflush(), scr_dump(), scr_init(), scr_restore(), scr_set(), use_env(), vidattr(), vidputs().

  • The terminal's default colors are used as curses' default colors when the environment variable "PDC_ORIGINAL_COLORS" is set to any value (Win32 only at the moment).

  • Simplified build system.

  • Replaced PDC_STATIC_BUILD with its opposite, PDC_DLL_BUILD (see .mak files for more info).

  • Minimal implementation of color_content() -- no longer a stub.

  • Added the remaining ACS defines (ACS_S3, ACS_BBSS, etc.) for DOS/OS2/Win; "enhanced" versions of existing ACS characters used.

  • Support for scroll wheels.

  • Support for Pacific C.


  • Builds correctly (including demos) on all tested platforms (see below); nearly all compiler warnings have been cleaned up; the ptest demo is built on all platforms; "clean" targets are improved.

  • The ability to build ncurses_tests has been restored (see demos dir).

  • Line-breakout optimization now defaults to off (equivalent to "typeahead(-1)"), so output is not interrupted by keystrokes (it's supposed to resume on the next refresh(), which wasn't working).

  • Implicit wrefresh() in wgetch() was not being invoked in nodelay mode.

  • subpad() was erroneously offsetting from the origin coordinates of the parent pad (which are always -1,-1).

  • In wborder(), whline(), and wvline(), the current (wattrset) attribute was being used, but not the current background (wbkgd).

  • Allow Russian 'r' character ASCII 0xe0 to be returned.

  • termattrs() now also returns A_UNDERLINE, A_REVERSE.

  • In Win32, with large scrollback buffers set, there was an unwanted "scrollup" effect on startup.

  • Revamped keyboard handling for Win32.

  • New screen resize method for Win32.

  • napms(), delay_output(), etc. now work with Cygwin.

  • curs_set(0) wasn't working in Win32 in full-screen (ALT-ENTER) mode -- the cursor stayed on.

  • The A_REVERSE attribute was broken in XCurses.

  • On 64-bit systems, XCurses was ignoring every other keystroke.

  • Added focus hints for XCurses.

  • Demos (except for tuidemo) once again have their proper titles in XCurses (using Xinitscr() instead of the obsolete XCursesProgramName).

  • The 16-bit chtype is a working option again (by removing #define CHTYPE_LONG from curses.h), except in XCurses. It's not recommended; but if your needs are limited, it still works.

  • Reset screen size in resetty() under DOS, as in Win32 and OS/2.

  • Changes for cursor size under DOS.

  • Automatic setting of BIOS mode for CGA under DOS now works.

  • The cursor is now always updated in PDC_gotoxy(); this fixes the problem of missing characters in BIOS mode.

  • Macros nocbreak(), cbreak(), nocrmode(), crmode(), nodelay(), nl() and nonl() now return OK.

  • ERR and OK are now defined as -1 and 0, respectively, for compatibility with other curses implementations -- note that this change is not binary compatible; you'll have to rebuild programs that use shared/dynamic libraries.

  • Added "const" to prototypes where appropriate.

  • Miscellaneous code cleanup.


Walter Briscoe
Jean-Pierre Demailly
Ruslan Fedyarov
Warren Gay
Florian Grosse-Coosmann
Vladimir Kokovic
Matt Maloy
K.H. Man
Michael Ryazanov
Ron Thibodeau
Alexandr Zamaraev

and of course, MARK HESSLING, for his over 13 years of service as the maintainer of PDCurses. Plus, thanks to all who've reported bugs or requested features. Apologies to anyone I've forgotten.

This version was tested on Turbo C++ 3.0 and Borland C++ 3.1 for DOS; DJGPP 2.X; Open Watcom 1.3 for DOS (16 and 32-bit), Windows and OS/2; EMX 0.9d and the "newgcc" version of EMX; Borland C++ 5.5 for Windows; recent versions of MinGW, Cygwin, LCC-Win32 and Microsoft Visual C++; and gcc under several flavors of Linux, Mac OS X, *BSD and Solaris.

@GitMensch GitMensch released this Sep 12, 2017 · 2144 commits to master since this release

Assets 2


  • Allow accented characters on Win32 platform when run on non-English keyboards.

  • Allow "special" characters like Ctrl-S, Ctrl-Q under OS/2 to be returned.

  • Some bugs with halfdelay() fixed by William McBrine.

  • pechochar() should now work correctly.

  • redrawwin() macro in curses.h was incorrect - fixed by Alberto Ornaghi

  • Don't include "special" characters like KEY_SHIFT_L to be returned in getnstr() family. Bug 542913

  • Entering TAB in wgetnstr() no longer exceeds requested buffer size. Bug 489233

  • Fixed bug 550066, scrollok() and pads. Also beep() called when buffer exceeded. Bug 562041.

  • Reverse video of X11 selection reinstated. Pablo Garcia Abio??

  • Right Alt modifier now works like left Alt modifier under Win32

  • Add support for all libXaw replacement libraries with Scrollbar bug. Note that for this to work, you still have to change the libXaw replacement libraries to fix the bug :-(

  • Don't trap signals in XCurses if calling application has ignored them. Change by Frank Heckenbach.

  • Bug reports from Warren W. Gay: - Fix termattrs() to return A_REVERSE and A_BLINK on all platforms. - Fix definition of getsyx() and setsyx() to be consistent with ncurses. Bug 624424. - Fix definition of echo() and noecho(). Bug 625001. - Fix definition of keypad() and leaveok(). Bug 632653. - Missing panel_hidden() prototype. Bug 649320.

  • Fixed bug with calling def_prog_mode(), resize_term(), reset_prog_mode(); the resize details were being lost.


  • Clipboard support now available on DOS platform, but handled internally to the currently running process.

  • New X11 resource: textCursor, allows the text cursor to be specified as a vertical bar, or the standard horizontal bar. Thanks to Frank Heckenbach for the suggestion.


  • lcc-win32 now works correctly

@GitMensch GitMensch released this Sep 12, 2017 · 2258 commits to master since this release

Assets 2


This release of PDCurses includes the following changes:

  • Set BASE address for Win32 DLL

  • Add KEY_SUP and KEY_SDOWN.

  • Add PDC_set_line_color()

  • Add blink support as bold background

  • Add bold colors

  • Add getbkgd() macro

  • Add new PDC functions for adding underline, overline, leftline and rightline

  • Add support for shifted keypad keys.

  • Allow more keypad keys to work under Win32

  • Change Win32 and OS/2 DLL name to curses.dll

  • Change example resources to allow overriding from the command line

  • Changes for building cleanly on OS/2

  • Changes to handle building XCurses under AIX

  • Check if prefresh() and pnoutrefresh() parameters are valid.

  • Ensure build/install works from any directory

  • Handle platforms where X11 headers do not typedef XPointer.

  • Mention that Flexos is likely out-of-date.

  • Pass delaytenths to XCurses_rawgetch()

  • Remove boldFont

  • Updates for cursor blinking and italic.


  • Fix bug with getting Win32 clipboard contents. Added new PDC_freeclipboard() function.

  • Fix bug with halfdelay()

  • Fix bug with mouse interrupting programs that are not trapping mouse events under Win32.

  • Fix return value from curs_set()

  • Reverse the left and right pointing bars in ALT_CHARSET


  • Add QNX-RTP port