------------------------ CXL Revision History ------------------------ Version 5.1 - September 1, 1989 o Extended keyboard support for data entry functions. Allows you to extend and/or remap the keyboard during processing of data entry forms. o Extended the help system. You can now specify help window size and placement. The "*P" and "*E" markers in help files can now be trailed by whitespace and/or other ASCII characters. You can now move between help cross-reference items by pressing the first character of the help category you want to move to. You can now push an empty help category (0) onto the help category stack. o Improved mouse support in arrow-key emulation mode. o Complete CGA snow elimination (rather than just snow reduction) and increased CGA display output speed. o Improved menuing system. The menuing functions now handle menus with two or more menu items having the same selection character better. You can now close a menu's window before calling an item's selection function (not just after). The taginit value given in the wmenuend() function MUST now match a tagid of one of that menu's items. When menu item text descriptions are displayed, they automatically clear to the end-of-line (so you don't need to pad text desriptions with spaces). Added a few functions to make accessing CXL's menu data structures easier. o Improved data entry. Data entry fields are now processed in their definition order rather than automatically left-to-right. The Up and Down arrow keys are now "smarter". o Enhanced list picking functions. By popular demand, the wpickstr() and wselstr() functions have had an additional parameter, initelem, added to allow specifying the initial position of the selection bar. The wpickfile() function now displays subdirectories even when they don't match the input filespec. o Enhanced the menuing and list picking functions for better operation under DESQview. o The string trimming functions, strltrim() and strtrim() now trim whitespace as well as normal spaces. o The wprints() function no longer supports word-wrap. Use wputs(), wprintf(), or another TTY-style window output function instead. o The getchf() and wgetchf() functions now disregard the case of input letters. This means instead of having to use "YyNn" for the valid choice string, you can use just "YN". o Several bug/anomaly fixes. These include: - In the MSC version, when specifying a drive in the input filespec to wpickfile(), it would use that drive letter - 1. Thanks to Larry Wasserman. - In the ZTC version, the striinc() and strmatch() functions referenced a strnicmp() function, which is not in the standard ZTC library and would cause an unresolved reference linker error. This in-turn affected stridel(), strisocc(), and strisrep(). Thanks to Larry Marshall. - The strtrim() function could still trim past the start of the string if the string was all spaces. Thanks to Mike Davenport. - The hidecur() function didn't hide the cursor with certain EGA video adapters. Thanks to Ted Roberts. - In winpread(), a mode 2 field wouldn't work as expected if the previous field was completely filled. Thanks to Mike Davenport. - The wmessage() function didn't accurately perform bounds checking to make sure that the message would fit in the window. - The wwprints() function didn't translate monochrome attributes properly. Thanks to Bruce Rosner. - The whline() and wvline() functions didn't properly handle count values of 0 or 1 properly. Thanks to Glenn McDonald. - The wpickfile() function could stay in the wrong directory if it aborted with a W_NOMATCH error. Thanks to Joe McLain. - The wpickfile() function could possibly malfunction if used with directories that had an extension. Thanks to Rik Faith. - The _vinfo.dvexist variable was being set to 1 whether or not DESQview was actually loaded. Thanks to Eric Cockrell. - The wmenuicurr() macro-function would not return the correct menu item record during the menu item's "before" function. Thanks to Tim Ottinger. - The multi-field data entry functions would display the last field in the wrong color if its validation function returned error. Thanks to Eric Irwin. - Pulldown menu bars could not have 2 submenu-less items in a row. Thanks to Daniel Miller. - The 'F' and 'W' format control characters should have allowed a colon ':', but didn't. - The cvtfc() function was rounding fractional portion where it should have been truncating. o Added several new functions. See CXL.DOC for descriptions. cgardbyte() cgardword() cgareadn() cgawrbyte() cgawriten() cgawrstr() cgawrword() chgonkey() freonkey() setvparam() strbtrim() strdela() stridela() strischg() strschg() vidmode() wbprintc() wdrag() wgetyn() whelppcat() whelpundef() whelpwin() winpkey() wmenuidsab() wmenuienab() wmenuinext() wslide() wunlink() o The CXL library is no longer available for Power C. Power C's lack of conformance to the Microsoft .OBJ format has become too difficult to support. CXL version 5.0 will still be shipped to those requesting a Power C version. Version 5.0 - March 27, 1989 o Complete context-sensitive help system. Help information can contain multiple pages of help text per category and can be cross-referenced for flexibility and indexed for speed. o Shadowed windows. Windows can now have shadows. These shadows can be translucent so that they show the characters underneath. o The menuing functions have been significantly enhanced. Individual menu items can have sub-menus and/or functions tied into them. Pull-down and other multi-level menus are much easier to create. Individual menu selections can also be defined as nonselectable. Menu items can also have global hot keys. Menu items can have "before" and "after" functions. Mouse support in menus has been expanded. o The multi-field input functions have been significantly enhanced. They now properly support numeric data entry. Also, the behavior of several of the editing keys has been enhanced. A conditional update mode has been added. Input fields can have "before" and "after" functions. True Insert mode has been added. o Scrolling bar string picker allows you to create variable-sized "menus" of strings to pick from. Features mouse support including scroll bars. o File picker with same features as string picker. Allows movement between directories. Similar to the file pickers included in the Turbo C and QuickC environments. o The window TTY output string functions, such as wputs() and wprintf(), are now able to change colors, set cursor coordinates, and erase part or all of the window, using CXL's new window Escape sequences. These are similar to ANSI Escape sequences, but are much faster. o You are now able to write to blocked and hidden windows. o Automatic monochrome attribute translation. By default, if a monochrome adapter is detected by videoinit(), all color attributes will be mapped to their monochrome equivalents. This can be overridden via a switch. o CGA snow reduction has been put back into CXL. This is selectable via a global variable. Thanks to Patrick Bennett and Larry Kruse. o All video functions now work properly in nonstandard text modes such as 132x80 and 120x43. o The video adapter identifiers (CGA, EGA, etc.) are now prefixed with a "V_" to avoid conflicts with Borland's BGI definitions. Also, a few new video adapter identifiers were added. o There are now 4 different types of mouse support provided including a point-and-shoot mouse cursor as well as arrow-key emulation. o Mouse functions have been modified to use actual row and column cursor coordinates rather than X and Y pixel coordinates. This makes working with the mouse cursor much easier. o Internal keyboard buffer and support functions. This allows you to create keyboard scripts, force user input, etc., by "stuffing" keystrokes into CXL's internal keyboard buffer. o File encryption and decryption. Allows fast encryption and decryption of text and binary files. Thanks to Bob Stout. o Problems fixed. - The video functions were working under DESQview on some machines, but not others. Thanks to Jim Nutt. - The setlines() function was not returning to 25-line mode from VGA 50-line mode properly. Thanks to Larry Kruse. - The wunhide() function was unhiding the most recently hidden window, regardless of the given window handle. Thanks to Joshua Stern. - The strtrim() function could trim past the start of the string if the string was all spaces. Thanks to Curt Grimley. - The whline() function would not function properly when drawing on window row 0 of a borderless window starting on screen row 0. Thanks to Ted Roberts. - A certain error condition in wopen() could cause it to return without restoring memory it allocated. Thanks to Nelson Chenkin. - The tab character, when used in window TTY output functions, was advancing the cursor to the next tab column offset from the screen, not from window column 0. - In the systime() function, time codes 2 thru 4 would cause a return of "00" for hour during the midnight hour. Now they return "12". o New functions. See CXL.DOC for descriptions. cclrscrn() cvtcf() cvtci() cvtfc() cvtic() cxlver() fcrypt() getcursz() hidecur() kbclear() kbmhit() kbput() kbputs() lgcursor() mapattr() msbclear() mscondoff() mssupport() randfile() revsattr() scancode() showcur() smcursor() strchksum() strichksum() strisocc() strisrep() strljust() strrjust() strsocc() strsrep() wchkbox() wchkcol() wchkcoord() wchkrow() wdump() wdups() wfillch() whelpcat() whelpclr() whelpdef() whelpop() whelpopc() whelpush() whelpushc() windowat() windump() winpbeg() winpfba() winpfcurr() winpffind() wmenubeg() wmenubegc() wmenuend() wmenuiba() wmenuicurr() wmenuifind() wmenuitem() wmenuitxt() wmenumcurr() wpickfile() wpickstr() wprintsf() wputsw() wscrollbox() wselstr() wshadoff() wshadow() wtabwidth() wwprints() o Modified functions. See CXL.DOC for descriptions. msbpress() msbreles() msgotoxy() mshbounds() msmotion() msstatus() msvbounds() setonkey() strins() strsetsz() videoinit() whline() winpdef() wmenuget() wtitle() wunhide() wvline() o Deleted functions. The string selection functions, wsseldef() and wsselget(), were deleted because their operation can now be emulated using the new wselstr() function. The wsbounds() function was deleted because the new wscrollbox() function allows you to scroll specific regions of the window. o There are several new global variables, so to avoid possible name conflicts, and to organize them better, I grouped the old and new globals under new structure-type global variables. See CXL.DOC for descriptions of these new structure-type global variables. struct _kbinfo contains _kbloop, _kbuf, and _onkey. struct _vinfo contains _dvcheck, _vbios, and _videoseg. struct _winfo contains _werrno, _wesc, _whandle, _whrec, _wrec, and _wtotal. Version 4.1 - September 4, 1988 o Support for Mix Power C has been added. o Complete BIOS video support has been added. This will also serve as a temporary solution to the problem with the CGA snow reduction in CXL 4.0. o The window hiding/unhiding functions are now high level (use handles, not pointers). This makes the hiding and unhiding of windows much easier. o The internal mouse support has been enhanced. Mouse movement is smoother and there are no longer mouse "boundaries". Mouse button presses can no longer be queued. o Problems fixed. - Menuing and data entry functions weren't being properly supported on single line borderless windows. Thanks to Mark Hall. - The setkbloop() function was not working properly on systems without a mouse because of a bug in getxch(). - In sysdate(), date codes 3 & 4 were returning the same result. Thanks to Michael Hackman. - In systime(), time codes 2 & 3, the AM/PM indicator was not being changed from AM to PM until 1:00 PM. Thanks to John Metzker. o Modified functions. See CXL.DOC for descriptions. cvaltype() whide() wunhide() o Deleted functions. These functions were deleted because their roles have been assumed by other functions. boxd() filld() printcd() printsd() Version 4.0 - July 27, 1988 Initial release of CXL.