You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PDCursesMod/docs/HISTORY.md

3600 lines
134 KiB
Markdown

Generally speaking, this history mentions only the more significant
changes. See the git log for full details.
Current PDCursesMod - 2024 Oct 28
=================================
Major new features
------------------
- Added an OS/2 GUI port, provided by chasonr. 23b1fbed61 267f92a2c0
- 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.) 07bc4ac785 1ad9562b9a
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). 0e41ba5e68 1b7b432f9c
- Added is_cbreak(), is_echo(), is_nl(), is_raw() functions to access
members of the non-opaque SCREEN struct. The first two replace
PDC_getcbreak() and PDC_getecho(). 98b6969a7e
- 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. bc51d18ff1
- Added a new 'test' program for the issues mentioned above with
scrolling and winsertln(), wdeleteln(), winsdelln(). 98c7405a3f
- Three new small test programs to investigate various aspects of
how curses works (or doesn't work). 5cef1e3d00
- The 'tests' programs can now be built, on some platforms, with
'make -f Makefile tests'. 200b548516 e611673b49 63138eaf34
80fdfe7095 218aa8c0ed
- Switched from defaulting to ncurses-6.4 tests to ncurses-6.5.
- WinGUI now defaults to resizable windows, similar to SDLn, WinCon,
and X11. 58807ea498
- winsnstr() handled 513 _bytes_ from the input, instead of the clearly
intended 513 wchar_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'. 3f8dfa9e06 18ef78de69
Bug fixes
---------
- In rare cases, blinking on the framebuffer port could be disabled
due to an integer rollover. eaee2a61f2
- In WinGUI, we could potentially read memory out of bounds. From
slipher. 70d27245d1
- In WinGUI, theoretically 'monospaced' fonts were not necessarily
monospaced. Reverted to drawing each character separately. b99fed1acb
- 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.
8466f73e21
- In WinGUI and WinCon, PDC_clearclipboard() would fail if the clipboard
was not open. From Mark Hessling. a071130c95
- If napms() was called with a negative value, it would lock. 65dfa7e61a
- Framebuffer/DRM port didn't redraw upon changing fonts if the new font
was the same size as the old one. c714cd9bcc
- wsetscrreg() required the cursor for the window to be positioned
between the 'top' and 'bottom' of the new scroll region. 5a0d5becee
- 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. b02f94fd3d
- The 'picsview' demo had a possible buffer overrun error. Reported and
fix proposed by Michael Knap. fcd2dd0cb8
- Plan9 port ran into a compile error due to different timekeeping
functions. Also was missing a few demos and term.h. 1e8472cdbf
- Removed an assert() in mvwin() 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. c801354044
- 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 Curses wborder_set() function, and it'll work with
ncurses and other libraries. 'test_pan' revised to provide an example
of how that's done. f8d87ed549 099fa2876c
- printw() overflowed a buffer when asked to output more than 512 bytes.
ddf80d010f
- 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. 785113f0b9
- PDC_wcstombs() could overflow a buffer in the UTF8 decoding. 7d704dd618
- DOS and DOSVGA builds failed on Digital Mars. Several small fixes were
required. 981893b997 d22725b90a 32f22660c4 fd1ddf866c
- Fixes for Borland Turbo C compilation. a59f452e78 26128c29aa
d6b7e998eb
PDCursesMod 4.4.0 - 2023 November 30
===================================
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 SCREEN and WINDOW structures are now opaque. 11671880e2
3259719b37
- The WA_ flags are now distinct, in builds with 64-bit chtypes and
attr_ts (the default). This led to considerable documentation
changes and an attempt to make the distinction between WA_ macros
(for use with wattr_t) and A_ macros (for use with chtype) clearer.
Most implementations of curses have wattr_t == chtype, including
PDCurses* and ncurses, but you can't really rely on it.
78658c94cd
- KEY_MAX was increased to reserve some key codes for future use.
16ac494c25
- The FILE arguments passed to newterm() are now actually used on the
VT platform. Changes by Pavel Stehule. 9c16db9589
Minor new features
------------------
- SDL1, SDL2, and GL support double and triple mouse clicks.
From Lyle Tafoya. a4e563d763
- 'widetest' now tests copying of both precomposed and combining
characters with getcchar() and setcchar(). 19169a1b18
- VT flavor gets the correct initial screen size in Windows.
d62083a096
- '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. 8830b71392.
- PDC_transform_line_sliced() used to break up lines to ensure that
PDC_transform_line() will not be fed packets of excessive size, nor
packets that continue after fullwidth or combining characters.
This avoids buffer overruns and problems with mishandled characters.
cb8c87b287
- 'testcurs' attribute test now lists which flags in term_attrs() are
set. 4da423c59e
- Added some small test programs for very specific feature/bug tests.
e6a5edee79
- You can set a 'thick' style for boxes/borders (wide-character builds
only). 5fd12f8ec9
Bug fixes
---------
- WinGUI keyboard responsiveness could be poor if it wasn't getting
enough CPU share. 087c20cc87
- Fixed a (very small) memory leak from reset_color_pairs. 9e236abb17
- Fixed some ncurses demo failures, due to incomplete HAVE_xxx
descriptions. From William McBrine's PDCurses. 2d114bf406
- Panels were only redrawn on window resizes if they overlapped other
panels, and even then, only the overlapping lines were redrawn.
e2b2205da6
- Numeric keypad presses were duplicated on SDL2 and GL for Windows.
7c26ec92ed
- The SDL2 makefile had a recursive definition of CC and PREFIX.
ac96c5511e
- If the screen was resized, either programmatically or by the user,
the "pseudo-panel" for that screen was not resized. 6b571be281
- waddnwstr() could read characters one element past the array bounds.
(Theoretically fixed in commit c03e650a70, but I'd messed it up.)
5735a1cb31
- touchoverlap() un-touched some parts of the window that didn't
overlap. 5c0bc334f8
- Line attributes were not reliably updated after PDC_set_line_color().
3b54290f13
- Ripped-off lines did not necessarily work initially and always got
mangled when the screen was resized. 05e09e5368
PDCursesMod 4.3.7 - 2023 June 17
================================
Major new features
------------------
- SDL2 GL port, from Julius Ikkala. This is (on most systems)
faster than the "traditional" SDL2 port. Many commits, starting
at 4678131a39.
Minor new features
------------------
- Support on Windows for Unicode input in the SMP (codepoints above
above 0xFFFF, for instance emojis.) 2050706649 75b62ea015
- WinCon: supports full unicode output including SMP. 3ec63c9067
7089b2eae1 fac87bd938
- WinCon, WinGUI can be cross-compiled for Windows on Arm. 158e8ae5b7
- '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. c744e3ec03 7089b57d07
- WinCon can support a 'default' (transparent) background. 81cbefbd4b
- 'curspriv.h' modified to allow C++ compilation. 52a2fdf518
- Clarified compatibility for ACS_ and WACS_ box characters, and added
many missing aliases. From a suggestion by Simon Sobisch. e8f7b33bbf
- Fixed warnings with OpenWATCOM. We now compile with -we ("treat
warnings as errors"). f27369e93b abbd8f5268 89e3426248
- 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.
d07b884502
- Now using ncurses-6.4 tests instead of 6.3.
Bug fixes
---------
- WinCon: Key modifiers were incorrectly cleared without a key event.
9229f08604
- VT: Ctrl-Alt-letter input was off by one. Hit, say, Ctrl-Alt-T,
and you'd get Ctrl-Alt-U. 65568582af
- Fixed some casting issues with GetProcAddress( ) in Windows and a
deprecation warning with MinGW, with considerable help from Arnold
Tremblay and Chuck Haatvedt. Further work may be required (it works,
but pedantic compilation can get you warnings). bbae4bb0e8 28cbcfcc34
- CMake's list of demos is now up to date for DOS, DOSVGA, WinCon,
WinGUI. Others to follow. 4f3dc96436
- 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). 0a4e1e9065
- 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(). abbb6de7de
- '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. c51efbbf88
- 'picsview' and 'mbrot' demos now work correctly with ncurses. Some
unnecessary distinctions between PDCurses* and ncurses were removed.
89727917e7
PDCursesMod 4.3.6 - 2023 April 12
=================================
Minor new features
------------------
- SDL2 can now show Unicode past 0xffff (Supplemental Multilingual
Planes). 602bc380f81
- VT port supports output redirection. a6618d94d7 6925d0f571
65939aaccd
- WinGUI support DPI awareness, for better font display on high-res
screens. 012e3d90f8
- SDL1 and 2 and X11 support user handling of the window close button,
using PDC_set_function_key. 89b2287d66 791318dfaa
- 'terminfo' functions (really stubs) are compiled and linked in for
all platforms. ab1c007273 248146021e
- Build support added for LLVM and Windows on ARM, from Mioki.
158e8ae5b7 2fb65608b3 86c1296d89 4884ce2c6d
Bug fixes
---------
- HiDPI support for WinGUI crashed (reported by Chuck Haatvedt), fixed
by Casey Langen. 489f5d6317
- Resizing 'ptest' caused it to move to the next panel display
in the series. 0ed72b9f91
- Partial fix so that getch( ) will return byte codes, expanding characters
beyond 256 into multi-byte strings. bd50b2b2ab
- Negative window sizes for newwin() and resize() were not error-checked,
resulting in segfaults. c6c7f2d074
- In Windows SDL2, Alt-keystrokes were ignored (see wmcbrine/PDCurses#142).
Fix provided by Benjamin Adamson. 7f1e1bba34
- In SDL2, programmatic resizes caused further spurious resizes,
leading to KEY_RESIZE events. b09c91ea15
- Scrolling a window could result in a crash when the window was
freed. 72521a1697
- Decoding UTF8 was broken for SMP. ad7cd29a23
- WinGUI could get confused if the window was resized, resulting in
input being ignored. bc340c0d20
- Text selection & copying could cause memory corruption with 4 byte UTF-8
codepoints when WIDE=Y. bff53ab114
See the git log for more details.
PDCursesMod 4.3.5 - 2022 November 27
====================================
Major new features
------------------
- WinGUI is again single-threaded, resulting in considerably simpler
code and fixing some resizing issues. See pull request #240.
6962ab6e9d
Minor new features
------------------
- 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. e9bc09c083
- GNU Makefiles for VT and framebuffer ports work out of the box on
FreeBSD. 2b5f0036fe
- Much revision internal to the PDCursesMod library (no effect as far
as users of the library are concerned) to move static variables into
the SCREEN structure, in a way that preserves binary compatibility
and keeps those variables opaque outside the library. 0d5e4dc5b4
3e167172ff 7449df5369
- 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. c643c0da95 3b14813dbb
- delscreen() deletes all windows associated with a SCREEN. 26e473c60b
- Made the PANEL and PANELOBS structures opaque. f55e55a0fb 78039d10c3
- Checking for key hits is much, much faster on most platforms.
6612df5af6
- Added ncurses extensions for opaque WINDOW structs, from Markus Uhlin.
7bb822b2a4 22fecc1cf6
- You can specify the library name during a GCC build with LIBNAME=(name)
and the shared library name with DLLNAME=(name). Support is, as yet,
incomplete, but it should be possible to expand this to MSVC and
OpenWATCOM builds. 44e5aa323e
- 'ptest' and 'speed' demos free all memory on exit. This helps (slightly)
when testing with Valgrind.
- On gcc and mingw builds for WinCon, WinGUI, and VT, one can run 'make
configure (options)' to revise 'curses.h' to use the specified options.
This may be extended to other compilers and platforms. fe39e244d2
9c0f475287
Bug fixes
---------
- In some situations, cursor movement/changes were not immediately made
on VT and SDL2. a805ec2b15 18abe3dbd5
- Keyboard entry in SDL2 was defective for some numeric keypad hits, and
shift-F(n) keys gave no response. d87b7bd917 8a41f2ed57
- 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. 0223039ec0 60138ca8ec
- SDL2 had problems finding the default TrueType font on Rocky Linux 9
builds. Mark Hessling added a bit of code so that a secondary default
path is specified; if one path fails, we try the other. 1e4bcc9676
- SDL1 was similarly updated; it also got some better default locations
for TrueType fonts on Windows and Apple, borrowed from fixes that had
already been done for SDL2. 9cf041e835
- Both SDL1 and SDL2 failed to free some memory when delscreen(SP) was
called. The result was that you couldn't cleanly shut down curses
completely and restart it. c62edf7752
- Fixed some problems with Digital Mars compiles and added missing demos.
e798d30e63 4781b742b5 e39528f9e8 5efbea3676 aba598f492
- wgetnstr() was broken on platforms where wint_t != wchar_t. 54bc1a16fb
- AltCharSet display was broken in DOSVGA 8-bit character builds. e00e33650b
- getch() and wget_wch() could return erroneous values in WinCon for values
greater than 127. e54d03fc80 e86d9c3568
- Made PDC_set_default_colors() an internal function. Exposing it basically
amounted to a bug. f1786064ee acd143144f
- In SDLn in fullscreen mode, mouse events near the bottom or right-hand
sides of the screen could trigger segfaults. 03eb51cefc
PDCursesMod 4.3.4 - 2022 July 29
================================
Minor new features
------------------
- As a small step to avoiding direct access to the SCREEN structure
outside private PDCurses code, added PDC_getbreak() and PDC_getecho()
functions to access SP->cbreak and SP->echo. 59bd4b5653 5da7c96fe8
- You can free remaining internal buffers by calling the new
PDC_free_memory_allocations() function. 8d10534143 2259f29d5f
(Note that this has been reverted.)
- On Linux, we use the system-provided wcwidth() instead of our own.
Aside from avoiding redundant code, this may help in non-Unicode
locales (our wcwidth() is for Unicode only). fc520ca19f
- PDC_wcwidth( ) updated from Unicode 5.0 to 14.0.0, and now uses the
16-bit tables generated by uniset. 68b38102bc
- When building SDL1 on OS/2, Ctrl-(letter) and Alt-(letter) combinations
were not returned. Pointed out and fix contributed by Mark Hessling.
2968f3198d
- Mark also found some neglected VT key sequences and added them.
c47ce9f724
- Windows clipboard functions consolidated in the 'common' directory.
This provides the clipboard code for the WinCon and WinGUI platforms,
and for VT when compiled in Windows. It would probably work with SDL1
when compiled in Windows, but that would need testing. 02d55b890e
- putwin() should produce files that can be read by getwin() even if
the putting code and the getting code are compiled with different
chtypes (i.e., wide vs. narrow and 32-bit vs. 64-bit chtypes).
6824e49bab 98e3f56580
- Miscellaneous code cleanup.
Bug fixes
---------
- CMake builds of SDL2 with WIDE=Y were not actually making wide builds.
797f688dd4 99e90f20c5 f6b73892c3
- endwin() was not signal-safe. While in endwin(), we shouldn't free
memory or have debug logging on (we were doing both). See "upstream"
issue wmcbrine/PDCurses#134 for discussion. c5ca238fac 18ff2cb00c
8d10534143
- WinGUI could block if there was no key delay (threading contention).
b84cf0cbb8
- Alternative character set glyphs could be shown when they shouldn't
be, or not shown when they should be. d6d338a8ee
- Revised mouse click handling on VT. The previous logic sometimes missed
double-clicks and could get confused with press/move/release.
93d0d931a0
- VT platform missed some function keys on some platforms. 043ca72355
- SDL2 got duplicated key presses if Shift-(numpad) keys were hit (issue #234).
9b86c29aa1
- Fixed (I think) problem with AppVeyor failing to get OpenWATCOM 1.9 to
work, causing almost every run to fail. cb59c93039 61929c222d 18abcfdbd6
- wattr_on() and attr_on() ignored the 'opts' parameter. When non-NULL, it
should (and now is) treated as a pointer to an integer color pair.
23374b894b
PDCursesMod 4.3.3 - 2022 May 25
===============================
Major new features
------------------
- OS/2 code replaced with William McBrine's current version, with some
modifications to accommodate PDCursesMod. This basically means that
the OS/2 port works again (it was rather thoroughly broken). 0b3cbc038f
bd39b611288
Minor new features
------------------
- Clipboard handling is implemented in a common manner for DOS, DOSVGA,
VT, SDL1, and framebuffer ports. This means the VT and framebuffer
ports actually store the clipboard text in a buffer and can retrieve it,
instead of basically doing nothing at all. 050b3532e1 d97b6a4171
- Two new demos, 'mbrot' (Mandelbrot display, exercises some of the
more esoteric color/palette functions) and 'calendar' (shows a calendar).
cbd59aca60
- Screen resizing no longer requires a call to resize_term(0,0). No
one appears to know why that call was required in the first place.
Commit 3110e3f624.
- The 'opts' parameter for certain functions, heretofore ignored, can
now be used to handle integer-sized color pair indices, a la ncurses.
9be6bde504
Bug fixes
---------
- Color 8 defaulted to black on X11, WinGUI, Linux framebuffer, and
the SDLn platforms. It should be (and now is) a medium gray.
ab8b038dc9
- Wide-character string input functions, such as get_wstr(), generated
display artifacts when fullwidth text was input. 549e4635e6
- VT port handles Alt-letter + shift/control modifiers better, setting
the appropriate modifier flags. 74b84cc28f
- WinGUI now interprets Shift-numpad keys correctly. eacd04d1aa
- VT and framebuffer ports (again) capture Ctrl-C with an interrupt
handler. Without this, you could hit Ctrl-C and not have anything
actually happen until getch() was called, so your code could hang
easily. Ctrls-Z, S, Q are now enabled on both platforms. cac097f235
- If the screen was user-resized, KEY_RESIZE was only returned if you'd
called `keypad( stdstr, 1)`. That requirement appeared to be unneeded
and has been removed (see issue #230 on GitHub). 3110e3f624
PDCursesMod 4.3.2 - 2022 February 06
====================================
Minor new features
------------------
- In 32-bit chtype, non-wide-character builds, you get 4096 color
pairs and all twelve attribute bits that you would get with any
64-bit chtype build. d498305c35
- Color pair management for find_pair(), alloc_pair(), free_pair()
sped up considerably. 4d41c85101 864f02523d7
- 'testcurs' modified to show A_DIM and to show supergradients when
possible. dfb2387ff8
- Almost all ncurses demos are now built, and this also now applies
to X11. d742c1c708 e11eb4ed11
- Default framebuffer font now includes all WCS/WACS glyphs. 88fbc83b29
41ab7af534
- X11, VT, and framebuffer ports all compile with full warnings and
-Werror. eabeb4cb99 fa98024a54 3c77a5b569
- New 'widetest' demo exercises getcchar() and setcchar(), neither of
which actually got tested at all in other demos. This was actually
added in 4.3.1, though it wasn't built by default in most ports.
0a815ea432 9dbd63846b a75727c5b2 4cd9338b56
- Automated builds on Windows now include the VT platform (commits
ceeb2de9e5, 6c3791f447). But VT codes are indifferently supported
by Microsoft; use of it is deprecated, with WinCon or WinGUI being
suggested instead (commit d6e517eb36).
- The 'mangling' of initscr() (see curses.h) that was done to ensure that
library version errors would be caught at link time is now done to
'endwin()' instead. We can really do either, but it turns out that
some build processes rely on initscr() being unmangled. 1e19a2eb96
- PDC_set_function_key( ) is not really platform dependent. This eliminated
some redundant code and enabled Ctrl-C to be returned on WinGUI and WinCon.
Added a corresponding PDC_get_function_key( ). 95b0843f69
Bug fixes
---------
- VT and framebuffer ports returned 10 for Enter and Ctrl-M,
instead of 13, and ignored ^C and ^Z. Fixed by Mark Hessling (issue #225
and pull request #227). 0dace8c90e ab0da09435
- WinCon port could mangle attributes for non-ANSI characters. It
still can (unavoidably so), but the damage no longer extends to
adjacent ANSI characters. Partly from a fix made by William
McBrine to PDCurses. 6553e40a37
- Removed completely meaningless PDC_MOUSE_POSITION and MOUSE_POS_REPORTS
macros. See issue wmcbrine/PDCurses#129. b4e7429976
- The terminfo dummy functions were not exported in shared library/DLL
builds. Fix by Simon Sobisch. e8723349de 24ffa99b03
- DOS alternative character set (ACS) was improperly displayed. 5db85b1157
PDCursesMod 4.3.1 - 2021 November 28
====================================
Major new features
------------------
- Added a Linux framebuffer port. dd5b99ce81 and many others.
Minor new features
------------------
- Added the ncurses extension WACS_T_* (thick-line box character)
alternate character set defines. 5cefe5fa00
- Added four ncurses demos. 948f4cf41d
- Eliminated CHTYPE_LONG and CHTYPE_64. Neither is really needed
anymore; we just have CHTYPE_32. e275cadd78 91b0b0dd5d
- It should now be difficult, if not impossible, to link code for
one PDCursesMod binary API to code for another. 7e06e8c264
- Palette changes are redrawn immediately. That was already true for
DOS and 8-bit framebuffer ports, where the palette has a hardware
meaning; it's now true in X11, VT, WinGUI, etc. e73cae9b2c
- mmask_t can now be 64 bits (and by default, it is). This enables
some unsnarling of mouse mask #defines and gets rid of the collision
of triple-clicks with mouse move events, and provides bits for
future use. 908f1b3d32
Bug fixes
---------
- Pads were incorrectly refreshed (issue wmcbrine/PDCurses#124).
41da0b2fb8 9de6c83cd9
- Odd input issue in WinCon (and presumably WinGUI); see issue
wmcbrine/PDCurses#126. This may be revisited. 64d727571e
- Background was improperly refreshed in pads. See wmcbrine/PDCurses#122.
b31f19f477
- SDL2 window could be shown improperly initialized at startup. 9d30ffa6db
- Ctrl-C stops the program in X11 and SDLn if noraw() has been called. The
framebuffer, VT, and WinGUI ports already did this. 210d49f48a
- Surrogate pairs and combining characters are now handled correctly in the
setcchar() and getcchar() functions. 3ef0592cfe 422bb2152e
- X11 could block on getch() if nodelay() and PDC_set_blink() were both set
to TRUE. Fixes issue #216. e20301ae19
- Fixed assert errors in SDL2 at startup. See issue #215. 5ee7cc0722
PDCursesMod 4.3 - 2021 August 25
========================================
Major new features
------------------
- SDLs and X11 ports now support full colors, a la WinGUI and VT.
a266f923ee, b63b36f9b8, fee4af28c8, 8606b96111
Minor new features
------------------
- ncurses tests build correctly again. Moved to ncurses-6.2 tests,
and they can now be built on VT, WinCon, and WinGUI (they already
worked with X11 and SDLn). f8dd18c0f2 4a71b26dd1 c8b67969d6
edd97f38fd 68f1f1c299
- Added ncurses extension functions find_pair(), alloc_pair(), free_pair()
(see commit 19c14525e2) and reset_color_pairs() (534f24f547).
- To test the above ncurses extensions, added support to build
'demo_new_pair' from the ncurses tests (commit d8951fadc9) and
a new PDCursesMod-specific 'init_col' demo (commit 7b4d38a0ee).
The latter also tests out handling of default colors and the
ability to preserve the screen background... which appears to
only work in the VT flavor, and imperfectly there.
- SDLs now have strikeout and overlined text. 91b280f442 So does X11
5e5cd29617
- SDLs now recognize some 'extended' media keys. 5e10ef17fc
- SDLs and VT can be compiled as shared libraries and installed/uninstalled.
b78cd8a33f bb8d408675 d0309c2963
- VT has strikeout text in xterm, some (not many) others.
05af0c6810
- Removed unnecessary 'extended' key definitions. b9fafe60f1
- Code compiles with -Wextra -pedantic on many flavors without warnings.
674512453a, 6ad85268c5, 2648cdf5cd, others.
- Some tests done using GitHub's CI. 3cb1b5f1bf, several following
commits.
- New PDC_set_box_type( ) function to allow boxes/lines to be drawn using
the doubled-line characters. Modified 'test_pan.c' to demonstrate the
new function. ab7bad3981 dd981b0e78
- WinGUI, WinCon beep() is now in a separate thread, so we don't
hang the program while the beeping takes place. a6212d94d2
- WinCon can be compiled for 32-bit chtypes.
- Added a PDC_set_default_colors( ) function. Some platforms expect
particular background/foreground colors by default. This lets you set
those colors. (Note that this should have been, and was made, an
internal function; programs should use 'assume_default_colors()'.)
b642c91279
- In Windows, one can use Ctrl-C/Ctrl-V to copy/paste, instead of
Ctrl-Shift-C/Ctrl-Shift-V. 9f487d4fea
- Added assert()s on many NULL parameters. Calling with such parameters
is permitted, but usually indicates bugs that should result in an assertion
when in debugging mode. 96f4984f9f
- In DOSVGA, as in X11, WinGUI, and the SDLs, you can specify an
initial screen size using resize_screen() before actually starting PDCurses.
0623c44ff0
- _tracef(), trace(), curses_trace() added for ncurses compatibility. This
doesn't (as yet) actually add any capabilities; it just lets you access
existing capabilities in the same way you would if using ncurses.
Bug fixes
---------
- WinCon and WinGUI key tables didn't go far enough and could crash if some
unusual key codes were received. See wmcbrine/PDCurses issue #118 (this
is mostly a copy of wmcbrine's fix as suggested by zingchen). fe124295be
59aa2afce9
- SDL2 display did not update after restoring from iconified form.
2bb4284597
- Both SDLs crashed if a background image was shown, due to an out-of-bounds
array access. e19ea211fc fbf4ea1fec
- DOS PDC_napms() failed for times greater than 18 minutes (would round
time down to nearest multiple of 18 min). acc1fa72fa
- Buffer could overrun on extremely large (more than 512 column) displays
in X11 (91b280f442), WinCon (51327cad4d)
- Certain extended keys could crash WinCon, WinGUI. d747d35ed8
- Plugged some memory leaks in X11. Much more to be done. cb4344a163
- In VT flavor, the mix of printfs() and (unbuffered) write() calls
wasn't interrupt-safe, and led to some corruption in the output. This
is now fixed. 365b6cce79
- Some cursor shapes in VT were mixed up. 1f1bbe7d8a
- Fixes for SDL2 font colors when using non-mono bitmaps. e2b2874e76
d9306c09db
- Computation of the font width in X11 was wrong, leading to misaligned
text. This also mangled the code that checks that the bold and italic
fonts are the same size as the 'normal' font. 54d721cafe
- X11 mouse handling ignored mouse moves, sometimes suppressed Ctrl/Alt/
Shift modifiers, and the logic was confusing; other bugs may have
lurked in there. cfd7f64b95
- Input in WinCon, when compiled in narrow (8-bit, non-PDC_WIDE) mode,
could be mangled. Shamelessly copied wmcbrine's fix from the commit
in PDCurses e28e705d17438ffd (q.v.). 83dcf79672
PDCursesMod 4.2 - 2020 Oct 03
=============================
Major new features
------------------
- Pulled in almost all of William McBrine's 3.8 and 3.9 changes.
These include the single-process X11 port (much simpler and
less prone to bugs), common copy/paste, some extended colors,
and much other good work from wmcbrine over the last few years.
- See history entries for versions 3.8 and 3.9 below for details.
- Added chasonr's DOSVGA port and Federico G. Benavento and Jens
Staal's Plan 9 port.
- Automated builds again work and have been extended to new platforms.
- Added ncurses-style init_extended_color(), init_extended_pair(),
extended_color_content(), extended_pair_content() functions.
VT and WinGUI versions can now access 2^20 = over a million color
pairs and 2^24+256 = 16777472 colors. This should be extended
to SDLx and X11, and possibly WinCon.
- As a result of all this, A_RGB is now completely gone (and not
really needed anyway).
- Attempts to mis-link a wide-character library to code compiled for
8-bit characters, or a mismatch of a 32-bit chtype library to
64-bit chtype code, etc., will usually result in an undefined
variant of initscr. (Previously, everything would compile, then
crash or produce odd output when the program was run.) See GitHub
issue #133.
- Added 'picsview' demo, something of a ripoff/homage to Thomas
E. Dickey's 'picsmap' demo for ncurses. It has a similar purpose:
demonstrating the functions in the above paragraph and the new
ability to access lots and lots of colors.
- HISTORY.md brought up to date for 4.2 (which meant bringing in
changes for 3.8 and 3.9). Also, 4.1.0 was almost completely
undocumented.
Minor new features
------------------
- Name changed from 'PDCurses' to 'PDCursesMod', in hopes of
simultaneously making its origin clear and also making it clear
that it's somewhat modified from the parent project.
- Makefiles are better organized and more 'standard'. 'make' builds
the PDCurses library, 'make demos' all demos. The .mif files are
all now in the 'common' directory.
- VT port is much faster, mostly thanks to not writing data to
stdout with no buffering and with printf(). It also will use
SGR mouse commands if available, which makes things more bullet
proof in cases of confused mouse input, and means windows can
be more than 224 columns wide without crashes happening when
the mouse reaches that column.
- Added ncurses extension functions ceiling_panel() and
ground_panel().
- 'speed' demo tests out speed of the code.
- 'test_pan' allows one to move panels around the screen and adjust
the panel depth.
- Added ability to change SDL1/SDL2 font rendering mode by setting
pdc_sdl_render_mode
Bug fixes and such
------------------
- Valgrind found three small memory leaks in the VT port (which
would apply to all other ports as well). There are still more
leaks in other ports, which should be addressed.
- Double-clicking in WinGUI got you a click message followed by
a double-click. This does conform to 'standard' Windows practice,
but was both stupid and did _not_ conform with the way VT did
it, nor the way I'd want it to be on any port. To do : enable
double and triple clicks on all ports, not just VT and WinGUI.
- Handling of default background/foreground in VT was just plain
wrong. Now fixed.
- Mouse wheel events now report the correct mouse position, instead
of always reporting (-1, -1).
- Fixed spurious resize events at startup and for window moves on
the X11 platform.
- raw() and noraw() now work as specified on WinGUI and VT. (They
still don't work on X11, SDLn, or WinCon.)
- User shrinking of the screen to a degree causing a window to be
partly off-screen caused a crash. (In PDCurses, windows are
theoretically always on-screen; we were not properly prepared
for the possibility that the screen might shrink and put windows
partly or totally off-screen.) We no longer crash, and the part
of the window that is still on-screen is refreshed correctly.
See the git log for more details.
PDCurses 4.1.0 - 2019-05-10
=========================
New features
------------
- VT backend improved to support different cursors, mouse move events,
and Ctrl/Alt/Shift flags.
- Fixes to allow WinCon builds on platforms lacking INFOEX struct.
- Improved DOS napms to convert milliseconds to BIOS ticks accurately.
- Followed wmcbrine's 'rebranding' of Public Domain Curses to PDCurses.
See the git log for more details.
PDCurses 4.0.4 - 2019-01-20
=========================
Major new feature:
-------------------
- New VT backend. Works within an xterm or xterm-based terminal and some
other terminals. Mostly works in the Linux console, and on Win10
directly and on Win9x/DOS if ANSI.SYS (or NANSI or NNANSI .SYS or .COM)
are installed.
Minor new features:
-------------------
- SDL2 variant: dimmed, bold, blinking, and RGB text are handled, as is
window resizing.
- DOS variant: cross-compilation from GNU/Linux works with both DJGPP and
Watcom C/C++; and, 16-bit and 32-bit Watcom makefiles have been combined
into one
- Many modifications (and some bug fixes) taken from William McBrine's
branch. An effort has been made to narrow the gap between the forks
where possible. But both forks are moving targets with different
design choices and priorities.
- Demos improved to show version info
Bug fixes
-------------------
- compilation warnings/errors with some compilers in some variants #53, #57, #58, #65, ...
- newtest sample was broken in all wide variants #60
- the paste button printed debug output #62
- some corner cases (midnight crossing, atomicity of tick count reads) in
DOS version of napms() were not handled well
See the git log for more details.
------------------------------------------------------------------------
PDCurses 4.0.2 - 2017-09-12
=========================
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.
See the git log for more details.
PDCurses 3.9 - 2019-09-04
=========================
IMPORTANT NOTE: This is actually wmcbrine's 3.9 version. Its
changes did not actually make it into this fork until 4.1 and 4.2.
768 colors, single-process X11, copy-and-paste for all, and more.
New features
------------
- Single-process, single-thread version of the X11 port. Much, much
faster than the two-process version. Needs more testing. This version
omits translations.
- A common copy-and-paste system for all platforms, based on the
PDC_*clipboard() functions. (This is the first time copy-and-paste is
available for the SDL ports, and it replaces the old X11-specific
C&P.) Press and hold button 1 while selecting; paste with button 2.
Add Shift if mouse events are activated in curses. You can also paste
via Shift-Ctrl-V, and copy with Shift-Ctrl-C (although selecting
already sets the buffer). Note that paste is implemented via
ungetch(), and is currently limited to 256 characters at a time. (You
can get more via PDC_getclipboard().) With some ports (e.g. Wincon),
the existing terminal C&P mechanism may override PDCurses'. DOS and
SDL1 can only C&P within the same app.
- A new maximum of 768 colors, for Wincon, SDL and X11. COLOR_PAIRS is
still limited to 256. The idea is that each pair can have a unique
foreground and background, without having to redefine any of the first
256 (predefined) colors. Colors 256-767 have no initial definitions,
and are intended to be set via init_color(). An example has been added
to testcurs (loosely based on part of newtest, by Bill Gray).
- Wincon now allows redefinition of all 768 colors, and allows it even
under ConEmu.
- True italics for ConEmu. (It seems it should also support true bold,
but I couldn't make that work.)
- Added new functions from ncurses and/or NetBSD: has_mouse(),
is_keypad(), is_leaveok(), is_pad(), set_tabsize(), touchoverlap(),
underscore(), underend(), wunderscore(), and wunderend(). See the man
pages for descriptions. Partly due to Karthik Kumar Viswanathan, and
suggestions of Simon Sobisch.
Bug fixes and such
------------------
- Check for standard C++ (>= 98), where native bool should exist, and use
that; otherwise (pre-/non-standard C++) fall back to the old behavior.
Satisfies clang, hopefully doesn't mess anything else up.
- Recent versions of clang throw an error over "-install_name".
- Most curses functions assumed a valid SP (i.e. that initscr() had
already been called). Now, instead, they return ERR or other
appropriate values. Suggestion of S.S.
- Deprecated PDC_save_key_modifiers() -- there's no benefit to NOT
saving them.
- Hold back screen updates due to palette changes until paused; always
do this update now (previously only in X11 and SDL, seems necessary in
Windows 10 1903).
- SDL2 windows were freezing on moving to another screen (reported by
Mark Hessling). Still issues with moving between screens of different
scaling.
- Find the X libraries in some additional locations. After M.H.
- Converted default X11 icons to XPM, fixing their non-display in Ubuntu.
- Made XIM standard, removed "classic" X11 compose system.
- Made wide-character build the default for X11 (--disable-widec for
narrow).
- Smoother resizing in X11, when not in scrollbar mode.
- Dropped X11 options "borderWidth" (broken since at least 2.7) and
"cursorColor" (now set automatically for contrast).
- Correctly restore Insert mode and QuickEdit mode in Wincon's
PDC_reset_shell_mode(). Patch by "vyv03354".
- Add a WINDRES variable to wincon/Makefile for the sake of cross-
compilers. Patch by Marc-Andre Lureau.
- Suppress cursor movement during color tests in testcurs.
- Added UTF-8-demo.txt for tuidemo to browse (by default, only in forced
UTF-8 mode). File by Markus Kuhn.
- Moved the doc files from "man" to "docs" -- the docs/man thing was too
confusing. Streamlined the web page into two files.
- Rewrote the "Portability" sections of the man pages to reflect current
ncurses and NetBSD. The old charts weren't very accurate.
- Document resolution of timeout() and napms(). Suggested by S.S.
- Rewrote manext (again) in Awk.
- Changed most dates to ISO format.
See the git log (for both PDCursesMod and for wmcbrine's PDCurses, the
original source of these changes) for more details.
------------------------------------------------------------------------
PDCurses 3.8 - 2019-02-02
=========================
IMPORTANT NOTE: This is actually wmcbrine's 3.8 version. Its
changes did not actually make it into this fork until 4.1.
It's that time again.
New features
------------
- PDC_VERSION structure and PDC_get_version() function, to provide run-
time information on version and compile options, in case they don't
match the header; along with new compile-time defines PDC_VER_MAJOR,
PDC_VER_MINOR and PDC_VERDOT. Suggested by Simon Sobisch, designed
partly after Bill Gray and partly after SDL_VERSION.
- Extensive documentation revisions, now covering many previously
undocumented functions.
- Allow building the DLL with MinGW for SDL. (This also changes the
non-DLL library name from libpdcurses.a to pdcurses.a.)
- Consolidated Watcom makefiles for DOS, after Tee-Kiah Chia; added
MODEL option to Makefile.bcc for consistency.
- Added another ncurses_test, "lrtest"; updated for ncurses 6.1.
Bug fixes and such
------------------
- T.H.'s update rect clipper (a resize fix for SDL2) broke sdltest,
because it didn't take the offsets into account for a non-owned
window.
- The version number is now hardwired only in curses.h and configure.ac.
- Revised pdcurses.rc to correctly show all fields when checking the
properties on a DLL; use it with MinGW as well as MSVC.
- Allow building both 32- and 64-bit SDL2 versions in MinGW without
editing the Makefile, by using the proper dev package.
- Build SDL2 demos in "Windows" mode (i.e. no controlling terminal) with
MSVC, as with MinGW.
- Build sdltest.exe with MSVC.
- Changed sample pathname in tuidemo to always use slashes -- the
backslashes failed in, e.g., SDL under Linux or macOS. Patch by B.G.
- Warning fix for Borland OS/2.
- Minor file reorganization / renaming.
- mmask_t is now used in both the classic and ncurses mouse interfaces,
and is defined in such a way as to keep it at 32 bits.
- Dropped map_button() and getbmap().
- Dropped the ability to build BBS-ready archives from the Makefiles.
- Made manext.py compatible with Python 3.x.
See the git log (for both PDCursesMod and for wmcbrine's PDCurses, the
original source of these changes) for more details.
PDCurses 3.7 - 2018-12-31
=========================
New features
------------
- Avoid conflict with ncurses by having apps define PDC_NCMOUSE before
including curses.h to invoke the ncurses-style mouse interface,
instead of NCURSES_MOUSE_VERSION. (The old way will also still work.)
After Simon Sobisch (see PR #33).
- In SDL (TTF mode), the box-drawing and block ACS characters are now
rendered in a font-independent way, to ensure their correct alignment
across cells. Underlining is now handled in a similar way.
- TTF fonts in SDL are now rendered in Blended mode instead of Solid.
Partly after Joachim de Groot.
- New default fonts and font sizes for SDL/TTF.
- SDL2 now builds under MSVC. Partly due to Alexandru Afrasinei.
- Documentation re-org -- more Markdown internal links; moved to man/
dir (the doc/ dir name was too similar to docs/, which is needed for
GitHub Pages hosting); concatenated man page document now made
permanent, under the name MANUAL.md; new man build utils; merged
sdl.md and x11.md into their respective READMEs; changed some
redundant and unclear comments.
- Directory re-org -- in addition to the above, created common/, to
unclutter the root, and eliminate a few more redundant files from
platform directories. (We already had "pdcurses", but that's for the
portable core; "common" is for files that are more platform-specific,
though shared by more than one platform.)
- Broke out the redundant ACS tables and moved them to common/.
- PDcurses' "bool" type is now based on stdbool.h, when available. There
should be no conflicts when including stdbool.h either before or after
curses.h.
- The demos are no longer built by default, since they add a lot of time
to the build, and often aren't wanted. But you can still build them via
"make demos" (tweak as needed).
- Makefile tweaks for cross-compiling by Simon Sobisch.
Bug fixes and such
------------------
- Improved Windows console resizing, when reducing the vertical size.
After Ulf Magnusson. (See GitHub issue #26.)
- Bring back ifdef'd CONSOLE_SCREEN_BUFFER_INFOEX, for the benefit of
older compile environments. (Not automatic -- must specify INFOEX=N on
the command line.) After Simon Sobisch.
- Replaced COMMON_LVB_* with numbers to appease some old compilers.
After Simon Sobisch.
- KEY_RESIZE should be key_code = TRUE. Reported by Ulf Magnusson.
- SDL2 resize fixes to prevent crashes, by Tim Hentenarr.
- SDL2 fixes for handling of SDL_TEXTINPUT, keys with modifiers, and
modifier keystrokes, by Tim Hentenarr.
- Fixed cursor rendering in SDL/TTF.
- SDL1 support is now dropped for Windows and macOS, and deprecated for
Linux. Use SDL2. The SDL1 port is likely to be dropped in the future.
- The setsyx() function is now void, after ncurses, and simplified.
- Warning fixes by Patrick Georgi and Stefan Reinauer.
- X11 used SP->resized in a non-boolean way, so it's now a short.
- Under some conditions (see issue #47), the X11 port could "free" colors
that it hadn't allocated. Reported by rin-kinokocan.
- New scroller for ozdemo -- no memory allocation, less copying -- to
resolve issue #46.
- Various minor Makefile tweaks.
- Eliminated term.h and terminfo.c, and moved mvcur() to move.c. These
stub functions, done on request (with others then requesting that I
take them away -- can't win), were a misguided attempt to facilitate
using PDCurses with certain non-C languages -- which, apparently, they
didn't end up actually doing. They're also, regrettably, specified as
part of the X/Open curses standard, even though they in effect
describe an entirely different interface layer (one on which
traditional curses, but not PDCurses, is built).
- Dropped support for short (16-bit) chtypes.
- Finally removed deprec.c, as it promised.
- Dropped the XOPEN, SYSVcurses and BSDcurses defines from curses.h, as
well as NULL (which is defined in stdio.h, included). TRUE, FALSE, ERR
and OK are now defined unconditionally.
- Moved pdcurses.org hosting to GitHub -- as a result, the site is now
part of the repo, in the docs/ directory. (Also, it has SSL again.)
See the git log for more details.
------------------------------------------------------------------------
PDCurses 3.6 - 2018-02-14
=========================
[Note : this is a copy of wmcbrine's update history for that version.
The changes involved have, however, now been integrated into
this fork.]
Tidying up some loose ends from 3.5, and trying to bring all platforms
up to the same level, as much as possible.
New features
------------
- 256 colors for the Windows console -- under Windows 10 or ConEmu,
only. This version doesn't allow init_color() or color_content() for
colors 16-255, just uses Windows' predefined palette (which matches
xterm-256color, like the default colors in X11 and SDL).
- Real blinking for the Windows console (all), and for OS/2 -- done in
software, like the Windows version -- replacing the erraticly working
Vio-based version (which didn't work at all in my OS/2 4.5 VM). OS/2
now always has 16 colors, and bright backgrounds can combine with
blinking.
- In DOS, OS/2 and Windows, attribute behavior now more closely matches
that of the more "advanced" ports (X11 and SDL) -- see the Attribute
test in testcurs.
- All of the A_* and WA_* attributes from X/Open are now defined in
curses.h, although some are no-ops, pending the availablity of more
attribute bits. A_INVIS is now a no-op on all platforms, instead of
overloading A_ITALIC, and so is A_PROTECT. A_LEFT and A_RIGHT are now
synonyms for PDCurses' old *LINE attributes.
Bug fixes and such
------------------
- For the X11 port, "make install" and the dynamic library build were
broken, since the configure move. Fixes partly after Mark Hessling.
- Renamed "win32" to the more accurate/descriptive "wincon" (i.e.
WINdows CONsole). Makefiles for all platforms renamed to remove the
redundant platform names, and to allow better sorting.
- In SDL2, apps that didn't explicitly handle resizing locked up. Now,
they can continue running, at their old size. (To Do: xmas is still a
basket case.)
- Added "/MACHINE:$(PLATFORM)" to wincon/Makefile.vc -- Thomas Dickey
says this is needed to build 64-bit with Visual Studio Express 2012.
With 2017, it suppresses a warning.
- Suppressed "Possibly incorrect assignment" warnings with BCC, which
also results in more readable code.
- Cleaned up obsolete comments, dead code, unneeded includes, typos, and
outdated documentation.
- Dropped support for EMXVIDEO.
- Dropped color remapping for OS/2 (broken).
- Dropped X11 DLL support for Cygwin (broken).
- Rearranged extended color display in testcurs.
- In ptest, handle resizing, and check for screens too small to run in.
- Allow KEY_* codes (including KEY_RESIZE) to exit firework, as other
keys do.
- Slightly faster Windows compilation (most noticeable in Watcom).
See the git log for more details.
------------------------------------------------------------------------
PDCurses 3.5 - 2018-01-15
=========================
So, it's been a while, eh?
This release is an attempt to bring PDCurses mostly up to date, without
breaking too many things in the process.
New features
------------
- SDL2 port, and TTF and Unicode support for both SDL1 and SDL2. Credit
for these goes mostly to Laura Michaels and Robin Gustafsson.
- 256 colors for SDL and X11, by Bill Gray. Colors 16-255 are set up to
match xterm colors, but can be redefined, as with 0-15.
- Bold and italic font options for SDL and X11. A_BOLD's behavior is
controlled by the new function PDC_set_bold() -- TRUE to select bold
font, FALSE to choose high foregound intensity (as before). Italic
fonts are selected by A_ITALIC (always on). X11 originally from Mark
Hessling.
- Real blinking in SDL and X11, controlled by PDC_set_blink(). Largely
due to Kevin Lamonte and Bill Gray.
- Support for A_UNDERLINE, A_LEFTLINE and A_RIGHTLINE in the Windows
console. This requires a recent version of Windows (10, maybe 8?) to
work with the standard console, but underlining also works with
ConEmu, at least as far back as XP.
- User resizing (i.e. grab window edges or maximize button) for Windows
console -- needs recent Windows or ConEmu.
- New-style color-changing code for the Windows console (using the new
offical API instead of undocumented functions), supporting
redefinition of colors 0-15 via init_color(). Works at least as far
back as Windows XP SP3. Patch by "Didrole".
- The Windows console port now creates a separate console buffer by
default, making for a cleaner and more complete restoration of the
original buffer. The old behavior can be used by setting
"PDC_RESTORE_SCREEN=0". Patch by Jason Hood.
- Left/right scroll wheel support for Windows console, SDL and X11. X11
by Mark Hessling.
- testcurs now includes an additional test to show various attributes,
and a display of the extended colors, where applicable.
Bug fixes and such
------------------
- termattrs() now returns something vaguely resembling the actual
capabilities of the specific "terminal". Specifically, A_BOLD and
A_BLINK reflect the availability of true bold fonts, and real
blinking; when not set in termattrs(), the attributes still work, but
control foreground and background intensity, as before. *LINE are also
meaningful, and even A_COLOR is set (or not).
- pad size check in pnoutrefresh() was broken since 3.0. Reported by
Peter Hull.
- In newpad(), begx and begy should be set to zero, otherwise creating a
subpad of the same width or height fails due to the check in subpad().
Patch by Raphael Assenat.
- More straightforward math for subpad(), plus another off-by-one error.
Reported by Werner Wenzel, John Hartmann et al.
- New subwindows/subpads/resized windows should copy _delayms. Patch by
"xaizek".
- Potentially invalid saved cursor position in resize_window() --
another off-by-one _maxx/_maxy error. Patch after "Luke-Jr".
- copywin() needs to disallow corner values equal to _maxx or _maxy, not
just less than. Reported by "Aleksandr".
- Misaligned soft-label keys in 4-4-4 mode. Reported by Werner Wenzel.
- Missing prototypes for bkgrnd() and bkgrndset().
- Missing WA_NORMAL and WA_ATTRIBUTES from the X/Open spec.
- keyname() and termname() now return static buffers, as documented.
- In the X11 port, due to (post-PDCurses-3.4) changes in Xt,
XtAppMainLoop() always hung. Fixed by re-implementing it within
PDCurses, basically.
- Fix blinking X11 cursor for clients that call move() more frequently
than cursorBlinkRate -- patch by Kevin Lamonte.
- Improved cursor rendering for X11, by John P. Hartmann.
- ALT key combos sometimes not reported in X11, per Mark Hessling et al.
- Support for XK_ISO_Left_Tab in X11, by John P. Hartmann.
- Support for "Super" keys in X11, by Bill Gray.
- Make xcurses-config include -DPDC_WIDE when appropriate, per M.H.
- The configure script and accompanying files, which were always
specific only to the X11 port (causing considerable confusion), have
been moved to the x11 directory.
- In SDL, SP->key_code wasn't being set for KEY_MOUSE events. Reported
by Bill Gray.
- SDL events need to keep pumping through non-input delays. (Really
messed up on current macOS before this change.)
- SDL2 is outperforming SDL1 by about 10x on the platforms I've tried
that support both, so I've removed Makefile.mng from the SDL1 port.
- Updated for the most current compilers, wherever possible; various
warning suppressions. All included makefiles were tested with their
respective compilers, shortly before release (including the POSIX
stuff on macOS with clang, and on Ubuntu Linux with gcc). The oldest
compiler I tested with was Turbo C++ 3.0, from 1992; the latest,
several compilers from 2017.
- Dropped support for LCC-Win32 -- the official site is shut down.
- Dropped support for Digital Mars -- not updated since 2014, limited
makefile, library missing some needed Windows APIs.
- Dropped MS C for DOS, and Cset/2 for OS/2.
- Dropped support for building DLLs with EMX.
- Minor code and makefile reorganization; mingwin32.mak merged into
gccwin32.mak (i.e. you can use it with both compilers). Some
contributions by Bill Gray and Simon Sobisch.
- Watcom makefile paths and option markers changed to Unix-friendly
style, after Tee-Kiah Chia.
- The *.def files are no longer needed, replaced by more PDCEX
declarations in the include files. After Bill Gray and Simon Sobisch.
- When building with DEBUG=Y, no longer strip the executables. After
Simon Sobisch.
- Hold debug file ("trace") open after traceon(), for greater
performance. Set PDC_TRACE_FLUSH to make it fflush() after each write
(slower but safer in case of a crash). Patch by Ellie Timoney.
- Since 3.2, the panel library was simply a copy of the main library.
This kludge is now dropped. (panel.h remains separate from curses.h.)
- Removed PDCurses.spec, and the RPM-building makefile option. I think
this is better left to the various package/distro maintainers.
- Various formatting corrections (e.g., trailing spaces stripped), and
variables renamed to avoid clashes. Some contributed by Stefan
Reinauer and Bill Gray.
- Various documentation corrections and updates. All documentation
"converted" to Markdown format (involving few actual changes -- mainly
the file extension), for better rendering on GitHub, SourceForge, etc.
Some contributed by Anatoly Techtonik.
- The "Win32" label is deprecated by Microsoft, and accordingly I've
replaced references in the documentation, although not yet changed the
filenames. The Windows console code can just as well be built for
64-bit (and always could be, AFAIK, although there are minor tweaks
to support it in this version).
- The ncurses_tests can now be built under SDL as well as X11. Also, all
our tests (still/again) build under recent ncurses.
- Put testcurs' "Output test" into real blink mode, if possible; and if
COLORS >= 16, use colors 0-15 directly in the color test, instead of
or'ing with A_BOLD to get the high-intensity colors.
- Renamed the (by now rather old) "newdemo" to "ozdemo".
- Moved from CVS to git; source is now on GitHub as well as SourceForge;
central site is now pdcurses.org.
See the git log for more details.
------------------------------------------------------------------------
PDCurses 4.0.2 - 2017 Sep 12 (Bill Gray fork)
=========================
(Note that history gets confused here; we have things happening
in two forks.)
Major new features:
-------------------
- New WinGUI (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 WinGUI and mostly supported in X11, SDL1 and SDL2.
- In WinGUI, one can choose a font, and both programmatic and user resizing
are supported.
(Recompiling is necessary to change the font in X11.)
- (WinGUI 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, WinGUI, 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 WinGUI and X11 of various shapes (this could be
extended to SDLx eventually).
- In X11 and WinGUI, 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 WinGUI.
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.
------------------------------------------------------------------------
PDCurses 3.4 - 2008-09-08
=========================
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.
------------------------------------------------------------------------
PDCurses 3.3 - 2007-07-11
=========================
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.
- Sped 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.
------------------------------------------------------------------------
PDCurses 3.2 - 2007-06-06
=========================
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.
------------------------------------------------------------------------
PDCurses 3.1 - 2007-05-03
=========================
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.
------------------------------------------------------------------------
PDCurses 3.0 - 2007-04-01
=========================
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 CVS 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 defines: _BCHAR, _GOCHAR, _STOPCHAR, _PRINTCHAR
_ENDLINE, _FULLWIN and _SCROLLWIN.
- 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.
------------------------------------------------------------------------
PDCurses 2.8 - 2006-04-01
=========================
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.
------------------------------------------------------------------------
PDCurses 2.7 - 2005-12-30
=========================
INTRODUCTION:
Hello all. As of a few weeks ago, I'm the new maintainer for PDCurses.
Here's a brief summary of changes in this release. (More details are
available in the CVS log and trackers on SourceForge.)
NEW FEATURES:
- 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.
BUGS FIXED:
- 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.
ACKNOWLEDGEMENTS:
- 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.
I've tested this version 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.
-- William McBrine
------------------------------------------------------------------------
PDCurses 2.6 - 2003-01-08
=========================
INTRODUCTION:
This release of PDCurses includes the following changes:
BUGS FIXED:
- 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.
NEW FEATURES:
- 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.
NEW COMPILER SUPPORT:
- lcc-win32 now works correctly
------------------------------------------------------------------------
PDCurses 2.5 - 2001-11-26
=========================
INTRODUCTION:
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.
BUGS FIXED:
- 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
NEW COMPILER SUPPORT:
- Add QNX-RTP port
------------------------------------------------------------------------
PDCurses 2.4 - 2000-01-17
=========================
INTRODUCTION:
This release of PDCurses includes the following changes:
- full support of X11 selection handling
- removed the need for the cursos2.h file
- enabled the "shifted" key on the numeric keypad
- added native clipboard support for X11, Win32 and OS/2
- added extra functions for obtaining internal PDCurses status
- added clipboard and key modifier tests in testcurs.c
- fixes for panel library
- key modifiers pressed by themselves are now returned as keys:
KEY_SHIFT_L KEY_SHIFT_R KEY_CONTROL_L KEY_CONTROL_R KEY_ALT_L KEY_ALT_R
This works on Win32 and X11 ports only
- Added X11 shared library support
- Added extra slk formats supported by ncurses
- Fixed bug with resizing the terminal when slk were on.
- Changed behavior of slk_attrset(), slk_attron() slk_attroff()
functions to work more like ncurses.
BUGS FIXED:
- some minor bug and portability fixes were included in this release
NEW FUNCTIONS:
- PDC_getclipboard() and PDC_setclipboard() for accessing the native
clipboard (X11, Win32 and OS/2)
- PDC_set_title() for setting the title of the window (X11 and Win32
only)
- PDC_get_input_fd() for getting the file handle of the PDCurses input
- PDC_get_key_modifiers() for getting the keyboard modifier settings at
the time of the last (w)getch()
- Xinitscr() (only for X11 port) which allows standard X11 switches to
be passed to the application
NEW COMPILER SUPPORT:
- MingW32 GNU compiler under Win95/NT
- Cygnus Win32 GNU compiler under Win95/NT
- Borland C++ for OS/2 1.0+
- lcc-win32 compiler under Win95/NT
ACKNOWLEDGEMENTS: (for this release)
- Georg Fuchs for various changes.
- Juan David Palomar for pointing out getnstr() was not implemented.
- William McBrine for fix to allow black/black as valid color pair.
- Peter Preus for pointing out the missing bccos2.mak file.
- Laura Michaels for a couple of bug fixes and changes required to
support Mingw32 compiler.
- Frank Heckenbach for PDC_get_input_fd() and some portability fixes and
the fixes for panel library.
- Matthias Burian for the lcc-win32 compiler support.
------------------------------------------------------------------------
PDCurses 2.3 - 1998-07-09
=========================
INTRODUCTION:
This release of PDCurses includes the following changes:
- added more System V R4 functions
- added Win32 port
- the X11 port is now fully functional
- the MS Visual C++ Win32 port now includes a DLL
- both the X11 and Win32 ports support the mouse
- the slk..() functions are now functional
- support for scrollbars under X11 are experimental at this stage
- long chtype extended to non-Unix ports
The name of the statically built library is pdcurses.lib (or
pdcurses.a). The name of the DLL import library (where applicable) is
curses.lib.
BUGS FIXED:
- some minor bugs were corrected in this release
NEW FUNCTIONS:
- slk..() functions
NEW COMPILER SUPPORT:
- MS Visual C++ under Win95/NT
- Watcom C++ under OS/2, Win32 and DOS
- two EMX ports have been provided:
- OS/2 only using OS/2 APIs
- OS/2 and DOS using EMX video support routines
EXTRA OPTIONS:
PDCurses recognizes two environment variables which determines the
initialization and finalization behavior. These environment variables
do not apply to the X11 port.
PDC_PRESERVE_SCREEN -
If this environment variable is set, PDCurses will not clear the screen
to the default white on black on startup. This allows you to overlay
a window over the top of the existing screen background.
PDC_RESTORE_SCREEN -
If this environment variable is set, PDCurses will take a copy of the
contents of the screen at the time that PDCurses is started; initscr(),
and when endwin() is called, the screen will be restored.
ACKNOWLEDGEMENTS: (for this release)
- Chris Szurgot for original Win32 port.
- Gurusamy Sarathy for some updates to the Win32 port.
- Kim Huron for the slk..() functions.
- Florian Grosse Coosmann for some bug fixes.
- Esa Peuha for reducing compiler warnings.
- Augustin Martin Domingo for patches to X11 port to enable accented
characters.
------------------------------------------------------------------------
PDCurses 2.2 - 1995-02-12
=========================
INTRODUCTION:
This release of PDCurses has includes a number of major changes:
- The portable library functions are now grouped together into single
files with the same arrangement as System V R4 curses.
- A panels library has been included. This panels library was written by
Warren Tucker.
- Quite a few more functions have been supplied by Wade Schauer and
incorporated into release 2.2. Wade also supplied the support for the
Microway NDP C/C++ 32 bit DOS compiler.
- The curses datatype has been changed from an unsigned int to a long.
This allows more attributes to be stored as well as increasing the
number of color-pairs from 32 to 64.
- Xwindows port (experimental at the moment).
BUGS FIXED:
- mvwin() checked the wrong coordinates
- removed DESQview shadow memory buffer checking bug in curses.h in
\#define for wstandout()
- lots of others I can't remember
NEW FUNCTIONS:
- Too many to mention. See intro.man for a complete list of the
functions PDCurses now supports.
COMPILER SUPPORT:
- DJGPP 1.12 is now supported. The run-time error that caused programs
to crash has been removed.
- emx 0.9a is supported. A program compiled for OS/2 should also work
under DOS if you use the VID=EMX switch when compiling. See the
makefile for details.
- The Microway NDP C/C++ DOS compiler is now supported. Thanks to Wade
Schauer for this port.
- The Watcom C++ 10.0 DOS compiler is now supported. Thanks to Pieter
Kunst for this port.
- The library now has many functions grouped together to reduce the size
of the library and to improve the speed of compilation.
- The "names" of a couple of the compilers in the makefile has changed;
CSET2 is now ICC and GO32 is now GCC.
EXTRA OPTIONS:
One difference between the behavior of PDCurses and Unix curses is the
attributes that are displayed when a character is cleared. Under Unix
curses, no attributes are displayed, so the result is always black.
Under PDCurses, these functions clear with the current attributes in
effect at the time. With the introduction of the bkgd functions, by
default, PDCurses clears using the value set by (w)bkgd(). To have
PDCurses behave the same way as it did before release 2.2, compile with
-DPDCURSES_WCLR
ACKNOWLEDGEMENTS: (for this release)
Pieter Kunst, David Nugent, Warren Tucker, Darin Haugen, Stefan Strack,
Wade Schauer and others who either alerted me to bugs or supplied
fixes.
------------------------------------------------------------------------
PDCurses 2.1 - 1993-06-20
=========================
INTRODUCTION:
The current code contains bug fixes for the DOS and OS/2 releases and
also includes an alpha release for Unix. The Unix release uses another
public domain package (mytinfo) to handle the low-level screen writes.
mytinfo was posted to comp.sources.unix (or misc) in December 1992 or
January 1993. Unless you are a glutton for punishment I would recommend
you avoid the Unix port at this stage.
The other major addition to PDCurses is the support for DJGPP (the DOS
port of GNU C++). Thanks to David Nugent <davidn@csource.oz.au>.
Other additions are copywin() function, function debugging support and
getting the small and medium memory models to work. The testcurs.c demo
program has also been changed significantly and a new demo program,
tuidemo, has been added.
Some people have suggested including information on where to get dmake
from. oak.oakland.edu in /pub/msdos/c
OTHER NOTES:
Under DOS, by default, screen writes to a CGA monitor are done via the
video BIOS rather than by direct video memory writes. This is due to
the CGA "snow" problem. If you have a CGA monitor and do not suffer
from snow, you can compile private\_queryad.c with CGA_DIRECT defined.
This will then use cause PDCurses to write directly to the CGA video
memory.
Function debugging: Firstly to get function debugging, you have to
compile the library with OPT=N in the makefile. This also turns on
compiler debugging. You can control when you want PDCurses to write to
the debug file (called trace in the current directory) by using the
functions traceon() and traceoff() in your program.
Microsoft C 6.00 Users note:
----------------------------
With the addition of several new functions, using dmake to compile
PDCurses now causes the compiler to run "out of heap space in pass 2".
Using the 6.00AX version (DOS-Extended) to compile PDCurses fixes this
problem; hence the -EM switch.
Functional changes
------------------
Added OS/2 DLL support.
A few curses functions have been fixed to exhibit their correct
behavior and make them more functionally portable with System V
curses. The functions that have changed are overlay(), overwrite() and
typeahead.
overlay() and overwrite()
Both of theses functions in PDCurses 2.0 allowed for one window to be
effectively placed on top of another, and the characters in the first
window were overlaid or overwritten starting at 0,0 in both windows.
This behavior of these functions was not correct. These functions only
operate on windows that physically overlap with respect to the
displayed screen. To achieve the same functionality as before, use the
new function copywin(). See the manual page for further details.
typeahead()
This function in PDCurses 2.0 effectively checked to see if there were
any characters remaining in the keyboard buffer. This is not the
behavior exhibited by System V curses. This function is intended
purely to set a flag so that curses can check while updating the
physical screen if any keyboard input is pending. To achieve the same
effect with typeahead() under PDCurses 2.1 the following code should be
used.
In place of...
while(!typeahead(stdin))
{
/* do something until any key is pressed... */
}
use...
/* getch() to return ERR if no key pending */
nodelay(stdscr,TRUE);
while(getch() == (ERR))
{
/* do something until any key is pressed... */
}
ACKNOWLEDGEMENTS: (in no particular order)
Jason Shumate, Pieter Kunst, David Nugent, Andreas Otte, Pasi
Hamalainen, James McLennan, Duane Paulson, Ib Hojme
Apologies to anyone I may have left out.
------------------------------------------------------------------------
PDCurses 2.0 - 1992-11-23
=========================
INTRODUCTION:
Well, here it finally is; PDCurses v2.0.
PDCurses v2.0 is an almost total rewrite of PCcurses 1.4 done by John
'Frotz' Fa'atuai, the previous maintainer. It adds support for OS/2 as
well as DOS.
This version has been tested with Microsoft C v6.0, QuickC v2.0 and
Borland C++ 2.0 under DOS and Microsoft C v6.0 and TopSpeed c v3.02
under OS/2 2.0. Also the library has been compiled successfully with
emx 0.8e, C Set/2 and Watcom 9. Most testing was done with the large
memory model, where applicable. The large memory model is probably the
best model to use.
The amount of testing has not been as extensive as I would have liked,
but demands on releasing a product have outweighed the product's
quality. Nothing new with that !! Hopefully with wider circulation,
more bugs will be fixed more quickly.
I have included just 1 makefile which is suitable for dmake 3.8 for
both DOS and OS/2. The makefile does not rely on customization of the
dmake.ini file.
If you discover bugs, and especially if you have fixes, please let me
know ASAP.
The source to the library is distributed as a zip file made with zip
1.9. You will need Info-ZIP unzip 5.0 to unzip. Follow the directions
below to compile the library.
DIRECTIONS:
1. Create a new directory in which to unzip pdcurs20.zip. This will
create a curses directory and a number of subdirectories containing
source code for the library and utilities and the documentation.
2. Make changes to the makefile where necessary:
Change the MODEL or model macro to the appropriate value (if it
applies to your compiler). Use model for Borland compilers.
Change any paths in the defined macros to be suitable for your
compiler.
3. Invoke DMAKE [-e environment_options] [target]
where environment_options are:
OS (host operating system)
COMP (compiler)
OPT (optimized version or debug version) - optional. default Y
TOS (target operating system) - optional. default OS
see the makefile for valid combinations
targets: all, demos, lcursesd.lib, manual...
NB. dmake is case sensitive with targets, so those environments that
use an upper case model value (eg MSC) MUST specify the library
target as for eg. Lcursesd.lib
The makefile is by default set up for Borland C++. The use of -e
environment_options override these defaults. If you prefer, you can
just change the defaults in the makefile and invoke it without the
-e switch.
OTHER NOTES:
The documentation for the library is built into each source file, a
couple of specific doc files and the header files. A program is
supplied (manext) to build the manual. This program gets compiled when
you build the documentation.
To generate the library response file correctly, I had to write a quick
and dirty program (buildlrf) to achieve this. Originally the makefiles
just had statements like: "echo -+$(OBJ)\$* & >> $(LRF)" which appended
a suitable line to the response file. Unfortunately under some
combinations of makefiles and command processors (eg. nmake and 4DOS)
the & would get treated as stderr and the echo command would fail.
The original source for PDCurses that I received from the previous
maintainer contained support for the FLEXOS operating system. Not
having access to it, I could not test the changes I made so its support
has fallen by the wayside. If you really need to have PDCurses running
under FLEXOS, contact me and I will see what can be arranged.
Under DOS, by default, screen writes to a CGA monitor are done via the
video BIOS rather than by direct video memory writes. This is due to
the CGA "snow" problem. If you have a CGA monitor and do not suffer
from snow, you can compile private\_queryad.c with CGA_DIRECT defined.
This will then use cause PDCurses to write directly to the CGA video
memory.
Added System V color support.
COMPILER-SPECIFIC NOTES:
Microsoft C
-----------
It is possible with MSC 6.0 to build the OS/2 libraries and demo
programs from within DOS. This is the only case where it is possible to
specify the value of TOS on the command line to be OS2 and the value of
OS be DOS.
C Set/2
-------
I have only tested the library using the migration libraries. I doubt
that the demo programs will work without them.
emx
---
Testing has been done with 0.8e of emx together with the 16_to_32
libraries. The emx\lib directory should include the vio32.lib and
kbd32.lib libraries from the 16_to_32 package.
BUGS and UNFINISHED BUSINESS:
- PDC_set_ctrl_break() function does not work under OS/2.
- win_print() and PDC_print() do not work under OS/2.
- The file todo.man in the doc directory also lists those functions of
System V 3.2 curses not yet implemented. Any volunteers?
ACKNOWLEDGEMENTS:
- John 'Frotz' Fa'atuai, the previous maintainer for providing an
excellent base for further development.
- John Burnell <johnb@kea.am.dsir.govt.nz>, for the OS/2 port.
- John Steele, Jason (finally NOT a John) Shumate....
for various fixes and suggestions.
- Eberhardt Mattes (author of emx) for allowing code based on his
C library to be included with PDCurses.
- Several others for their support, moral and actual.
-- Mark Hessling
------------------------------------------------------------------------
PDCurses 2.0Beta - 1991-12-21
=============================
Changed back from short to int. (int is the correct size for the default
platform. Short might be too short on some platforms. This is more
portable. I, also, made this mistake.)
Many functions are now macros. If you want the real thing, #undef the
macro. (X/Open requirement.)
Merged many sources into current release.
Added many X/Open routines (not quite all yet).
Added internal documentation to all routines.
Added a HISTORY file to the environment.
Added a CONTRIB file to the environment.
------------------------------------------------------------------------
PDCurses 1.5Beta - 1990-07-14
=============================
Added many levels of compiler support. Added mixed prototypes for all
"internal" routines. Removed all assembly language. Added EGA/VGA
support. Converted all #ifdef to #if in all modules except CURSES.H and
CURSPRIV.H. Always include ASSERT.H. Added support for an external
malloc(), calloc() and free(). Added support for FAST_VIDEO
(direct-memory writes). Added various memory model support (for
FAST_VIDEO). Added much of the December 1988 X/Open Curses
specification.
-- John 'Frotz' Fa'atuai
------------------------------------------------------------------------
PCcurses 1.4 - 1990-01-14
=========================
In PCcurses v.1.4, both portability improvements and bugfixes have
been made. The files have been changed to allow lint-free compilation
with Microsoft C v.5.1, and with Turbo C v.2.0. The source should still
compile without problems on older compilers, although this has not been
verified.
The makefiles have been changed to suit both the public release and
the author, who maintains a special kind of libraries for himself. In
the case of Microsoft C, changes were done in the makefile to lower the
warning level to 2 (was 3). This was to avoid ANSI warnings which are
abundant because PCcurses does not attempt to follow strict ANSI C
standard.
BUG FIXES FROM V.1.3 TO V.1.4:
!!!IMPORTANT CHANGE!!!
The definitions for OK and ERR in curses.h were exchanged. This was
done to be more consistent with UNIX versions. Also, it permits
functions like newwin() and subwin() to return 0 (=NULL) when they fail
due to memory shortage. This incompatibility with UNIX curses was
pointed out by Fred C. Smith. If you have tested success/failure by
comparisons to anything other than ERR and OK, your applications will
need to be be changed on that point. Sorry... but presumably most of you
used the symbolic constants?
(END OF IMPORTANT CHANGE)
Fred also pointed out a bug in the file update.c. The bug caused the
first character printed after 'unauthorized' screen changes (like during
a shell escape, for example) to be placed at the wrong screen position.
This happened even if the normal precautions (clear / touch / refresh)
were taken. The problem has now been fixed.
PCcurses is currently also being used on a 68000 system with
hard-coded ESCape sequences for ANSI terminals. However, ints used by
the 68000 C compiler are 32 bits. Therefore ints have been turned into
shorts wherever possible in the code (otherwise all window structures
occupy twice as much space as required on the 68000). This does not
affect PC versions since normally both ints and shorts are 16 bits for
PC C compilers.
At some places in the source code there are references made to the
68000 version. There are also a makefile, a curses68.c file, and a
curses68.cmd file. These are for making, low-level I/O, and linking
commands when building the 68000 version. These files are probably
useful to no-one but the author, since it is very specific for its
special hardware environment. Still in an effort to keep all
curses-related sources in one place they are included. Note however that
PCcurses will not officially support a non-PC environment.
The file cursesio.c, which was included in the package at revision
level 1.2, and which was to be an alternative to the cursesio.asm file,
has been verified to behave incorrectly in the function _curseskeytst().
The problem was that the value of 'cflag' does not contain the proper
data for the test that is attempted. Furthermore, neither Turbo C or
Microsoft C allows any way to return the data that is needed, and
consequently you should not use cursesio.c. The best solution is to
simply use the ASM version. In v.1.2 and v.1.3, the user could edit the
makefile to select which version he wanted to use. The makefiles in
v.1.4 have removed this possibility forcing the use of the ASM file, and
cursesio.c has been dropped from the distribution.
A bug in the wgetstr() function caused PCcurses to echo characters
when reading a keyboard string, even if the echo had been turned off.
Thanks to Per Foreby at Lund University, Sweden, for this. Per also
reported bugs concerning the handling of characters with bit 8 set.
Their ASCII code were considered as lower than 32, so they were erased
etc. like control characters, i.e. erasing two character positions. The
control character test was changed to cope with this.
The overlay() and overwrite() functions were changed so that the
overlaying window is positioned at its 'own' coordinates inside the
underlying window (it used to be at the underlying window's [0,0]
position). There is some controversy about this - the documentation for
different curses versions say different things. I think the choice made
is the most reasonable.
The border() and wborder() functions were changed to actually draw a
border, since this seems to be the correct behavior of these functions.
They used to just set the border characters to be used by box(). These
functions are not present in standard BSD UNIX curses.
The subwin() function previously did not allow the subwindow to be as
big as the original window in which it was created. This has now been
fixed. There was also the problem that the default size (set by
specifying numlines or numcols (or both) as 0 made the resulting actual
size 1 line/column too small.
There were a few spelling errors in function names, both in the
function declarations and in curses.h. This was reported by Carlos
Amaral at INESC in Portugal. Thanks! There was also an unnecessary (but
harmless) parameter in a function call at one place.
------------------------------------------------------------------------
PCcurses 1.3 - 1988-10-05
=========================
The file 'border.c' is now included. It allows you to explicitly
specify what characters should be used as box borders when the box()
functions are called. If the new border characters are non-0, they
override the border characters specified in the box() call. In my
understanding, this functionality is required for AT&T UNIX sV.3
compatibility. Thanks for this goes to Tony L. Hansen
(hansen@pegasus.UUCP) for posting an article about it on Usenet
(newsgroup comp.unix.questions; his posting was not related at all to
PCcurses).
The only other difference between v.1.2 and v.1.3 is that the latter
has been changed to avoid warning diagnostics if the source files are
compiled with warning switches on (for Microsoft this means '-W3', for
Turbo C it means '-w -w-pro'). Of these, the Turbo C warning check is
clearly to be used rather than Microsoft, even if neither of them comes
even close to a real UNIX 'lint'. Some of the warnings in fact indicated
real bugs, mostly functions that did not return correct return values or
types.
The makefiles for both MSC and TRC have been modified to produce
warning messages as part of normal compilation.
------------------------------------------------------------------------
PCcurses 1.2 - 1988-10-02
=========================
The changes from v.1.1 to v.1.2 are minor. The biggest change is that
there was a bug related to limiting the cursor movement if the
application tried to move it outside the screen (something that should
not be done anyway). Such erroneous application behavior is now handled
appropriately.
All modules have been changed to have a revision string in them, which
makes it easier to determine what version is linked into a program (or
what library version you have).
There is now a 'cursesio.c' file. That file does the same as
'cursesio.asm' (i.e. it provides the interface to the lower-level system
I/O routines). It is written in C and thus it is (possibly) more
portable than the assembler version (but still not so portable since it
uses 8086 INT XX calls directly). When one creates new curses libraries,
one chooses whether to use the assembler or the C version of cursesio.
The choice is made by commenting out the appropriate dependencies for
cursesio.obj, near the end of the makefiles.
There is now a 'setmode.c' file. That file contains functions that
save and restore terminal modes. They do it into other variables than do
savetty() and resetty(), so one should probably use either
savetty()/resetty() or the new functions only - and not mix the both
ways unless one really knows what one does.
Diff lists vs v.1.0 are no longer included in the distribution. The
make utility still is. PCcurses v.1.2 still compiles with Microsoft C
v.4.0, and with Borland Turbo C v.1.0. There is as far as I know no
reason to believe that it does not compile under Microsoft C v.3.0 and
5.x, or Turbo C v.1.5, but this has not been tested.
There are two makefiles included, one for Microsoft C, one for Turbo
C. They are both copies of my personal makefiles, and as such they
reflect the directory structure on my own computer. This will have to be
changed before you run make. Check $(INCDIR) and $(LIBDIR) in
particular, and make the choice of ASM or C cursesio version as
mentioned above (the distribution version uses the C version of
cursesio).
The manual file (curses.man) has been changed at appropriate places.
I would like to thank the following persons for their help:
Brandon S. Allbery (alberry@ncoast.UUCP)
for running comp.binaries.ibm.pc (at that time)
and comp.source.misc.
Steve Balogh (Steve@cit5.cit.oz.AU)
for writing a set of manual pages and posting
them to the net.
Torbjorn Lindh
for finding bugs and suggesting raw
character output routines.
Nathan Glasser (nathan@eddie.mit.edu)
for finding and reporting bugs.
Ingvar Olafsson (...enea!hafro!ingvar)
for finding and reporting bugs.
Eric Rosco (...enea!ipmoea!ericr)
for finding and reporting bugs.
Steve Creps (creps@silver.bacs.indiana.edu)
for doing a lot of work - among others
posting bug fixes to the net, and writing
the new cursesio.c module.
N. Dean Pentcheff (dean@violet.berkeley.edu)
for finding bugs and rewriting cursesio.asm
for Turbo 'C' 1.5.
Finally, Jeff Dean (parcvax,hplabs}!cdp!jeff)
(jeff@ads.arpa)
has had a shareware version of curses deliverable since
about half a year before I released PCcurses 1.0 on Use-
Net. He is very concerned about confusion between the two
packages, and therefore any references on the network
should make clear whether they reference Dean's PCcurses
or Larsson's PCcurses.
------------------------------------------------------------------------
PCcurses 1.1 - 1988-03-06
=========================
The changes from v.1.0 to v.1.1 are minor. There are a few bug fixes,
and new (non-portable) functions for verbatim IBM character font display
have been added (in charadd.c and charins.c). The manual file
(curses.man) has been changed at appropriate places.
In the file v10tov11.dif there are listings of the differences between
version 1.0 and 1.1. The diff listings are in UNIX diff(1) format.
Version 1.1 compiles with Turbo C v.1.0, as well as Microsoft C v.3.0
and v.4.0. On the release disk there is a make.exe utility which is very
similar to UNIX make (If the package was mailed to you, the make utility
will be in uuencoded format - in make.uu - and must be uudecoded first).
It is much more powerful than Microsoft's different MAKEs; the latter
ones will NOT generate libraries properly if used with the PCcurses
makefiles.
There are three makefiles:
makefile generic MSC 3.0 makefile
makefile.ms MSC 4.0 makefile
makefile.tc Turbo C 1.0 makefile
To make a library with for example Turbo C, make directories to hold
.H and .LIB files (these directories are the 'standard places'), edit
makefile.tc for this, and type
make -f makefile.tc all
and libraries for all memory models will be created in the .LIB
directory, while the include files will end up in the .H directory. Also
read what is said about installation below!
------------------------------------------------------------------------
PCcurses 1.0 - 1987-08-24
=========================
This is the release notes for the PCcurses v.1.0 cursor/window control
package. PCcurses offers the functionality of UNIX curses, plus some
extras. Normally it should be possible to port curses-based programs
from UNIX curses to PCcurses on the IBM PC without changes. PCcurses is
a port/ rewrite of Pavel Curtis' public domain 'ncurses' package. All
the code has been re-written - it is not just an edit of ncurses (or
UNIX curses). I mention this to clarify any copyright violation claims.
The data structures and ideas are very similar to ncurses. As for UNIX
curses, I have not even seen any sources for it.
For an introduction to the use of 'curses' and its derivatives, you
should read 'Screen Updating and Cursor Movement Optimization: A Library
Package' by Kenneth C. R. C. Arnold, which describes the original
Berkeley UNIX version of curses. It is available as part of the UNIX
manuals. The other source of information is 'The Ncurses Reference
Manual' by Pavel Curtis. The latter is part of Curtis' ncurses package.
The only other documentation provided is a 'man' page which describes
all the included functions in a very terse way. In the sources, each
function is preceded by a rather thorough description of what the
function does. I didn't have time to write a nice manual/tutorial -
sorry.
PCcurses is released as a number of source files, a man page, and a
make file. A uuencoded copy of a 'make' utility, and a manpage for the
'make' is also provided to make it easier to put together PCcurses
libraries. Even if you are not interested in PCcurses, it may be
worthwhile to grab the make.
The makefile assumes the presence of the Microsoft C compiler (3.0 or
4.0), Microsoft MASM and LIB, plus some MS-DOS utilities. The reason for
supplying MAKE.EXE is that the Microsoft 'MAKE:s' are much inferior to a
real UNIX make. The supplied make is a port of a public domain make,
published on Usenet. It is almost completely compatible with UNIX make.
When generating the curses libraries, the makefile will direct make to
do some directory creating and file copying, and then re-invoke itself
with new targets. The workings of the makefile are not absolutely
crystal clear at first sight... just start it and see what it does.
For portability, the curses libraries depend on one assembler file for
access to the BIOS routines. There is no support for the EGA, but both
CGA, MGA, and the HGA can be used. The libraries are originally for
Microsoft C, but all C modules should be portable right away. In the
assembler file, segment names probably need to be changed, and possibly
the parameter passing scheme. I think Turbo C will work right away - as
far as I understand, all its conventions are compatible with Microsoft
C.
There are some parts left out between ncurses and PCcurses. One is the
support for multiple terminals - not very interesting on a PC anyway.
Because we KNOW what terminal we have, there is no need for a termcap or
terminfo library. PCcurses also has some things that neither curses nor
ncurses have. Compared to the original UNIX curses, PCcurses has lots of
extras.
The BIOS routines are used directly, which gives fast screen updates.
PCcurses does not do direct writes to screen RAM - in my opinion it is
a bit ugly to rely that much on hardware compatibility. Anyone could fix
that, of course...
One of the more serious problems with PCcurses is the way in which
normal, cbreak, and raw input modes are done. All those details are in
the 'charget' module - I do raw I/O via the BIOS, and perform any
buffering myself. If an application program uses PCcurses, it should do
ALL its I/O via PCcurses calls, otherwise the mix of normal and
PCcurses I/O may mess up the display. I think my code is reasonable...
comments are welcome, provided you express them nicely...
To install, copy all files to a work directory, edit 'makefile' to
define the standard include and library file directory names of your
choice (these directories must exist already, and their path names must
be relative to the root directory, not to the current one). You must
also run uudecode on make.uu, to generate MAKE.EXE. You can do that on
your PC, if you have uudecode there, otherwise you can do it under UNIX
and do a binary transfer to the PC. When you have MAKE.EXE in your work
directory (or in your /bin directory), type make.
Make will now create 4 sub-directories (one for each memory model),
copy some assembler include files into them, copy two include files to
your include directory, CHDIR to each sub-directory and re-invoke itself
with other make targets to compile and assemble all the source files
into the appropriate directories. Then the library manager is run to
create the library files in your desired library directory. Presto!
If you only want to generate a library for one memory model, type
'make small', 'make large', etc. The name of the memory model must be in
lower case, like in the makefile.
I think the package is fairly well debugged - but then again, that's
what I always think. It was completed in May-87, and no problems found
yet. Now it's your turn... Comments, suggestions and bug reports and
fixes (no flames please) to
-- Bjorn Larsson