Releases: Bill-Gray/PDCursesMod
PDCursesMod 4.5.4 - 2026 January 07
(See docs/HISTORY.md for more details, and/or the Git log for extreme detail.)
Minor new features
-
Framebuffer and DRM ports can show fullwidth characters. bc3b4d8
-
chtypes can be short (16-bit) integers (again). Support for this was dropped in PDCurses 3.7 in late 2018, but this can actually be useful in very memory-restricted environments, such as in DOS. e215a6d -
For the GL port, the 'resize' mode can be set via the
PDC_RESIZEenvironment variable. b8f8220 -
VT platform can be compiled with
djgppand runs correctly (see issue #340). Parts of the fix by Gisle Vanem. 222b475 -
Blinking and
PDC_gotoyx()code is almost identical between the SDLn, x11new, GL, WinGUI, and framebuffer/DRM ports; that code is now incommon/blink.c. This allows the cursor to blink in all of those ports and (in some cases) for the caret and hollow-box cursor styles to be supported. f06ab53 f6657a3 fec5d8b 9e3cde7 4c8d3a0 9e3cde7 -
DOSVGA now supports ~16 million (2^24 + 256) colors and 1M (2^20) color pairs, similar to (and using the same underlying code as) WinGUI, SDLs, GL, framebuffer/DRM, and x11new. bd4cc9c
Bug fixes
-
WinGUI : mouse modifiers (Ctr, Alt, Shift) became 'stuck' from the previous keys hit, and were not turned off when the modifier keys in question were released. 9f9819f
-
WinGUI : positions returned for mouse wheel events were wrong. cd8cd7e
-
WinCon : a typo prevented mouse wheel events from working at all. Fix provided by Jordan Hemming. 93dba3a
-
Fullwidth characters are now shown correctly for 32-bit
chtypes (if they are supported on that platform in the first place, and the font actually has glyphs for them). 3d6bc63
PDCursesMod 4.5.3 - 2025 Aug 11
(See docs/HISTORY.md for more details, and/or the Git log for extreme detail.)
PDCursesMod 4.5.3 - 2025 August 11
Minor new features
Bug fixes
-
stdin/stdout redirection now works on the Windows console platform. Fix
supplied by Robin Haberkorn. 6855b32 8fbb3a6 -
C23-compliant compilers (and some others) objected to the casting of
function pointers returned byGetProcAddress(). ce60aa6 7309a03 -
If
PDC_NCMOUSEis #defined, the behavior of the mouse routines should
copy that of ncurses, warts and all. Scroll-up and down are mapped
to presses on buttons 4 and 5, and tilt-scroll events and "real"
button 4 and 5 events are ignored. 0de9f72 -
Minor fixes for Digital Mars and OpenWATCOM compilation of WinCon and
WinGUI. a4c0153 6af9889 6eedea0 -
Fixes for the VT port for DOS. fdd95ca 4e23068 2006f0a
1994189 bb1f6e4 277765e 6ab0a9b dd7a0a8
PDCursesMod 4.5.2 - 2025 Jun 19
(See docs/HISTORY.md for more details, and/or the Git log for extreme detail.)
PDCursesMod 4.5.2 - 2025 June 19
Minor new features
-
Framebuffer/DRM shows a mouse cursor now, if built with HAVE_MOUSE=Y.
It doesn't actually respond to mouse events yet, but that should be
relatively straightforward. 7578a60 -
x11new and framebuffer/DRM ports cleaned up, READMEs updated, some
unnecessary code removed. b08805c 6221595 f300bfa bae06a8 -
Fixes for C90 compliance : removed some C++-style // comments, moved
variables to the top of code blocks, used TRUE/FALSE instead of
true/false. 8800009 9efd323 -
In x11new, you can hit Ctrl-Minus and Ctrl-Plus to go to the next smaller
or larger font size, respectively. 43066a8 -
The
PDC_KEY_MODIFIER_REPEATmodifier was not applied in SDL1 and x11new,
and was broken in SDL2. 83fa89c 6bf92e1 -
Changed some documentation to be more markdown-friendly when read into
MANUAL.md, a la William McBrine's work upstream. 07a5469
b786e76 1cc01e4 7cc0f0d c58fd92 a06e0be
Bug fixes
-
getch() triggered an assert() if fed a character that expanded to a
multi-byte string in PDC_FORCE_UTF8 builds (issue #335, reported by
Robin Haberkorn). 6306ac2 -
WinCon/pdckbd.c contained a poorly-written cast to which the C23 standard
objects, resulting in warnings/errors when built to that standard
(issue #333). Fix supplied by Gisle Vanem. 2426dbc -
The
PDC_KEY_MODIFIER_REPEATmodifier was broken in SDL2. 6bf92e1
PDCursesMod 4.5.1 - 2025 May 12
(See docs/HISTORY.md for more details, and/or the Git log for extreme detail.)
PDCursesMod 4.5.1 - 2025 May 12
Major new features
- Added an 'x11new' port : X11 written from scratch to require fewer
dependencies and to allow a memory-leakage-free build.
Minor new features
-
Framebuffer/DRM : simplified specifying which display to use. If you
have suitable permissions, Alt-= will cycle through displays.
db3cbb7 -
testcursnow allows one to specify mouse mask parameters more precisely,
and/or to set a zero mouse interval (which should result in clicks being
converted to presses and releases). Also, can test using the ncurses
mouse interface instead of the 'classic' undocumented SysV mouse interface.
de6c742 7a520f6 91645ce -
VT port now works on Haiku. e8f098d
Bug fixes
-
Framebuffer/DRM port cursor didn't rotate when you rotated the screen.
f3188af -
When restarting Curses, the foreground/background weren't stored,
resulting in odd colors (affected all ports). 433dbfb -
The ncurses forms library does not build correctly for wide characters.
Until it's fixed, it and the tests relying on it are only built in
narrow-character (8-bit) mode. 0f31253 -
Fixed possible read-outside-bounds error in UTF8 conversion. 5a61709
-
testcurscalled scanw() with a "plain" %s format specifier. The lack of
a width left it open to buffer overflow if more than 79 bytes were entered.
8bf383a -
VT build failed when using GNU make to cross-compile demos and tests for
Windows using MinGW. d391921 -
Mouse input inconsistently respected
mousemask()on most platforms.
The common logic for combining press/releases into clicks, double- and
triple-clicks has been abstracted intocommon/mouse.c, and is now used
by the WinCon, WinGUI, x11new, and VT platforms (and will probably be
used eventually by most other platforms). See issue #330. 52d2068
9e857e7 812bd69 592d27f
PDCursesMod 4.5.0 - 2024 Dec 31
(See docs/HISTORY.md for more details, and/or the Git log for extreme detail.)
Major new features
-
Added an OS/2 GUI port, provided by chasonr. 23b1fbe 267f92a
-
The ncurses 'menu' library can be compiled and used with PDCursesMod,
and the ncurses program 'demo_menus' built to test it out. (The
'forms' library can be built in 8-bit character mode -- it currently
uses ncurses internals for wide mode -- but doesn't appear to
actually work yet.) 07bc4ac 1ad9562
Minor new features
-
The DRM and Linux framebuffer port now allows for screen rotation.
Hit Alt-/ for a 90-degree rotation. This should pave the way for
support on phones and other rotatable displays (and already helps if
you have a monitor in portrait mode). 0e41ba5 1b7b432 -
Added
is_cbreak(),is_echo(),is_nl(),is_raw()functions to
access members of the non-opaqueSCREENstruct. The first two
replacePDC_getcbreak()andPDC_getecho(). 98b6969 -
Windows can be created, moved, and resized that go off the right
and bottom edges of the screen, a la ncurses. (I think this was
an acknowledgment of the fact that after resizing a screen, windows
might go over those edges anyway.) Windows still cannot go off the
left or top edges. bc51d18 -
Added a new 'test' program for the issues mentioned above with
scrolling andwinsertln(),wdeleteln(),winsdelln(). 98c7405 -
Three new small test programs to investigate various aspects of
how curses works (or doesn't work). 5cef1e3 -
The 'tests' programs can now be built, on some platforms, with
'make -f Makefile tests'. 200b548 e611673 63138ea
80fdfe7 218aa8c -
Switched from defaulting to ncurses-6.4 tests to ncurses-6.5.
-
WinGUI now defaults to resizable windows, similar to SDLn, WinCon,
and X11. 58807ea -
winsnstr()handled 513 bytes from the input, instead of the clearly
intended 513wchar_ts. This worked, but was an unnecessarily low
limitation. It is now fixed, and the function can now handle
arbitrarily long strings via recursion. Added some code to test this
in 'show_col.c'. 3f8dfa9 18ef78d -
PDC_wcwidth( )updated from Unicode 14.0.0 to 16.0.0 93e32ef a5f13c2
Bug fixes
-
In rare cases, blinking on the framebuffer port could be disabled
due to an integer rollover. eaee2a6 -
In WinGUI, we could potentially read memory out of bounds. From
slipher. 70d2724 -
In WinGUI, theoretically 'monospaced' fonts were not necessarily
monospaced. Reverted to drawing each character separately. b99fed1 -
In WinGUI, when redrawing a string of characters, the preceding and
subsequent glyphs were also redrawn. This was apparently needed at
one time to avoid stray pixels, but appears to be unnecessary now.
8466f73 -
In WinGUI and WinCon,
PDC_clearclipboard()would fail if the clipboard
was not open. From Mark Hessling. a071130 -
If
napms()was called with a negative value, it would lock. 65dfa7e -
Framebuffer/DRM port didn't redraw upon changing fonts if the new font
was the same size as the old one. c714cd9 -
wsetscrreg()required the cursor for the window to be positioned
between the 'top' and 'bottom' of the new scroll region. 5a0d5be -
wdeleteln()would delete the line currently under the cursor, then
bring up lines down to the end of the current scroll region, inserting
a blank line there. It really should delete all the way to the bottom
of the window. See also wmcbrine/PDCurses/issues/165. b02f94f -
The 'picsview' demo had a possible buffer overrun error. Reported and
fix proposed by Michael Knap. fcd2dd0 -
Plan9 port ran into a compile error due to different timekeeping
functions. Also was missing a few demos and term.h. 1e8472c -
Removed an
assert()inmvwin()when the window was moved outside the
screen area. Some programs (including 'test_pan') assume they can try
moving a window, then check the return value to see if it was actually
on screen. c801354 -
PDC_set_box_type()has been removed, because it's an unneeded redundancy.
You can get double-lined or thick-lined boxes, and/or rounded corners,
via the standard Curseswborder_set()function, and it'll work with
ncurses and other libraries. 'test_pan' revised to provide an example
of how that's done. f8d87ed549 099fa28 -
printw()overflowed a buffer when asked to output more than 512 bytes.
ddf80d0 -
napms()rounded up to the nearest clock tick on DOS and DOSVGA; it now
rounds to the nearest clock tick (with at least one tick being used).
Modified the documentation to reflect this. 785113f -
PDC_wcstombs()could overflow a buffer in the UTF8 decoding. 7d704dd -
DOS and DOSVGA builds failed on Digital Mars. Several small fixes were
required. 981893b d22725b 32f2266 fd1ddf8 -
Fixes for Borland Turbo C compilation. a59f452 26128c2
d6b7e99 -
panel_hidden()is now portable, returning TRUE (1) and FALSE (0) instead
ofOK(0) andERR(-1) This may break existing applications, so you possibly
want to check for the PDCursesMod build (PDC_BUILD < 4500). Or see
demos/testpan.cfor a solution portable to ncurses and PDCurses.
PDCursesMod 4.4.0 - 2023 Nov 30
(See docs/HISTORY.md for more details, and/or the Git log for extreme detail.)
Note that because of SCREEN and WINDOW now being opaque, the WA_ flags and some A_ flags changing, and KEY_MAX being redefined, this is not binary compatible with 4.3.x. However, you'll get a link error if you get versions mixed up, so this shouldn't cause any real trouble.
Major new features
-
The
SCREENandWINDOWstructures are now opaque. 1167188 3259719 -
The
WA_flags are now distinct, in builds with 64-bitchtypes andattr_ts (the default). This led to considerable documentation changes and an attempt to make the distinction betweenWA_macros (for use withwattr_t) andA_macros (for use withchtype) clearer. Most implementations of curses havewattr_t==chtype, including PDCurses* and ncurses, but you can't really rely on it. 78658c9 -
The
FILEarguments passed tonewterm()are now actually used on the VT platform. Changes by Pavel Stehule. 9c16db9
Minor new features
-
SDL1, SDL2, and GL support double and triple mouse clicks. Change provided by Lyle Tafoya.
a4e563d -
'panels' library almost completely rewritten. The new version is better at figuring out what parts need to be updated, and is generally easier to understand. 8830b71.
-
Added some small test programs for very specific feature/bug tests. e6a5ede
Bug fixes
PDCursesMod 4.3.7
PDCursesMod 4.3.7 - 2023 June 17
(See docs/HISTORY.md for more details, and/or the Git log for extreme detail.)
Major new features
- SDL2 GL port, from Julius Ikkala. This is (on most systems) faster than the "traditional" SDL2 port. Many commits, starting at 4678131.
Minor new features
-
Support on Windows for Unicode input in the SMP (codepoints above 0xFFFF, for instance emojis.) 2050706 75b62ea
-
WinCon: supports full unicode output including SMP. 3ec63c9 7089b2e fac87bd
-
WinCon, WinGUI can be cross-compiled for Windows on Arm. 158e8ae
-
'newtest': extended the SLK testing. 'newtest' and 'testcurs' now use wget_wch( ) in wide builds, so the actual character is shown on input tests (instead of the multibyte stream). 'testcurs' gradient example (showing colors beyond 256 palette entries) is a little more logically set out. c744e3e 7089b57
-
WinCon can support a 'default' (transparent) background. 81cbefb
-
'curspriv.h' modified to allow C++ compilation. 52a2fdf
-
Clarified compatibility for ACS_ and WACS_ box characters, and added many missing aliases. From a suggestion by Simon Sobisch. e8f7b33
-
Fixed warnings with OpenWATCOM. We now compile with -we ("treat warnings as errors"). f27369e abbd8f5 89e3426
-
If you try to compile the DOS version with WIDE=Y, you get an error message explaining that wide characters don't work on that platform. d07b884
-
Now using ncurses-6.4 tests instead of 6.3.
Bug fixes
-
WinCon: Key modifiers were incorrectly cleared without a key event. 9229f08
-
VT: Ctrl-Alt-letter input was off by one. Hit, say, Ctrl-Alt-T, and you'd get Ctrl-Alt-U. 6556858
-
Fixed some casting issues with GetProcAddress( ) in Windows and a deprecation warning with MinGW, with considerable help from Arnold Trembley and Chuck Haatvedt. Further work may be required (it works, but pedantic compilation can get you warnings). bbae4bb 28cbcfc
-
CMake's list of demos is now up to date for DOS, DOSVGA, WinCon, WinGUI. Others to follow. 4f3dc96
-
Pasting text from the clipboard was done with a buffer lacking room for a null terminator, resulting in a memory overwrite. Reported by nhmall (issue #295). 0a4e1e9
-
realloc( ptr, 0); was assumed to free ptr and return NULL. This is usually true, but isn't guaranteed and isn't true on FreeBSD, and caused an assert to be triggered in endwin(). abbb6de
-
'terminfo' functions were not included in the DOSVGA builds, nor in WinCon when using the Microsoft VC makefile. Also, the WinCon Digital Mars makefile was broken. c51efbb
-
'picsview' and 'mbrot' demos now work correctly with ncurses. Some unnecessary distinctions between PDCurses* and ncurses were removed. 8972791
PDCursesMod 4.3.6
PDCursesMod 4.3.6 - 2023 April 12
(See docs/HISTORY.md for more details, and/or the Git log for extreme detail.)
- SDL2 can now show Unicode past 0xffff (Supplemental Multilingual Planes). 602bc38
- VT port supports output redirection. a6618d9 6925d0f 65939aa
- WinGUI support DPI awareness, for better font display on high-res screens. 012e3d9
Bug fixes
- Partial fix so that getch( ) will return byte codes, expanding characters beyond 256 into multi-byte strings. bd50b2b
- Scrolling a window could result in a crash when the window was freed. 72521a1
- Decoding UTF8 was broken for SMP. ad7cd29
- Text selection & copying could cause memory corruption with 4 byte UTF-8
codepoints when WIDE=Y. bff53ab - Lots of small bug fixes and improvements... again, see
docs/HISTORY.mdand/or the git log for more details.
PDCursesMod 4.3.5
(See docs/HISTORY.md for more details, and/or the Git log for extreme detail.)
- WinGUI is again single-threaded, resulting in considerably simpler code and fixing some resizing issues. See pull request #240. 6962ab6
- Framebuffer port can now use either the (deprecated) Linux framebuffer system or the DRM (Direct Rendering Manager) system. DRM is not supported on some older systems and the Linux framebuffer is not supported on newer ones. DRM also can be used with *BSD; the Linux framebuffer really is a Linux-only solution. e9bc09c
- delwin() now returns ERR if you attempt to delete a window with active subwindows, or a window that wasn't allocated by PDCursesMod or which has already been freed. c643c0d 3b14813
- delscreen() deletes all windows associated with a SCREEN. 26e473c
- Added ncurses extensions for opaque WINDOW structs, from Markus Uhlin. 7bb822b 22fecc1
- PDC_free_memory_allocations() (see below) was unnecessary; if we follow the specifications for delscreen(), as we now do, all that memory gets freed in the natural course of things. 0223039 60138ca
- Both SDLs could have problems in finding fonts on some Linuxes. Fixes from Mark Hessling. 1e4bcc9 9cf041e
- getch() and wget_wch() could return erroneous values in WinCon for values greater than 127. e54d03f e86d9c3
- Lots of small bug fixes and improvements... again, see
docs/HISTORY.mdfor more details.
PDCurses 4.3.4
(See docs/HISTORY.md for more details, and/or the Git log for extreme detail.)
- Files created by
getwin()andputwin()should now be usable between future versions of PDCursesMod, across most OSes and compilers, and (with limitations) even between wide/narrow and 32-bit/64-bitchtypebuilds. endwin()was not signal-safe. (Memory was freed and buffered file output was done; both are signal-unsafe.) See 'upstream' issue wmcbrine/PDCurses#134 for details.- We now use
wcwidth(), instead of our own internal version, on Linux. This avoids some redundancy and may enable better results in non-Unicode environments, if any. - Also updated our
PDC_wcwidth()from Unicode 5.0 to Unicode 14.0.0. - WinGUI could block if there was no key delay.
- Alternative character set glyphs were sometimes shown when they ought not to be, or vice versa.
- You can free all remaining internal memory with the new
PDC_free_memory_allocations()function. This is not strictly necessary, since all memory is freed on exit anyway. But it can help when using Valgrind or similar memory diagnostic tools; you can eliminate any possible PDCursesMod leaks. - Lots of small bug fixes and improvements... again, see
docs/HISTORY.mdfor more details.