1 PDCurses 3.4 - 2008/09/08
2 =========================
4 Nothing much new this time, but I've been sitting on some bug fixes for
5 almost a year, so it's overdue. Apart from bugs, the main changes are in
10 - setsyx() is now a function rather than a macro.
14 - In x11, the xc_atrtab table size was under-calculated by half,
15 resulting in crashes at (oddly) certain line counts. (It should've
16 crashed a lot more.) Reported by Mark Hessling.
18 - Test for moved cursor was omitting the window origin offset. Reported
21 - Is DOS and OS/2, the value for max items in key_table was still wrong.
24 - Changed isendwin() so it won't crash after delscreen().
26 - Ensure zero-termination in PDC_mbstowcs() and PDC_wcstombs().
28 - Disable QuickEdit Mode when enabling mouse input for the Win32
29 console; reported by "Zalapkrakna".
31 - Fix for building under Innotek C (I hope). Report by Elbert Pol, fix
32 courtesy of Paul Smedley.
34 - Unified exports list with no duplicates -- pdcurses.def is now built
35 from components at compile time.
37 - Don't install curspriv.h, and don't include it with binary
40 - Building DLLs with LCC is no longer supported, due to the primitive
41 nature of its make.exe.
43 - Export the terminfo stub functions from the DLLs, too.
45 - Added support for Apple's ".dylib" in configure. Suggested by Marc
46 Vaillant (who says it's needed with OS 10.5.)
48 - In sdl1/Makefile.mng, ensure that CC is set.
50 - In the gcc makefiles, "$?" didn't really have the desired effect --
51 _all_ the dependencies showed up on the command line, including
52 curses.h, and pdcurses.a twice. And apparently, this can mess up some
53 old version (?) of MinGW. So, revert to spelling out "tuidemo.o
54 tui.o". Reported by "Howard L."
56 - Extensive documentation revision and reorganizing. More to do here.
57 For example, I moved the build instructions from INSTALL (which never
58 really described installation) to the platform-specific READMEs.
60 - New indentation standard: four spaces, no tabs.
62 ------------------------------------------------------------------------
64 PDCurses 3.3 - 2007/07/11
65 =========================
67 This release adds an SDL backend, refines the demos, and is faster in
72 - SDL port. See INSTALL, doc/sdl.txt and sdl1/* for details.
74 - Double-buffering -- minimize screen writes by checking, in doupdate()
75 and wnoutrefresh(), whether the changes to curscr are really changes.
76 In most cases, this makes no difference (writes were already limited
77 to areas marked as changed), but it can greatly reduce the overhead
78 from touchwin(). It also helps if you have small, separated updates on
81 - The PDC_RGB colors can now be used, or not, with any platform (as long
82 as the same options are used when compiling both the library and
83 apps). This may help if you have apps that are hardwired to assume
86 - Restored the use_default_colors() stuff from the ncurses versions of
87 the rain and worm demos, to make them "transparent" (this is useful
88 now, with the SDL port); added transparency to newdemo.
90 - Added setlocale() to tuidemo, to make it easier to browse files with
93 - Sped up firework demo by replacing unneeded clear() and init_pair()
96 - Allow exit from ptest demo by typing 'q'.
98 - New functions for implementors: PDC_pair_content() and PDC_init_pair()
99 (the old pdc_atrtab stuff was arguably the last remnant of code in the
100 pdcurses directory that was based on platform details).
104 - Implicit wrefresh() needs to be called from wgetch() when the window's
105 cursor position is changed, even if there are no other changes.
107 - Set SP->audible on a per-platform basis, as was documented in
108 IMPLEMNT, but not actually being done.
110 - Minor tweaks for efficiency and readability, notably with wscrl().
112 - tuidemo didn't work correctly on monochrome screens when A_COLOR was
113 defined -- the color pair numbers appeared as the corresponding
114 character; also, the input box was (I now realize) broken with ncurses
115 since our 2.7, and broke more subtly with PDCurses' new implicit
116 refresh handling; also, the path to the default file for the Browse
117 function was a bit off.
119 - Assume in the demos that curs_set() is always available -- there's no
120 good test for this, and the existing tests were bogus.
122 - Made the command-line parameter for ptest work. (If given an argument,
123 it delays that number of milliseconds between changes, instead of
124 waiting for a key, and automatically loops five times.)
126 - Building the Win32 DLL with MinGW or Cygwin wouldn't work from outside
127 the platform directory.
129 - Building the X11 port with Cygwin required manually editing the
130 Makefile after configuring; no longer. Reported by Warren W. Gay.
132 - Minor tightening of configure and makefiles.
134 - Bogus references to "ACS_BLCORNER" in the border man page. Reported by
137 - slk_wlabel() was not documented.
141 - Changed RCSIDs to not end with a semicolon -- avoids warnings when
142 compiling with the -pedantic option.
144 - Merged latin-1.txt into x11.txt.
146 - Updated config.guess and config.sub to more recent versions.
148 ------------------------------------------------------------------------
150 PDCurses 3.2 - 2007/06/06
151 =========================
153 This release mainly covers changes to the build process, along with a
154 few structural changes.
158 - The panel library has been folded into the main library. What this
159 means is that you no longer need to specify "-lpanel" or equivalent
160 when linking programs that use panel functionality with PDCurses;
161 however, panel.lib/.a is still provided (as a copy of pdcurses.lib/.a)
162 so that you can, optionally, build your projects with no changes. It
163 also means that panel functionality is available with the DLL or
164 shared library. Note that panel.h remains separate from curses.h.
166 - Setting the PDCURSES_SRCDIR environment variable is no longer required
167 before building, unless you want to build in a location other than the
168 platform directory. (See INSTALL.)
170 - MinGW and Cygwin makefiles support building DLLs, via the "DLL=Y"
171 option. Partly due to Timofei Shatrov.
173 - Support for the Digital Mars compiler.
175 - Watcom makefiles now use the "loaddll" feature.
179 - Eliminated the platform defines (DOS, WIN32, OS2, XCURSES) from
180 curses.h, except for X11-specific SCREEN elements and functions.
181 Dynamically-linked X11 apps built against an old version will have
182 their red and blue swapped until rebuilt. (You can define PDC_RGB to
183 build the library with the old color scheme, but it would also have to
184 be defined when building any new app.) Any app that depends on
185 PDCurses to determine the platform it's building on will have to make
188 - Documentation cleanup -- added more details; removed some content that
189 didn't apply to PDCurses; moved the doc-building tool to the doc
190 directory; changed *.man to *.txt.
192 - The EMX makefile now accepts "DLL=Y", builds pdcurses.dll instead of
193 curses.dll, builds either the static library or the DLL (not both at
194 once), and links all the demos with the DLL when building it.
196 - In Win32, read the registry only when needed: when init_color() or
197 color_content() is called, instead of at startup.
199 - A few additional consts in declarations.
201 - The Win32 compilers that build DLLs now use common .def files.
203 - panel.h functions sorted by name, as with other .h files; curses.h is
204 no longer included by repeated inclusions of panel.h or term.h.
206 - Simplified Borland makefiles.
208 - Makefile.aix.in depended on a file, xcurses.exp, that was never there.
209 This problem was fixed as part of the change to common .def files;
210 however, I still haven't been able to test building on AIX.
212 ------------------------------------------------------------------------
214 PDCurses 3.1 - 2007/05/03
215 =========================
217 Primarily clipboard-related fixes, and special UTF-8 support.
221 - "Force UTF-8" mode, a compile-time option to force the use of UTF-8
222 for multibyte strings, instead of the system locale. (Mainly for
223 Windows, where UTF-8 doesn't work well in the console.) See INSTALL.
225 - Multibyte string support in PDC_*clipboard() functions, and in Win32's
228 - Added the global string "ttytype", per other curses implementations,
229 for compatibility with old BSD curses.
231 - Real functions for the "quasi-standard aliases" -- crmode(),
232 nocrmode(), draino(), resetterm(), fixterm() and saveterm().
233 (Corresponding macros removed.)
237 - In Win32, under NT-family OSes, the scrollback buffer would be
238 restored by endwin(), but would not be turned off again when resuming
239 curses after an endwin(). The result was an odd, partly-scrolled-up
240 display. Now, the buffer is toggled by PDC_reset_prog_mode() and
241 PDC_reset_shell_mode(), so it's properly turned off when returning
244 - In 3.0, selection in X11 didn't work. (Well, the selecting worked, but
245 the pasting elsewhere didn't.) This was due to the attempted fix
246 "don't return selection start as a press event," so that's been
249 - PDC_setclipboard() was locking up in X11. Reported by Mark Hessling.
251 - Missing underscore in the declaration of XC_say() prevented
252 compilation with PDCDEBUG defined. Reported by M.H.
254 - Off-by-one error in copywin() -- the maximum coordinates for the
255 destination window should be inclusive. Reported by Tiago Dionizio.
257 - Start in echo mode, per X/Open. Reported by T.D.
259 - Strip leading and trailing spaces from slk labels, per a literal
260 reading of X/Open. Suggested by Alexey Miheev (about ncurses, but it
263 - The #endif for __PDCURSES__ needs to come _after_ the closing of the
264 extern "C". This has been broken since June 2005. Fortunately (?), it
265 only shows up if the file is included multiple times, and then only in
266 C++. Reported on the DOSBox forums.
268 - Use CF_OEMTEXT instead of CF_TEXT in the narrow versions of the
269 clipboard functions in Win32, to match the console.
271 - Changed the format of the string returned from longname().
273 - In the clipboard test in the testcurs demo, use a single mvprintw() to
274 display the return from PDC_getclipboard(), instead of a loop of
275 addch(), which was incompatible with multibyte strings.
277 - Moved has_key() into the keyname module, and documented it.
279 - Moved RIPPEDOFFLINE to curspriv.h.
283 ------------------------------------------------------------------------
285 PDCurses 3.0 - 2007/04/01
286 =========================
288 The focuses for this release are X/Open conformance, i18n, better color
289 support, cleaner code, and more consistency across platforms.
291 This is only a brief summary of the changes. For more details, consult
296 - An almost complete implementation of X/Open curses, including the
297 wide-character and attr_t functions (but excluding terminfo). The
298 wide-character functions work only in Win32 and X11, for now, and
299 require building the library with the appropriate options (see
300 INSTALL). Note that this is a simplistic implementation, with exactly
301 one wchar_t per cchar_t; the only characters it handles properly are
302 those that are one column wide.
304 - Support for X Input Methods in the X11 port (see INSTALL). When built
305 this way, the internal compose key support is disabled in favor of
306 XIM's, which is a lot more complete, although you lose the box cursor.
308 - Multibyte character support in the non-wide string handling functions,
309 per X/Open. This only works when the library is built with wide-
310 character support enabled.
312 - Mouse support for DOS and OS/2. The DOS version includes untested
313 support for scroll wheels, via the "CuteMouse" driver.
315 - An ncurses-compatible mouse interface, which can work in parallel with
316 the traditional PDCurses mouse interface. See the man page (or
317 mouse.c) for details.
319 - DOS and OS/2 can now return modifiers as keys, as in Win32 and X11.
321 - COLORS, which had been fixed at 8, is now either 8 or 16, depending on
322 the terminal -- usually 16. When it's 8, blinking mode is enabled
323 (controlled as before by the A_BLINK attribute); when it's 16, bright
324 background colors are used instead. On platforms where it can be
325 changed, the mode is toggled by the new function PDC_set_blink().
326 PDCurses tries to set PDC_set_blink(FALSE) at startup. (In Win32, it's
327 always set to FALSE; in DOS, with other than an EGA or VGA card, it
328 can't be.) Also, COLORS is now set to 0 until start_color() is called.
330 - Corresponding to the change in COLORS, COLOR_PAIRS is now 256.
332 - Working init_color() and color_content(). The OS/2 version of
333 init_color() works only in a full-screen session; the Win32 version
334 works only in windowed mode, and only in NT-family OSes; the DOS
335 version works only with VGA adapters (real or simulated). The Win32
336 version is based mostly on James Brown's setconsoleinfo.c
339 - use_default_colors(), assume_default_colors(), and curses_version(),
342 - Added global int TABSIZE, after ncurses and Solaris curses; removed
343 window-specific _tabsize.
345 - Logical extension to the wide-character slk_ funcs: slk_wlabel(), for
346 retrieving the label as a wide-character string.
348 - A non-macro implementation of ncurses' wresize().
350 - Working putwin(), getwin(), scr_dump() and scr_restore().
352 - A working acs_map[]. Characters from the ACS are now stored in window
353 structures as a regular character plus the A_ALTCHARSET attribute, and
354 rendered to the ACS only when displayed. (This allows, for example,
355 the correct display on one platform of windows saved from another.)
357 - In X11, allow selection and paste of UTF8_STRING.
359 - The testcurs demo now includes a color chart and init_color() test, a
360 wide character input test, a display of wide ACS characters with
361 sample Unicode text, a specific test of flash(), more info in the
362 resize test, and attempts to change the width as well as the height.
364 - Command-line option for MSVC to build DLLs (see INSTALL). Also, the
365 naming distinction for DLLs ("curses" vs. "pdcurses") is abandoned,
366 and either the static lib or DLL is built, not both at once (except
369 - For backwards compatibility, a special module just for deprecated
370 functions -- currently PDC_check_bios_key(), PDC_get_bios_key(),
371 PDC_get_ctrl_break() and PDC_set_ctrl_break(). These shouldn't be used
372 in applications, but currently are... in fact, all the "private"
373 functions (in curspriv.h) are subject to change and should be avoided.
375 - A new document, IMPLEMNT, describing PDCurses' internal functions for
376 those wishing to port it to new platforms.
378 - Mark Hessling has released the X11 port to the public domain.
379 (However, x11/ScrollBox* retain their separate copyright and MIT-like
384 - Most of the macros have been removed (along with the NOMACROS ifdef).
385 The only remaining ones are those which have to be macros to work, and
386 those that are required by X/Open to be macros. There were numerous
387 problems with the macros, and no apparent reason to keep them, except
388 tradition -- although it was PCcurses 1.x that first omitted them.
390 - Clean separation of platform-specific code from the rest. Outside of
391 the platform directories, there remain only a few ifdefs in curses.h
394 - General reorganization and simplification.
396 - Documentation revisions.
398 - When expanding control characters in addch() or insch(), retain the
399 attributes from the chtype.
401 - Preserve the A_ALTCHARSET attribute in addch() and insch().
403 - Per X/Open, beep() should always return OK.
405 - On platforms with a controlling terminal (i.e., not X11), curs_set(1)
406 now sets the cursor to the shape it had at the time of initscr(),
407 rather than always making it small. (Exception for DOS: If the video
408 mode has been changed by PDC_resize_screen(), curs_set(1) reverts to
409 line 6/7.) The shape is taken from SP->orig_cursor (the meaning of
410 which is platform-specific).
412 - Stop updating the cursor position when the cursor is invisible (this
413 gives a huge performance boost in Win 9x); update the cursor position
414 from curs_set() if changing from invisible to visible.
416 - Some tweaking of the behavior of def_prog_mode(), def_shell_mode(),
417 savetty(), reset_prog_mode(), reset_shell_mode() and resetty()...
418 still not quite right.
420 - flash() was not implemented for Win32 or X. A portable implementation
421 is now used for all platforms. Note that it's much slower than the
422 old (DOS and OS/2) version, but this is only apparent on an extremely
423 slow machine, such as an XT.
425 - In getstr(), backspacing on high-bit characters caused a double
428 - hline() and vline() used an incorrect (off by one) interpretation of
429 _maxx and _maxy. If values of n greater than the max were specified,
430 these functions could access unallocated memory.
432 - innstr() is supposed to return the number of characters read, not just
433 OK or ERR. Reported by Mike Aubury.
435 - A proper implementation of insch() -- the PDC_chadd()-based version
436 wasn't handling the control characters correctly.
438 - Return ASCII and control key names from keyname() (problem revealed by
439 ncurses' movewindow test); also, per X/Open, return "UNKNOWN KEY" when
440 appropriate, rather than "NO KEY NAME".
442 - Turn off the cursor from leaveok(TRUE), even in X11; leaveok(FALSE)
443 now calls curs_set(1), regardless of the previous state of the cursor.
445 - In the slk area, BUTTON_CLICKED events now translate to function keys,
446 along with the previously recognized BUTTON_PRESSED events. Of course,
447 it should really be checking the events specified by map_button(),
448 which still doesn't work.
450 - napms(0) now returns immediately.
452 - A unified napms() implementation for DOS -- no longer throttles the
453 CPU when built with any compiler.
455 - Allow backspace editing of the nocbreak() buffer.
457 - pair_content(0, ...) is valid.
459 - There was no check to ensure that the pnoutrefresh() window fit within
460 the screen. It now returns an ERR if it doesn't.
462 - In X11, resize_term() must be called with parameters (0, 0), and only
463 when SP->resized is set, else it returns ERR.
465 - Copy _bkgd in resize_window(). Patch found on Frederic L. W. Meunier's
468 - slk_clear() now removes the buttons completely, as in ncurses.
470 - Use the current foreground color for the line attributes (underline,
471 left, right), unless PDC_set_line_color() is explicitly called. After
472 setting the line color, you can reset it to this mode via
473 "PDC_set_line_color(-1)".
475 - Removed non-macro implementations of COLOR_PAIR() and PAIR_NUMBER().
477 - Dispensed with PDC_chadd() and PDC_chins() -- waddch() and winsch()
478 are now (again) the core functions.
480 - Dropped or made static many obsolete, unused, and/or broken functions,
481 including PDC_chg_attrs(), PDC_cursor_on() and _off(),
482 PDC_fix_cursor(), PDC_get_attribute(), PDC_get_cur_col() and _row(),
483 PDC_set_80x25(), PDC_set_cursor_mode(), PDC_set_rows(),
484 PDC_wunderline(), PDC_wleftline(), PDC_wrightline(),
485 XCursesModifierPress() and XCurses_refresh_scrollbar().
487 - Obsolete/unused defines: _BCHAR, _GOCHAR, _STOPCHAR, _PRINTCHAR
488 _ENDLINE, _FULLWIN and _SCROLLWIN.
490 - Obsolete/unused elements of the WINDOW struct: _pmax*, _lastp*,
493 - Obsolete/unused elements of the SCREEN struct: orgcbr, visible_cursor,
494 sizeable, shell, blank, cursor, orig_emulation, font, orig_font,
495 tahead, adapter, scrnmode, kbdinfo, direct_video, video_page,
496 video_seg, video_ofs, bogus_adapter. (Some of these persist outside
497 the SCREEN struct, in the platform directories.) Added mouse_wait and
500 - Removed all the EMALLOC stuff. Straight malloc calls were used
501 elsewhere; it was undocumented outside of comments in curspriv.h; and
502 there are better ways to use a substitute malloc().
504 - Single mouse clicks are now reportable on all platforms (not just
505 double-clicks). And in general, mouse event reporting is more
506 consistent across platforms.
508 - The mouse cursor no longer appears in full-screen mode in Win32 unless
509 a nonzero mouse event mask is used.
511 - ALT-keypad input now works in Win32.
513 - In Win32, SetConsoleMode(ENABLE_WINDOW_INPUT) is not useful, and
514 appears to be the source of a four-year-old bug report (hanging in
517 - Removed the PDC_THREAD_BUILD stuff, which has never worked. For the
518 record: PDCurses is not thread-safe. Neither is ncurses; and the
519 X/Open curses spec explicitly makes it a non-requirement.
521 - With the internal compose key system in the X11 port, modifier keys
522 were breaking out of the compose state, making it impossible to type
523 accented capitals, etc. Also, Multi_key is now the default compose
524 key, instead of leaving it undefined by default; and a few more combos
527 - In X11, the first reported mouse event after startup always read as a
528 double-click at position 0, 0. (This bug was introduced in 2.8.)
530 - In X11, don't return selection start as a press event. (Shift-click on
531 button 1 is still returned.)
533 - In X11, properly handle pasting of high-bit chars. (It was doing an
534 unwanted sign extension.)
536 - In X11, BUTTON_MOVED was never returned, although PDC_MOUSE_MOVED was
539 - The fix in 2.8 for the scroll wheel in X11 wasn't very good -- it did
540 report the events as scroll wheel events, but it doubled them. Here's
543 - Changed mouse handling in X11: Simpler translation table, with
544 XCursesPasteSelection() called from XCursesButton() instead of the
545 translation table; require shift with button 1 or 2 for select or
546 paste when mouse events are being reported (as with ncurses), allowing
547 passthrough of simple button 2 events. This fixes the previously
548 unreliable button 2 behavior.
550 - Modifier keys are now returned on key up in X11, as in Win32. And in
551 general, modifier key reporting is more consistent across platforms.
553 - Modifiers are not returned as keys when a mouse click has occurred
556 - In BIOS mode (in DOS), count successive identical output bytes, and
557 make only one BIOS call for all of them. This dramatically improves
560 - The cursor position was not always updated correctly in BIOS mode.
562 - In testcurs, the way the ACS test was written, it would really only
563 work with a) PDCurses (with any compiler), or b) gcc (with any
564 curses). Here's a more portable implementation.
566 - Better reporting of mouse events in testcurs.
568 - Blank out buffer and num before the scanw() test in testcurs, in case
569 the user just hits enter or etc.; clear the screen after resizing.
571 - Allow tuidemo to use the last line.
573 - Separate left/right modifier keys are now reported properly in Win32.
574 (Everything was being reported as _R.)
576 - Attempts to redirect input in Win32 now cause program exit and an
577 error message, instead of hanging.
579 - Dropped support for the Microway NDP compiler.
581 - Some modules renamed, rearranged.
583 - Fixes for errors and warnings when building with Visual C++ 2005.
585 - In MSVC, the panel library didn't work with the DLL.
587 - Complete export lists for DLLs.
589 - Simplified makefiles; moved common elements to .mif files; better
590 optimization; strip demos when possible.
592 - Changed makefile targets of "pdcurses.a/lib" and "panel.a/lib" to
593 $(LIBCURSES) and $(LIBPANEL). Suggestion of Doug Kaufman.
595 - Changed "install" target in the makefile to a double-colon rule, to
596 get around a conflict with INSTALL on non-case-sensitive filesystems,
597 such as Mac OS X's HFS+. Reported by Douglas Godfrey et al.
599 - Make PDCurses.man dependent on manext. Suggestion of Tiziano Mueller.
601 - Set up configure.ac so autoheader works; removed some obsolescent
602 macros. Partly the suggestion of T.M.
604 - The X11 port now builds in the x11 directory (including the demos), as
607 - The X11 port should now build on more 64-bit systems. Partly due to
610 - The default window title and icons for the X11 port are now "PDCurses"
611 instead of "XCurses".
613 - Internal functions and variables made static where possible.
615 - Adopted a somewhat more consistent naming style: Internal functions
616 with external linkage, and only those, have the prefix "PDC_";
617 external variables that aren't part of the API use "pdc_"; static
618 functions use "_"; and "XC_" and "xc_" prefixes are used for functions
619 and variables, respectively, that are shared between both processes in
620 the X11 port. Also eliminated camel casing, where possible.
622 - Changed the encoding for non-ASCII characters in comments and
623 documentation from Latin-1 to UTF-8.
625 ------------------------------------------------------------------------
627 PDCurses 2.8 - 2006/04/01
628 =========================
630 As with the previous version, you should assume that apps linked against
631 older dynamic versions of the library won't work with this one until
638 - Declarations for all supported, standard functions, per the X/Open
639 Curses 4.2 spec, with the notable exception of getch() and ungetch().
640 You can disable the use of the macro versions by defining NOMACROS
641 before including curses.h (see xmas.c for an example). NOMACROS yields
642 smaller but theoretically slower executables.
644 - New functions: vwprintw(), vwscanw(), vw_printw() and vw_scanw(). This
645 completes the list of X/Open 4.2 functions, except for those concerned
646 with attr_t and wide characters. Some (especially the terminfo/termcap
647 functions) aren't yet fully fleshed out, though.
649 - Non-macro implementations for COLOR_PAIR(), PAIR_NUMBER(), getbkgd(),
650 mvgetnstr(), mvwgetnstr(), mvhline(), mvvline(), mvwhline(), and
651 mvwvline(). (The macros are still available, too.)
653 - newterm() works now, in a limited way -- the parameters are ignored,
654 and only the first invocation will work (i.e., only one SCREEN can be
657 - start_color() works now -- which is to say, if you _don't_ call it,
658 you'll only get monochrome output. Also, without calling it, the
659 terminal's default colors will be used, where supported (currently
660 only in Win32). This is equivalent to the PDC_ORIGINAL_COLORS behavior
661 introduced in 2.7, except that _only_ the default colors will be used.
662 (PDC_ORIGINAL_COLORS is still available, if you want to combine the
663 use of specific colors and the default colors.)
665 - New logic for termname() and longname(): termname() always returns
666 "pdcurses"; longname() returns "PDCurses for [platform] [adapter]
667 [COLOR/MONO]-YxX" (adapter is only defined for DOS and OS/2). This is
668 the first time these functions return _anything_ in Win32.
670 - New installation method for XCurses: the header files are placed in a
671 subdirectory "xcurses" within the include directory, rather than being
672 renamed. (But the renamed xcurses.h and xpanel.h are also installed,
673 for backwards compatibility.) curspriv.h and term.h are now available,
674 and existing curses-based code need no longer be edited to use
675 XCurses' curses.h. And with no more need for explicit XCursesExit()
676 calls (see below), your code need not be changed at all to move from
677 another curses implementation to XCurses. It can be as simple as "gcc
678 -I/usr/local/include/xcurses -lXCurses -oprogname progname.c".
680 - Combined readme.* into this HISTORY file, and incorporated the old 1.x
683 - New functionality for the testcurs demo: ACS character display; menu
684 support for PgUp, PgDn, Home and End; centered menu; and it can now
687 - Added modified versions of the rain and worm demos from ncurses.
691 - Big cleanup of dead and redundant code, including unneeded defines,
692 ifdefs, and structure elements.
694 - flushinp() was not implemented for Win32.
696 - resetty() was not restoring LINES and COLS.
698 - nonl() made '\n' print a line feed without carriage return. This was
701 - Removed bogus implementation of intrflush().
703 - The line-breakout optimization system, disabled by default in 2.7, is
704 removed in 2.8. It simply didn't work, and never has. (The typeahead()
705 function remains, for compatibility, but does nothing.)
707 - The declarations for the printw() and scanw() function families were
710 - Safer printw() calls on platforms that support vsnprintf().
712 - Use the native vsscanf() in DJGPP, MinGW and Cygwin.
714 - ACS_BLOCK now works in X.
716 - Explicit calls to XCursesExit() are no longer needed.
718 - XCURSES is now defined automatically if not DOS, OS2 or WIN32.
720 - The default icon for XCurses wasn't working (had to remove the focus
721 hint code to fix this). Also, the default title is now "XCurses"
724 - Incorrect dimensions (undercounting by two in each direction) were
725 shown while resizing in X.
727 - Scroll wheel events were not always correctly reported in X.
729 - 32 bits are enough for the "long" chtype, but 64 bits were used on a
730 64-bit system, wasting memory. Now conditioned on _LP64. This could be
733 - The short, 16-bit chtype now works with XCurses.
735 - Corrected return value for is_linetouched(), is_wintouched(),
736 can_change_color() and isendwin() (bool instead of int).
738 - timeout(), wtimeout(), idcok() and immedok() return void.
740 - pair_content() takes a short.
742 - Replaced incorrect usages of attr_t with chtype. attr_t is still
743 typedef'd, for backwards compatibility. (It's supposed to be used for
744 the WA_*-style functions, which PDCurses doesn't yet support.)
746 - Added const where required by the spec, and in other appropriate
749 - Removed PDC_usleep(). napms() is now the core delay routine.
751 - Fixed poll() support in napms().
753 - Various changes to the internal PDC_* functions -- don't depend on
754 these, and don't use them unless you absolutely have to.
756 - Some routines accessed window structures in their variable
757 declarations, _before_ checking for a NULL window pointer.
759 - Dropped support for the undocumented PDC_FULL_DISPLAY, wtitle(), and
762 - Cleaned up remaining warnings.
764 - Reduced unnecessary #include directives -- speeds up compilation.
766 - Fix for demos build in Borland/DOS -- the makefile in 2.7 didn't
767 specify the memory model. Reported by Erwin Waterlander.
769 - Simplified the makefiles; e.g., some now build each demo in a single
770 step, and Watcom no longer uses demos.lnk. Also, the demo exes are now
771 stripped when possible; maximum compression used for archives built
772 by the makefiles; xcurses-config removed as part of "make distclean";
773 and I tweaked optimization for some platforms.
775 - Reverted to /usr/local/ as default installation directory for XCurses.
777 - Upgraded to autoconf 2.59... instantly doubling the size of the
778 configure script. Ah well. Otherwise, simplified the build system.
780 - Dropped support for pre-ANSI compilers. (It hasn't worked since at
781 least version 2.4, anyway.)
783 - Revised and, I hope, clarified the boilerplate and other comments.
785 - Simplified logging and RCS ids; added RCS ids where missing.
787 - Consistent formatting for all code, approximately equivalent to
788 "indent -kr -i8 -bl -bli0", with adjustments for 80 columns.
790 ------------------------------------------------------------------------
792 PDCurses 2.7 - 2005/12/30
793 =========================
797 Hello all. As of a few weeks ago, I'm the new maintainer for PDCurses.
798 Here's a brief summary of changes in this release. (More details are
799 available in the CVS log and trackers on SourceForge.)
803 - Functions: delscreen(), getattrs(), has_key(), slk_color(),
804 wcolor_set(), wtimeout().
806 - Macros: color_set(), mvhline(), mvvline(), mvwgetnstr(), mvwhline(),
807 mvwvline(), timeout(), wresize().
809 - Stub implementations of terminfo functions (including a term.h).
811 - More stubs for compatibility: filter(), getwin(), putwin(),
812 noqiflush(), qiflush(), scr_dump(), scr_init(), scr_restore(),
813 scr_set(), use_env(), vidattr(), vidputs().
815 - The terminal's default colors are used as curses' default colors when
816 the environment variable "PDC_ORIGINAL_COLORS" is set to any value
817 (Win32 only at the moment).
819 - Simplified build system.
821 - Replaced PDC_STATIC_BUILD with its opposite, PDC_DLL_BUILD (see .mak
822 files for more info).
824 - Minimal implementation of color_content() -- no longer a stub.
826 - Added the remaining ACS defines (ACS_S3, ACS_BBSS, etc.) for
827 DOS/OS2/Win; "enhanced" versions of existing ACS characters used.
829 - Support for scroll wheels.
831 - Support for Pacific C.
835 - Builds correctly (including demos) on all tested platforms (see
836 below); nearly all compiler warnings have been cleaned up; the ptest
837 demo is built on all platforms; "clean" targets are improved.
839 - The ability to build ncurses_tests has been restored (see demos dir).
841 - Line-breakout optimization now defaults to off (equivalent to
842 "typeahead(-1)"), so output is not interrupted by keystrokes (it's
843 supposed to resume on the next refresh(), which wasn't working).
845 - Implicit wrefresh() in wgetch() was not being invoked in nodelay mode.
847 - subpad() was erroneously offsetting from the origin coordinates of the
848 parent pad (which are always -1,-1).
850 - In wborder(), whline(), and wvline(), the current (wattrset) attribute
851 was being used, but not the current background (wbkgd).
853 - Allow Russian 'r' character ASCII 0xe0 to be returned.
855 - termattrs() now also returns A_UNDERLINE, A_REVERSE.
857 - In Win32, with large scrollback buffers set, there was an unwanted
858 "scrollup" effect on startup.
860 - Revamped keyboard handling for Win32.
862 - New screen resize method for Win32.
864 - napms(), delay_output(), etc. now work with Cygwin.
866 - curs_set(0) wasn't working in Win32 in full-screen (ALT-ENTER) mode --
867 the cursor stayed on.
869 - The A_REVERSE attribute was broken in XCurses.
871 - On 64-bit systems, XCurses was ignoring every other keystroke.
873 - Added focus hints for XCurses.
875 - Demos (except for tuidemo) once again have their proper titles in
876 XCurses (using Xinitscr() instead of the obsolete XCursesProgramName).
878 - The 16-bit chtype is a working option again (by removing #define
879 CHTYPE_LONG from curses.h), except in XCurses. It's not recommended;
880 but if your needs are limited, it still works.
882 - Reset screen size in resetty() under DOS, as in Win32 and OS/2.
884 - Changes for cursor size under DOS.
886 - Automatic setting of BIOS mode for CGA under DOS now works.
888 - The cursor is now always updated in PDC_gotoxy(); this fixes the
889 problem of missing characters in BIOS mode.
891 - Macros nocbreak(), cbreak(), nocrmode(), crmode(), nodelay(),
892 nl() and nonl() now return OK.
894 - ERR and OK are now defined as -1 and 0, respectively, for
895 compatibility with other curses implementations -- note that this
896 change is not binary compatible; you'll have to rebuild programs that
897 use shared/dynamic libraries.
899 - Added "const" to prototypes where appropriate.
901 - Miscellaneous code cleanup.
909 Florian Grosse-Coosmann
917 and of course, MARK HESSLING, for his over 13 years of service as the
918 maintainer of PDCurses. Plus, thanks to all who've reported bugs or
919 requested features. Apologies to anyone I've forgotten.
921 I've tested this version on Turbo C++ 3.0 and Borland C++ 3.1 for DOS;
922 DJGPP 2.X; Open Watcom 1.3 for DOS (16 and 32-bit), Windows and OS/2;
923 EMX 0.9d and the "newgcc" version of EMX; Borland C++ 5.5 for Windows;
924 recent versions of MinGW, Cygwin, LCC-Win32 and Microsoft Visual C++;
925 and gcc under several flavors of Linux, Mac OS X, *BSD and Solaris.
929 ------------------------------------------------------------------------
931 PDCurses 2.6 - 2003/01/08
932 =========================
936 This release of PDCurses includes the following changes:
940 - Allow accented characters on Win32 platform when run on non-English
943 - Allow "special" characters like Ctrl-S, Ctrl-Q under OS/2 to be returned.
945 - Some bugs with halfdelay() fixed by William McBrine.
947 - pechochar() should now work correctly.
949 - redrawwin() macro in curses.h was incorrect - fixed by Alberto Ornaghi
951 - Don't include "special" characters like KEY_SHIFT_L to be returned in
952 getnstr() family. Bug 542913
954 - Entering TAB in wgetnstr() no longer exceeds requested buffer size.
957 - Fixed bug 550066, scrollok() and pads.
958 Also beep() called when buffer exceeded. Bug 562041.
960 - Reverse video of X11 selection reinstated. Pablo Garcia Abio??
962 - Right Alt modifier now works like left Alt modifier under Win32
964 - Add support for all libXaw replacement libraries with Scrollbar bug.
965 Note that for this to work, you still have to change the libXaw
966 replacement libraries to fix the bug :-(
968 - Don't trap signals in XCurses if calling application has ignored them.
969 Change by Frank Heckenbach.
971 - Bug reports from Warren W. Gay:
972 - Fix termattrs() to return A_REVERSE and A_BLINK on all platforms.
973 - Fix definition of getsyx() and setsyx() to be consistent with
975 - Fix definition of echo() and noecho(). Bug 625001.
976 - Fix definition of keypad() and leaveok(). Bug 632653.
977 - Missing panel_hidden() prototype. Bug 649320.
979 - Fixed bug with calling def_prog_mode(), resize_term(),
980 reset_prog_mode(); the resize details were being lost.
984 - Clipboard support now available on DOS platform, but handled
985 internally to the currently running process.
987 - New X11 resource: textCursor, allows the text cursor to be specified
988 as a vertical bar, or the standard horizontal bar. Thanks to Frank
989 Heckenbach for the suggestion.
991 NEW COMPILER SUPPORT:
993 - lcc-win32 now works correctly
995 ------------------------------------------------------------------------
997 PDCurses 2.5 - 2001/11/26
998 =========================
1002 This release of PDCurses includes the following changes:
1004 - Set BASE address for Win32 DLL
1006 - Add KEY_SUP and KEY_SDOWN.
1008 - Add PDC_set_line_color()
1010 - Add blink support as bold background
1014 - Add getbkgd() macro
1016 - Add new PDC functions for adding underline, overline, leftline and
1019 - Add support for shifted keypad keys.
1021 - Allow more keypad keys to work under Win32
1023 - Change Win32 and OS/2 DLL name to curses.dll
1025 - Change example resources to allow overriding from the command line
1027 - Changes for building cleanly on OS/2
1029 - Changes to handle building XCurses under AIX
1031 - Check if prefresh() and pnoutrefresh() parameters are valid.
1033 - Ensure build/install works from any directory
1035 - Handle platforms where X11 headers do not typedef XPointer.
1037 - Mention that Flexos is likely out-of-date.
1039 - Pass delaytenths to XCurses_rawgetch()
1043 - Updates for cursor blinking and italic.
1047 - Fix bug with getting Win32 clipboard contents. Added new
1048 PDC_freeclipboard() function.
1050 - Fix bug with halfdelay()
1052 - Fix bug with mouse interrupting programs that are not trapping mouse
1055 - Fix return value from curs_set()
1057 - Reverse the left and right pointing bars in ALT_CHARSET
1059 NEW COMPILER SUPPORT:
1063 ------------------------------------------------------------------------
1065 PDCurses 2.4 - 2000/01/17
1066 =========================
1070 This release of PDCurses includes the following changes:
1072 - full support of X11 selection handling
1074 - removed the need for the cursos2.h file
1076 - enabled the "shifted" key on the numeric keypad
1078 - added native clipboard support for X11, Win32 and OS/2
1080 - added extra functions for obtaining internal PDCurses status
1082 - added clipboard and key modifier tests in testcurs.c
1084 - fixes for panel library
1086 - key modifiers pressed by themselves are now returned as keys:
1087 KEY_SHIFT_L KEY_SHIFT_R KEY_CONTROL_L KEY_CONTROL_R KEY_ALT_L KEY_ALT_R
1088 This works on Win32 and X11 ports only
1090 - Added X11 shared library support
1092 - Added extra slk formats supported by ncurses
1094 - Fixed bug with resizing the terminal when slk were on.
1096 - Changed behavior of slk_attrset(), slk_attron() slk_attroff()
1097 functions to work more like ncurses.
1101 - some minor bug and portability fixes were included in this release
1105 - PDC_getclipboard() and PDC_setclipboard() for accessing the native
1106 clipboard (X11, Win32 and OS/2)
1108 - PDC_set_title() for setting the title of the window (X11 and Win32
1111 - PDC_get_input_fd() for getting the file handle of the PDCurses input
1113 - PDC_get_key_modifiers() for getting the keyboard modifier settings at
1114 the time of the last (w)getch()
1116 - Xinitscr() (only for X11 port) which allows standard X11 switches to
1117 be passed to the application
1119 NEW COMPILER SUPPORT:
1121 - MingW32 GNU compiler under Win95/NT
1123 - Cygnus Win32 GNU compiler under Win95/NT
1125 - Borland C++ for OS/2 1.0+
1127 - lcc-win32 compiler under Win95/NT
1129 ACKNOWLEDGEMENTS: (for this release)
1131 Georg Fuchs for various changes.
1132 Juan David Palomar for pointing out getnstr() was not implemented.
1133 William McBrine for fix to allow black/black as valid color pair.
1134 Peter Preus for pointing out the missing bccos2.mak file.
1135 Laura Michaels for a couple of bug fixes and changes required to
1136 support Mingw32 compiler.
1137 Frank Heckenbach for PDC_get_input_fd() and some portability fixes and
1138 the fixes for panel library.
1139 Matthias Burian for the lcc-win32 compiler support.
1141 ------------------------------------------------------------------------
1143 PDCurses 2.3 - 1998/07/09
1144 =========================
1148 This release of PDCurses includes the following changes:
1150 - added more System V R4 functions
1154 - the X11 port is now fully functional
1156 - the MS Visual C++ Win32 port now includes a DLL
1158 - both the X11 and Win32 ports support the mouse
1160 - the slk..() functions are now functional
1162 - support for scrollbars under X11 are experimental at this stage
1164 - long chtype extended to non-Unix ports
1166 The name of the statically built library is pdcurses.lib (or
1167 pdcurses.a). The name of the DLL import library (where applicable) is
1172 - some minor bugs were corrected in this release
1178 NEW COMPILER SUPPORT:
1180 - MS Visual C++ under Win95/NT
1182 - Watcom C++ under OS/2, Win32 and DOS
1184 - two EMX ports have been provided:
1185 - OS/2 only using OS/2 APIs
1186 - OS/2 and DOS using EMX video support routines
1190 PDCurses recognizes two environment variables which determines the
1191 initialization and finalization behavior. These environment variables
1192 do not apply to the X11 port.
1195 If this environment variable is set, PDCurses will not clear the screen
1196 to the default white on black on startup. This allows you to overlay
1197 a window over the top of the existing screen background.
1200 If this environment variable is set, PDCurses will take a copy of the
1201 contents of the screen at the time that PDCurses is started; initscr(),
1202 and when endwin() is called, the screen will be restored.
1205 ACKNOWLEDGEMENTS: (for this release)
1207 Chris Szurgot for original Win32 port.
1208 Gurusamy Sarathy for some updates to the Win32 port.
1209 Kim Huron for the slk..() functions.
1210 Florian Grosse Coosmann for some bug fixes.
1211 Esa Peuha for reducing compiler warnings.
1212 Augustin Martin Domingo for patches to X11 port to enable accented
1215 ------------------------------------------------------------------------
1217 PDCurses 2.2 - 1995/02/12
1218 =========================
1222 This release of PDCurses has includes a number of major changes:
1224 - The portable library functions are now grouped together into single
1225 files with the same arrangement as System V R4 curses.
1227 - A panels library has been included. This panels library was written by
1230 - Quite a few more functions have been supplied by Wade Schauer and
1231 incorporated into release 2.2. Wade also supplied the support for the
1232 Microway NDP C/C++ 32 bit DOS compiler.
1234 - The curses datatype has been changed from an unsigned int to a long.
1235 This allows more attributes to be stored as well as increasing the
1236 number of color-pairs from 32 to 64.
1238 - Xwindows port (experimental at the moment).
1242 - mvwin() checked the wrong coordinates
1244 - removed DESQview shadow memory buffer checking bug in curses.h in
1245 #define for wstandout()
1247 - lots of others I can't remember
1251 - Too many to mention. See intro.man for a complete list of the
1252 functions PDCurses now supports.
1256 - DJGPP 1.12 is now supported. The run-time error that caused programs
1257 to crash has been removed.
1259 - emx 0.9a is supported. A program compiled for OS/2 should also work
1260 under DOS if you use the VID=EMX switch when compiling. See the
1261 makefile for details.
1263 - The Microway NDP C/C++ DOS compiler is now supported. Thanks to Wade
1264 Schauer for this port.
1266 - The Watcom C++ 10.0 DOS compiler is now supported. Thanks to Pieter
1267 Kunst for this port.
1269 - The library now has many functions grouped together to reduce the size
1270 of the library and to improve the speed of compilation.
1272 - The "names" of a couple of the compilers in the makefile has changed;
1273 CSET2 is now ICC and GO32 is now GCC.
1277 One difference between the behavior of PDCurses and Unix curses is the
1278 attributes that are displayed when a character is cleared. Under Unix
1279 curses, no attributes are displayed, so the result is always black.
1280 Under PDCurses, these functions clear with the current attributes in
1281 effect at the time. With the introduction of the bkgd functions, by
1282 default, PDCurses clears using the value set by (w)bkgd(). To have
1283 PDCurses behave the same way as it did before release 2.2, compile with
1286 ACKNOWLEDGEMENTS: (for this release)
1288 Pieter Kunst, David Nugent, Warren Tucker, Darin Haugen, Stefan Strack,
1289 Wade Schauer and others who either alerted me to bugs or supplied
1292 ------------------------------------------------------------------------
1294 PDCurses 2.1 - 1993/06/20
1295 =========================
1299 The current code contains bug fixes for the DOS and OS/2 releases and
1300 also includes an alpha release for Unix. The Unix release uses another
1301 public domain package (mytinfo) to handle the low-level screen writes.
1302 mytinfo was posted to comp.sources.unix (or misc) in December 1992 or
1303 January 1993. Unless you are a glutton for punishment I would recommend
1304 you avoid the Unix port at this stage.
1306 The other major addition to PDCurses is the support for DJGPP (the DOS
1307 port of GNU C++). Thanks to David Nugent <davidn@csource.oz.au>.
1309 Other additions are copywin() function, function debugging support and
1310 getting the small and medium memory models to work. The testcurs.c demo
1311 program has also been changed significantly and a new demo program,
1312 tuidemo, has been added.
1314 Some people have suggested including information on where to get dmake
1315 from. oak.oakland.edu in /pub/msdos/c
1319 Under DOS, by default, screen writes to a CGA monitor are done via the
1320 video BIOS rather than by direct video memory writes. This is due to
1321 the CGA "snow" problem. If you have a CGA monitor and do not suffer
1322 from snow, you can compile private\_queryad.c with CGA_DIRECT defined.
1323 This will then use cause PDCurses to write directly to the CGA video
1326 Function debugging: Firstly to get function debugging, you have to
1327 compile the library with OPT=N in the makefile. This also turns on
1328 compiler debugging. You can control when you want PDCurses to write to
1329 the debug file (called trace in the current directory) by using the
1330 functions traceon() and traceoff() in your program.
1332 Microsoft C 6.00 Users note:
1333 ----------------------------
1335 With the addition of several new functions, using dmake to compile
1336 PDCurses now causes the compiler to run "out of heap space in pass 2".
1337 Using the 6.00AX version (DOS-Extended) to compile PDCurses fixes this
1338 problem; hence the -EM switch.
1343 Added OS/2 DLL support.
1345 A few curses functions have been fixed to exhibit their correct
1346 behavior and make them more functionally portable with System V
1347 curses. The functions that have changed are overlay(), overwrite() and
1350 overlay() and overwrite()
1352 Both of theses functions in PDCurses 2.0 allowed for one window to be
1353 effectively placed on top of another, and the characters in the first
1354 window were overlaid or overwritten starting at 0,0 in both windows.
1355 This behavior of these functions was not correct. These functions only
1356 operate on windows that physically overlap with respect to the
1357 displayed screen. To achieve the same functionality as before, use the
1358 new function copywin(). See the manual page for further details.
1362 This function in PDCurses 2.0 effectively checked to see if there were
1363 any characters remaining in the keyboard buffer. This is not the
1364 behavior exhibited by System V curses. This function is intended
1365 purely to set a flag so that curses can check while updating the
1366 physical screen if any keyboard input is pending. To achieve the same
1367 effect with typeahead() under PDCurses 2.1 the following code should be
1372 while(!typeahead(stdin))
1374 /* do something until any key is pressed... */
1379 /* getch() to return ERR if no key pending */
1380 nodelay(stdscr,TRUE);
1381 while(getch() == (ERR))
1383 /* do something until any key is pressed... */
1387 ACKNOWLEDGEMENTS: (in no particular order)
1389 Jason Shumate, Pieter Kunst, David Nugent, Andreas Otte, Pasi
1390 Hamalainen, James McLennan, Duane Paulson, Ib Hojme
1392 Apologies to anyone I may have left out.
1394 ------------------------------------------------------------------------
1396 PDCurses 2.0 - 1992/11/23
1397 =========================
1401 Well, here it finally is; PDCurses v2.0.
1403 PDCurses v2.0 is an almost total rewrite of PCcurses 1.4 done by John
1404 'Frotz' Fa'atuai, the previous maintainer. It adds support for OS/2 as
1407 This version has been tested with Microsoft C v6.0, QuickC v2.0 and
1408 Borland C++ 2.0 under DOS and Microsoft C v6.0 and TopSpeed c v3.02
1409 under OS/2 2.0. Also the library has been compiled successfully with
1410 emx 0.8e, C Set/2 and Watcom 9. Most testing was done with the large
1411 memory model, where applicable. The large memory model is probably the
1414 The amount of testing has not been as extensive as I would have liked,
1415 but demands on releasing a product have outweighed the product's
1416 quality. Nothing new with that !! Hopefully with wider circulation,
1417 more bugs will be fixed more quickly.
1419 I have included just 1 makefile which is suitable for dmake 3.8 for
1420 both DOS and OS/2. The makefile does not rely on customization of the
1423 If you discover bugs, and especially if you have fixes, please let me
1426 The source to the library is distributed as a zip file made with zip
1427 1.9. You will need Info-ZIP unzip 5.0 to unzip. Follow the directions
1428 below to compile the library.
1432 1. Create a new directory in which to unzip pdcurs20.zip. This will
1433 create a curses directory and a number of subdirectories containing
1434 source code for the library and utilities and the documentation.
1436 2. Make changes to the makefile where necessary:
1437 Change the MODEL or model macro to the appropriate value (if it
1438 applies to your compiler). Use model for Borland compilers.
1440 Change any paths in the defined macros to be suitable for your
1443 3. Invoke DMAKE [-e environment_options] [target]
1445 where environment_options are:
1447 OS (host operating system)
1449 OPT (optimized version or debug version) - optional. default Y
1450 TOS (target operating system) - optional. default OS
1452 see the makefile for valid combinations
1454 targets: all, demos, lcursesd.lib, manual...
1456 NB. dmake is case sensitive with targets, so those environments that
1457 use an upper case model value (eg MSC) MUST specify the library
1458 target as for eg. Lcursesd.lib
1460 The makefile is by default set up for Borland C++. The use of -e
1461 environment_options override these defaults. If you prefer, you can
1462 just change the defaults in the makefile and invoke it without the
1467 The documentation for the library is built into each source file, a
1468 couple of specific doc files and the header files. A program is
1469 supplied (manext) to build the manual. This program gets compiled when
1470 you build the documentation.
1472 To generate the library response file correctly, I had to write a quick
1473 and dirty program (buildlrf) to achieve this. Originally the makefiles
1474 just had statements like: "echo -+$(OBJ)\$* & >> $(LRF)" which appended
1475 a suitable line to the response file. Unfortunately under some
1476 combinations of makefiles and command processors (eg. nmake and 4DOS)
1477 the & would get treated as stderr and the echo command would fail.
1479 The original source for PDCurses that I received from the previous
1480 maintainer contained support for the FLEXOS operating system. Not
1481 having access to it, I could not test the changes I made so its support
1482 has fallen by the wayside. If you really need to have PDCurses running
1483 under FLEXOS, contact me and I will see what can be arranged.
1485 Under DOS, by default, screen writes to a CGA monitor are done via the
1486 video BIOS rather than by direct video memory writes. This is due to
1487 the CGA "snow" problem. If you have a CGA monitor and do not suffer
1488 from snow, you can compile private\_queryad.c with CGA_DIRECT defined.
1489 This will then use cause PDCurses to write directly to the CGA video
1492 Added System V color support.
1494 COMPILER-SPECIFIC NOTES:
1499 It is possible with MSC 6.0 to build the OS/2 libraries and demo
1500 programs from within DOS. This is the only case where it is possible to
1501 specify the value of TOS on the command line to be OS2 and the value of
1507 I have only tested the library using the migration libraries. I doubt
1508 that the demo programs will work without them.
1513 Testing has been done with 0.8e of emx together with the 16_to_32
1514 libraries. The emx\lib directory should include the vio32.lib and
1515 kbd32.lib libraries from the 16_to_32 package.
1517 BUGS and UNFINISHED BUSINESS:
1519 - PDC_set_ctrl_break() function does not work under OS/2.
1521 - win_print() and PDC_print() do not work under OS/2.
1523 - The file todo.man in the doc directory also lists those functions of
1524 System V 3.2 curses not yet implemented. Any volunteers?
1528 John 'Frotz' Fa'atuai, the previous maintainer for providing an
1529 excellent base for further development.
1530 John Burnell <johnb@kea.am.dsir.govt.nz>, for the OS/2 port.
1531 John Steele, Jason (finally NOT a John) Shumate....
1532 for various fixes and suggestions.
1533 Eberhardt Mattes (author of emx) for allowing code based on his
1534 C library to be included with PDCurses.
1535 Several others for their support, moral and actual.
1539 ------------------------------------------------------------------------
1541 PDCurses 2.0Beta - 1991/12/21
1542 =============================
1544 Changed back from short to int. (int is the correct size for the default
1545 platform. Short might be too short on some platforms. This is more
1546 portable. I, also, made this mistake.)
1548 Many functions are now macros. If you want the real thing, #undef the
1549 macro. (X/Open requirement.)
1551 Merged many sources into current release.
1553 Added many X/Open routines (not quite all yet).
1555 Added internal documentation to all routines.
1557 Added a HISTORY file to the environment.
1559 Added a CONTRIB file to the environment.
1561 ------------------------------------------------------------------------
1563 PDCurses 1.5Beta - 1990/07/14
1564 =============================
1566 Added many levels of compiler support. Added mixed prototypes for all
1567 "internal" routines. Removed all assembly language. Added EGA/VGA
1568 support. Converted all #ifdef to #if in all modules except CURSES.H and
1569 CURSPRIV.H. Always include ASSERT.H. Added support for an external
1570 malloc(), calloc() and free(). Added support for FAST_VIDEO
1571 (direct-memory writes). Added various memory model support (for
1572 FAST_VIDEO). Added much of the December 1988 X/Open Curses
1575 -- John 'Frotz' Fa'atuai
1577 ------------------------------------------------------------------------
1579 PCcurses 1.4 - 1990/01/14
1580 =========================
1582 In PCcurses v.1.4, both portability improvements and bugfixes have
1583 been made. The files have been changed to allow lint-free compilation
1584 with Microsoft C v.5.1, and with Turbo C v.2.0. The source should still
1585 compile without problems on older compilers, although this has not been
1588 The makefiles have been changed to suit both the public release and
1589 the author, who maintains a special kind of libraries for himself. In
1590 the case of Microsoft C, changes were done in the makefile to lower the
1591 warning level to 2 (was 3). This was to avoid ANSI warnings which are
1592 abundant because PCcurses does not attempt to follow strict ANSI C
1595 BUG FIXES FROM V.1.3 TO V.1.4:
1597 !!!IMPORTANT CHANGE!!!
1599 The definitions for OK and ERR in curses.h were exchanged. This was
1600 done to be more consistent with UNIX versions. Also, it permits
1601 functions like newwin() and subwin() to return 0 (=NULL) when they fail
1602 due to memory shortage. This incompatibility with UNIX curses was
1603 pointed out by Fred C. Smith. If you have tested success/failure by
1604 comparisons to anything other than ERR and OK, your applications will
1605 need to be be changed on that point. Sorry... but presumably most of you
1606 used the symbolic constants?
1608 (END OF IMPORTANT CHANGE)
1610 Fred also pointed out a bug in the file update.c. The bug caused the
1611 first character printed after 'unauthorized' screen changes (like during
1612 a shell escape, for example) to be placed at the wrong screen position.
1613 This happened even if the normal precautions (clear / touch / refresh)
1614 were taken. The problem has now been fixed.
1616 PCcurses is currently also being used on a 68000 system with
1617 hard-coded ESCape sequences for ANSI terminals. However, ints used by
1618 the 68000 C compiler are 32 bits. Therefore ints have been turned into
1619 shorts wherever possible in the code (otherwise all window structures
1620 occupy twice as much space as required on the 68000). This does not
1621 affect PC versions since normally both ints and shorts are 16 bits for
1624 At some places in the source code there are references made to the
1625 68000 version. There are also a makefile, a curses68.c file, and a
1626 curses68.cmd file. These are for making, low-level I/O, and linking
1627 commands when building the 68000 version. These files are probably
1628 useful to no-one but the author, since it is very specific for its
1629 special hardware environment. Still in an effort to keep all
1630 curses-related sources in one place they are included. Note however that
1631 PCcurses will not officially support a non-PC environment.
1633 The file cursesio.c, which was included in the package at revision
1634 level 1.2, and which was to be an alternative to the cursesio.asm file,
1635 has been verified to behave incorrectly in the function _curseskeytst().
1636 The problem was that the value of 'cflag' does not contain the proper
1637 data for the test that is attempted. Furthermore, neither Turbo C or
1638 Microsoft C allows any way to return the data that is needed, and
1639 consequently you should not use cursesio.c. The best solution is to
1640 simply use the ASM version. In v.1.2 and v.1.3, the user could edit the
1641 makefile to select which version he wanted to use. The makefiles in
1642 v.1.4 have removed this possibility forcing the use of the ASM file, and
1643 cursesio.c has been dropped from the distribution.
1645 A bug in the wgetstr() function caused PCcurses to echo characters
1646 when reading a keyboard string, even if the echo had been turned off.
1647 Thanks to Per Foreby at Lund University, Sweden, for this. Per also
1648 reported bugs concerning the handling of characters with bit 8 set.
1649 Their ASCII code were considered as lower than 32, so they were erased
1650 etc. like control characters, i.e. erasing two character positions. The
1651 control character test was changed to cope with this.
1653 The overlay() and overwrite() functions were changed so that the
1654 overlaying window is positioned at its 'own' coordinates inside the
1655 underlying window (it used to be at the underlying window's [0,0]
1656 position). There is some controversy about this - the documentation for
1657 different curses versions say different things. I think the choice made
1658 is the most reasonable.
1660 The border() and wborder() functions were changed to actually draw a
1661 border, since this seems to be the correct behavior of these functions.
1662 They used to just set the border characters to be used by box(). These
1663 functions are not present in standard BSD UNIX curses.
1665 The subwin() function previously did not allow the subwindow to be as
1666 big as the original window in which it was created. This has now been
1667 fixed. There was also the problem that the default size (set by
1668 specifying numlines or numcols (or both) as 0 made the resulting actual
1669 size 1 line/column too small.
1671 There were a few spelling errors in function names, both in the
1672 function declarations and in curses.h. This was reported by Carlos
1673 Amaral at INESC in Portugal. Thanks! There was also an unnecessary (but
1674 harmless) parameter in a function call at one place.
1676 ------------------------------------------------------------------------
1678 PCcurses 1.3 - 1988/10/05
1679 =========================
1681 The file 'border.c' is now included. It allows you to explicitly
1682 specify what characters should be used as box borders when the box()
1683 functions are called. If the new border characters are non-0, they
1684 override the border characters specified in the box() call. In my
1685 understanding, this functionality is required for AT&T UNIX sV.3
1686 compatibility. Thanks for this goes to Tony L. Hansen
1687 (hansen@pegasus.UUCP) for posting an article about it on Usenet
1688 (newsgroup comp.unix.questions; his posting was not related at all to
1691 The only other difference between v.1.2 and v.1.3 is that the latter
1692 has been changed to avoid warning diagnostics if the source files are
1693 compiled with warning switches on (for Microsoft this means '-W3', for
1694 Turbo C it means '-w -w-pro'). Of these, the Turbo C warning check is
1695 clearly to be used rather than Microsoft, even if neither of them comes
1696 even close to a real UNIX 'lint'. Some of the warnings in fact indicated
1697 real bugs, mostly functions that did not return correct return values or
1700 The makefiles for both MSC and TRC have been modified to produce
1701 warning messages as part of normal compilation.
1703 ------------------------------------------------------------------------
1705 PCcurses 1.2 - 1988/10/02
1706 =========================
1708 The changes from v.1.1 to v.1.2 are minor. The biggest change is that
1709 there was a bug related to limiting the cursor movement if the
1710 application tried to move it outside the screen (something that should
1711 not be done anyway). Such erroneous application behavior is now handled
1714 All modules have been changed to have a revision string in them, which
1715 makes it easier to determine what version is linked into a program (or
1716 what library version you have).
1718 There is now a 'cursesio.c' file. That file does the same as
1719 'cursesio.asm' (i.e. it provides the interface to the lower-level system
1720 I/O routines). It is written in C and thus it is (possibly) more
1721 portable than the assembler version (but still not so portable since it
1722 uses 8086 INT XX calls directly). When one creates new curses libraries,
1723 one chooses whether to use the assembler or the C version of cursesio.
1724 The choice is made by commenting out the appropriate dependencies for
1725 cursesio.obj, near the end of the makefiles.
1727 There is now a 'setmode.c' file. That file contains functions that
1728 save and restore terminal modes. They do it into other variables than do
1729 savetty() and resetty(), so one should probably use either
1730 savetty()/resetty() or the new functions only - and not mix the both
1731 ways unless one really knows what one does.
1733 Diff lists vs v.1.0 are no longer included in the distribution. The
1734 make utility still is. PCcurses v.1.2 still compiles with Microsoft C
1735 v.4.0, and with Borland Turbo C v.1.0. There is as far as I know no
1736 reason to believe that it does not compile under Microsoft C v.3.0 and
1737 5.x, or Turbo C v.1.5, but this has not been tested.
1739 There are two makefiles included, one for Microsoft C, one for Turbo
1740 C. They are both copies of my personal makefiles, and as such they
1741 reflect the directory structure on my own computer. This will have to be
1742 changed before you run make. Check $(INCDIR) and $(LIBDIR) in
1743 particular, and make the choice of ASM or C cursesio version as
1744 mentioned above (the distribution version uses the C version of
1747 The manual file (curses.man) has been changed at appropriate places.
1749 I would like to thank the following persons for their help:
1751 Brandon S. Allbery (alberry@ncoast.UUCP)
1752 for running comp.binaries.ibm.pc (at that time)
1753 and comp.source.misc.
1755 Steve Balogh (Steve@cit5.cit.oz.AU)
1756 for writing a set of manual pages and posting
1760 for finding bugs and suggesting raw
1761 character output routines.
1763 Nathan Glasser (nathan@eddie.mit.edu)
1764 for finding and reporting bugs.
1766 Ingvar Olafsson (...enea!hafro!ingvar)
1767 for finding and reporting bugs.
1769 Eric Rosco (...enea!ipmoea!ericr)
1770 for finding and reporting bugs.
1772 Steve Creps (creps@silver.bacs.indiana.edu)
1773 for doing a lot of work - among others
1774 posting bug fixes to the net, and writing
1775 the new cursesio.c module.
1777 N. Dean Pentcheff (dean@violet.berkeley.edu)
1778 for finding bugs and rewriting cursesio.asm
1781 Finally, Jeff Dean (parcvax,hplabs}!cdp!jeff)
1783 has had a shareware version of curses deliverable since
1784 about half a year before I released PCcurses 1.0 on Use-
1785 Net. He is very concerned about confusion between the two
1786 packages, and therefore any references on the network
1787 should make clear whether they reference Dean's PCcurses
1788 or Larsson's PCcurses.
1790 ------------------------------------------------------------------------
1792 PCcurses 1.1 - 1988/03/06
1793 =========================
1795 The changes from v.1.0 to v.1.1 are minor. There are a few bug fixes,
1796 and new (non-portable) functions for verbatim IBM character font display
1797 have been added (in charadd.c and charins.c). The manual file
1798 (curses.man) has been changed at appropriate places.
1800 In the file v10tov11.dif there are listings of the differences between
1801 version 1.0 and 1.1. The diff listings are in UNIX diff(1) format.
1803 Version 1.1 compiles with Turbo C v.1.0, as well as Microsoft C v.3.0
1804 and v.4.0. On the release disk there is a make.exe utility which is very
1805 similar to UNIX make (If the package was mailed to you, the make utility
1806 will be in uuencoded format - in make.uu - and must be uudecoded first).
1807 It is much more powerful than Microsoft's different MAKEs; the latter
1808 ones will NOT generate libraries properly if used with the PCcurses
1811 There are three makefiles:
1813 makefile generic MSC 3.0 makefile
1814 makefile.ms MSC 4.0 makefile
1815 makefile.tc Turbo C 1.0 makefile
1817 To make a library with for example Turbo C, make directories to hold
1818 .H and .LIB files (these directories are the 'standard places'), edit
1819 makefile.tc for this, and type
1821 make -f makefile.tc all
1823 and libraries for all memory models will be created in the .LIB
1824 directory, while the include files will end up in the .H directory. Also
1825 read what is said about installation below!
1827 ------------------------------------------------------------------------
1829 PCcurses 1.0 - 1987/08/24
1830 =========================
1832 This is the release notes for the PCcurses v.1.0 cursor/window control
1833 package. PCcurses offers the functionality of UNIX curses, plus some
1834 extras. Normally it should be possible to port curses-based programs
1835 from UNIX curses to PCcurses on the IBM PC without changes. PCcurses is
1836 a port/ rewrite of Pavel Curtis' public domain 'ncurses' package. All
1837 the code has been re-written - it is not just an edit of ncurses (or
1838 UNIX curses). I mention this to clarify any copyright violation claims.
1839 The data structures and ideas are very similar to ncurses. As for UNIX
1840 curses, I have not even seen any sources for it.
1842 For an introduction to the use of 'curses' and its derivatives, you
1843 should read 'Screen Updating and Cursor Movement Optimization: A Library
1844 Package' by Kenneth C. R. C. Arnold, which describes the original
1845 Berkeley UNIX version of curses. It is available as part of the UNIX
1846 manuals. The other source of information is 'The Ncurses Reference
1847 Manual' by Pavel Curtis. The latter is part of Curtis' ncurses package.
1849 The only other documentation provided is a 'man' page which describes
1850 all the included functions in a very terse way. In the sources, each
1851 function is preceded by a rather thorough description of what the
1852 function does. I didn't have time to write a nice manual/tutorial -
1855 PCcurses is released as a number of source files, a man page, and a
1856 make file. A uuencoded copy of a 'make' utility, and a manpage for the
1857 'make' is also provided to make it easier to put together PCcurses
1858 libraries. Even if you are not interested in PCcurses, it may be
1859 worthwhile to grab the make.
1861 The makefile assumes the presence of the Microsoft C compiler (3.0 or
1862 4.0), Microsoft MASM and LIB, plus some MS-DOS utilities. The reason for
1863 supplying MAKE.EXE is that the Microsoft 'MAKE:s' are much inferior to a
1864 real UNIX make. The supplied make is a port of a public domain make,
1865 published on Usenet. It is almost completely compatible with UNIX make.
1866 When generating the curses libraries, the makefile will direct make to
1867 do some directory creating and file copying, and then re-invoke itself
1868 with new targets. The workings of the makefile are not absolutely
1869 crystal clear at first sight... just start it and see what it does.
1871 For portability, the curses libraries depend on one assembler file for
1872 access to the BIOS routines. There is no support for the EGA, but both
1873 CGA, MGA, and the HGA can be used. The libraries are originally for
1874 Microsoft C, but all C modules should be portable right away. In the
1875 assembler file, segment names probably need to be changed, and possibly
1876 the parameter passing scheme. I think Turbo C will work right away - as
1877 far as I understand, all its conventions are compatible with Microsoft
1880 There are some parts left out between ncurses and PCcurses. One is the
1881 support for multiple terminals - not very interesting on a PC anyway.
1882 Because we KNOW what terminal we have, there is no need for a termcap or
1883 terminfo library. PCcurses also has some things that neither curses nor
1884 ncurses have. Compared to the original UNIX curses, PCcurses has lots of
1887 The BIOS routines are used directly, which gives fast screen updates.
1888 PCcurses does not do direct writes to screen RAM - in my opinion it is
1889 a bit ugly to rely that much on hardware compatibility. Anyone could fix
1892 One of the more serious problems with PCcurses is the way in which
1893 normal, cbreak, and raw input modes are done. All those details are in
1894 the 'charget' module - I do raw I/O via the BIOS, and perform any
1895 buffering myself. If an application program uses PCcurses, it should do
1896 ALL its I/O via PCcurses calls, otherwise the mix of normal and
1897 PCcurses I/O may mess up the display. I think my code is reasonable...
1898 comments are welcome, provided you express them nicely...
1900 To install, copy all files to a work directory, edit 'makefile' to
1901 define the standard include and library file directory names of your
1902 choice (these directories must exist already, and their path names must
1903 be relative to the root directory, not to the current one). You must
1904 also run uudecode on make.uu, to generate MAKE.EXE. You can do that on
1905 your PC, if you have uudecode there, otherwise you can do it under UNIX
1906 and do a binary transfer to the PC. When you have MAKE.EXE in your work
1907 directory (or in your /bin directory), type make.
1909 Make will now create 4 sub-directories (one for each memory model),
1910 copy some assembler include files into them, copy two include files to
1911 your include directory, CHDIR to each sub-directory and re-invoke itself
1912 with other make targets to compile and assemble all the source files
1913 into the appropriate directories. Then the library manager is run to
1914 create the library files in your desired library directory. Presto!
1916 If you only want to generate a library for one memory model, type
1917 'make small', 'make large', etc. The name of the memory model must be in
1918 lower case, like in the makefile.
1920 I think the package is fairly well debugged - but then again, that's
1921 what I always think. It was completed in May-87, and no problems found
1922 yet. Now it's your turn... Comments, suggestions and bug reports and
1923 fixes (no flames please) to