/* * XPPW32E2.TXT * * Service Level 2 notes for Xbase++ Version 1.20.178 * for Window NT and Windows 95/98 (WIN32T) * * International Edition * * Date: 10/27/1999 * */ ____________________________________ 0. Information for beta participants In this section you find important information that applies to the different beta builds of Xbase++ Service Level 2. You find latest information at the top of this section. Note that this information is cumulative, e.g. information for build 204 is also valid for build 205. ----- information for build 212 ------ a) This patch can only be applied to Xbase++ version 1.20.178 which is Service Level 1. b) You can order a new product CD that includes a complete installation version of Xbase++ Service Level 2 for a fee of US$ 25.- (DM 50.-) c) There are new example programs in these directories: ..\SAMPLES\BASICS\PRESPARA ..\SAMPLES\BASICS\QBROWSE ----- information for build 210 ------ a) *** !!! V E R Y I M P O R T A N T !!! *** You must rebuild your index files to make sure that your application will not be affected by PDR 3342 that is closed with build 210. Under certain circumstances the OrdCreate() function has created a corrupt index file. You cannot be sure that your index files are free of errors unless you rebuild all indexes from scratch. b) The PagedDataStore class was renamed to DacPagedDataStore to reflect its relation to the Data Access Chain. This breaks the code you have written for XBpQuickBrowse. The former PagedDataStore class function must be prefixed with DAC. c) The XbpCrt class has got the following new methods :currentPos() , :setPos() :getFrameState(), :setFrameState() :toBack() , :toFront() :isVisible() This caused these instance variables and methods to become obsolete: :xPos, :xSize, :yPos, :ySize :minimize(), :maximize() For compatibility reasons, they are still supported but will be dropped from a later Xbase++ release. Please make sure to replace in your code: :xPos and :yPos with :currentPos() :xSize and :ySize with :currentSize() :minimize() and :maximize() with :setFrameState() d) In the XbpMenuBar class, changes are made on callback code blocks and methods (this affects XbpMenu as well, since it is derived from XbpMenuBar): :activateItem is renamed to :itemSelected for consistency reasons. The old name is still supported in order not to break code, but you should rename :activateItem to :itemSelected to be prepared when the iVar is dropped in a later release. :itemMarked is new and indicates that a menu item is hilighted. :beginMenu and :endMenu are new. e) The methods :setColRepresentation() and :getColRepresentation() of the XbpQuickBrowse and XbpMultiCellgroup classes are changed. This allows for defining two different images to be displayed for a given value. One image is used if a row is highlighted, the other is used for normal display of rows in a browser column. f) The presentation parameters of all Xbase Parts are revised. They support foreground and background colors and react to changes made in the system control panel due to their revised default color settings. Refer to the new chapter "Presentation Parameters for Xbase Parts" in the online documentation for details. You can link to it from the "list of changes window" The basic mechanism of presentation parameters is demonstrated in the new example program \BASICS\XBPSTYLE\PRESPARA.PRG To see an example of colored entry fields refer to the new example program \BASICS\XBPSTYLE\SLESTYLE.PRG g) There is a new example program \BASICS\GUIEVENT\SHUTDOWN.PRG that demonstrates how to react to, or reject, a system shutdown. h) Changes are made in the example directory \SOLUTION\XBPGET :renamed EDITCOL.PRG is renamed to GETCOL.PRG :added COMBOCOL.PRG = How to use a combobox for editing in a browser SPINCOL.PRG = How to use a spinbutton for editing in a browser MLECOL.PRG = How to use a multi line edit for text editing in a browser COLTEST.PRG = Test program for the above :changed XBPGET.PRG = XbpGet has received an own context menu i) The OrdKeyNo() function is no longer recommended to be used when browsing indexed databases with XbpBrowse. oXbpBrowse:posBlock := {|| OrdKeyNo() } This approach results in a slow browser response, especially when large databases are displayed. To speed the browser up, it has received a new instance variable :goPosBlock so that a relative navigation is possible when the vertical scrollbar is used for browsing. This is the recommended replacement for OrdKeyNo(): oXbpBrowse:posBlock := {| | DbPosition() } oXbpBrowse:goPosBlock := {|n| DbGoPosition(n) } ----- information for build 205 ------ a) Windows 98 is now an officially supported platform for Xbase++. The (really hard to find) reason for the 0x0E exception causing blue screens -especially when debugging an Xbase++ application- has been identified, resolved, and proven to be gone with beta build 204. Alaska Software officially announces Xbase++ to work under Windows 95, 98 and NT (Win2000 looks very promising so far). b) CLOSEPDR.TXT is now divided into separate build sections so that PDRs closed in a particular release can be identified more easily. c) The "show stopping" PDRs in the area of database and index operations that slipped into build 204 are closed. Please refer to the CLOSEPDR.TXT file and test all related PDRs extensively. d) The Caps-Lock PDR 3032 is closed. Since this dependends on the country settings, please make sure that Caps-Lock works in your environment. e) The management of presentation parameters is optimized. If you find anomalies in this area, immediately report them in our beta news group. f) The default presentation parameters of XbpQuickBrowse are changed so that the browser looks more system compliant in its default appearance. ----- information for build 204 ------ a) This patch overwrites all files in the ..\XPPW32\SAMPLES directory tree, except for the files located in the ..\XPPW32\SAMPLES\DATA directory. If you have made changes in example source code files, you must copy them into another directory if you want to keep the changes. b) One #define constant of DMLB.CH to be used for the FieldInfo() function changed its meaning. If you use the constant FLD_TYPE in your programs and pass it to FieldInfo(), the function returns a character instead of a numeric value. To get the numeric value, the new constant FLD_TYPE_AS_NUMERIC must be used. ----- information for build 200 ------ a) Pbuild is fixed so that it recognizes the OBJ_DIR setting correctly. However, this requires all file names listed in the section between $START-AUTODEPEND and $STOP-AUTODEPEND not to include any path information. Only the file names with extensions are allowed. We recommend to run PBuild once using the -g switch, so that the dependencies are correctly updated in a Project file. ----- information for earlier builds ------ a) Refer to the section #5B below ____________ 1.0 Overview This file contains important information about the installation procedure of this Service Level beta version. You can find a list of changes in the section "Important notes" below and in the chapter "Changes" of the Xbase++ online documentation. The list of the closed PDRs is found in CLOSEPDR.TXT ____________________________________ 2.0 Check your existing installation Please make sure you have the following product completely installed: - Xbase++ 1.20.178 Intl. If this is not the case, install Xbase++ completely new from your CD-ROM and apply the Service Level 1, if necessary. To display the current version number of your Xbase++ installation type on the DOS prompt: [C:\ALASKA\XPPW32]xppload version Please see chapter 6 how to contact Alaska Software. 2.1 NOTE FOR BLINKER 5.x USERS If you have copied the ..\LIB\OMF files into the ..\LIB directory, you must copy the files from the directory ..\LIB\COFF back into ..\LIB before you proceed with the Service Level installation. Due to some support issues we do not recommend any more to copy the OMF libraries into the ..\LIB directory when Blinker is used. Instead, we recommend to change the LIB environment variable so that it points to the appropriate directory: SET LIB=..\LIB\OMF 2.2 NOTE FOR limited beta participants This patch cannot be applied to the intermediate beta release versions of Xbase++ but only to version 1.20.178 (Service Level 1) _______________________________ 3.0 Copy the Service Level file Download the appropriate file to your computer: XPPW32E2.EXE - International Now, copy the file XPPW32E2.EXE to the root path of your current Xbase++ installation. [C:\ALASKA\XPPW32]copy \\XPPW32E2.EXE .\ _____________________ 4.0 Apply the changes The XPPW32E2.EXE is a self-extracting archive with an auto-start feature. It unpacks the necessary files and applies all changes automatically. To install the Service Level 2, enter on the DOS prompt: [C:\ALASKA\XPPW32]XPPW32E2.EXE Pay attention if error messages are displayed during the installation and/or check the SERVICE.LOG file for error messages. The patch works incrementally. If you cancel the process or if an error occurs which you are able to resolve, you can restart the process at any time by entering on the DOS prompt: [C:\ALASKA\XPPW32]SERVICE.EXE To check a succesful patch, call on the DOS prompt: [C:\ALASKA\XPPW32]XppLoad version The resulting output should display the release number 1.30.212. ___________________ 5.0 Important notes A) Recompile and link everything Before you run an executable with Service level 2 you must recompile all your source code files, otherwise your application will fail! Use "PBuild -a" to rebuild an entire project. If something does not work after a first re-build, please make sure that there are no binary "leftovers" from a previous Xbase++ version somewhere on your system (OBJ, LIB, DLL files) that are "accidentially" linked. B) Changes since Xbase++ 1.20.178 1. Database performance Database access speed improved drastically. DatabaseEngines use now a dynamic approach for I/O caching. This has reduced memory-consumption significantly. In fact, DBEs consume up to 6 times less cache memory than in Xbase++ 1.2. The database-kernel of the Xbase++ runtime features now an optimized merge/sort engine. This results in increased performance of DbSort(), DbCreateIndex(), OrdCreate() operations. Specifically long key-values or large data-sets will be reindexed faster than with Xbase++ 1.2. 2. Code generation The Xbase++ compiler optimizes operation execution for all LOCAL variables which are not detached. This leads not only to a faster code execution but also to a smaller code size and reduces linker fixups. A code block was formerly known as a sequence of pseudo codes, which, in turn, were executed at runtime. In certain cases, the compiler is now capable of generating native code linked to the code block, but keeps the pseudeo code as well. The macro-compiler optimizes simple expressions which results in a significant speed improvement by the factor of 10 or more, depending on the macro-expression. A lot of string operations could be improved, which results in speed gain and saved memory. You will discover the most extreme acceleration when executing inline string concatenations like: c := "" FOR i:= 0 TO 100000 c += "Hi" NEXT 3. Memory management and GUI resources The memory manager is improved to arrange the memory blocks more tightly and, thus, save memory against the operating system's virtual memory manager. It also detects if there are pages of unused memory over time and releases them back to the OS. The boost methods for the garbage collector were changed to behave properly for most of the application scenarios. An internal cache/resource manager for GUI resources is added which has reduced the consumption of GUI resources from the operating system N times, depending on the application type. It also provides automatic resource reuse strategies to avoid the Windows 95/98 GUI resource problems which are intrinsic to these operating-system family. 4. Compiling The Xbase++ compiler accepts as command line parameters multiple PRG file names or a script file containing a list of PRG files. xpp file1.prg file2.prg /link xpp @list.txt /link Pbuild makes use of this feature already which decreases your turn-around time up to 50%. 5. STD.CH All database related commands are changed in order to perform "early binding" when a macro expression is used as a command parameter. This improves the speed of commands like cFilter := "My Filter Expression" SET FILTER TO &cFilter 6. DBESYS.PRG In addition to DBFDBE and NTXDBE, the DatabaseEngines DELDBE and SDFDBE are loaded as default DBEs. 7. Event handling Callback methods are changed from "asynchronous" to "synchronous" mode. That means: if you derive a class from an Xbase Part that has a default event-handler and overload an event-handling method, the corresponding default event-handling method is NOT executed unless you call the same method in the super class. We have included some PRGs to demonstrate this important change. Have a look at the new example programs: ..\SAMPLES\BASICS\GUIEVENT\USERPBN.PRG ..\SAMPLES\BASICS\GUIEVENT\USERSLE.PRG ..\SAMPLES\SOLUTION\CALCSLE\CALCSLE.PRG NOTE: The callback code blocks are treated as in the previous version. I.e. an event is handled before the corresponding code block is executed. 8. XPF and XFF files The file format for XPF files (XFF files of the FormDesigner) is changed. SL2 detects the old XPF format and converts it to the new one, i.e. SL2 is downwards compatible and existing XPF and XFF files can still be read. However, Xbase++ versions prior to SL2 cannot read the new file format (SL1 cannot read XPF files created by SL2, but SL2 can read XPF files created by SL1). 9. XbpGet class We have refined the XbpGet class in terms of Pre and Post validation. You can define Pre and Post validation rules for an XbpGet object, no matter whether it resides in a modal or modeless window. However, the "XbpGet is in a modeless window" situation required us to add an XbpGetController class that handles focus changes between single XbpGet objects. That means: you have to adjust your code that uses the XbpGet class. An XbpGet object does not work without the aid of an XbpGetController object. Both classes, XbpGet and XbpGetController, are included in PRG source code (see ..\SAMPLES\SOLUTION\XBPGET). If you are interested in the Xbase++ internal works, take the chance and study the files XBPGET.PRG and XBPGETC.PRG carefully. They demonstrate how you can customize an entry field to the utmost extent using Xbase++ base classes. 10. XbpBrowse is editable You can build an editable browser with the XbpBrowse class since the required methods are refined and documented now. However, the editing issue does not affect the XbpBrowse but the XbpColumn class, which has got methods required for editing a single cell of a browser column (see the "Changes in documentation" online-help window). We have included two new example programs which demonstrate how to make an XbpBrowse() based browser editable. The example PRGs implement an editable XbpGetColumn class that uses XbpGet objects for editing within an XbpBrowse object. The XbpGetColumn class is derived from the XbpColumn class (Xbase++ at its best). We recommend to study carefully: ..\SAMPLES\SOLUTION\XBPGET\GETCOL.PRG ..\SAMPLES\SOLUTION\XBPGET\EDITBROW.PRG 11. XbpColumn components are doc'ed The "secret" of the XbpColumn class is lifted: the XbpCellGroup class is documented and available for you. Note that we consider the XbpCellGroup class as a class providing services to other classes. XbpCellGroup objects are useful as components of other objects, but are almost useless on their own. However, embedding three XbpCellGroup objects in an XbpStatic object makes up something like an XbpColumn object. Now you can build the browser class you always wanted to have. 12. The Quick Browser is there A new browser class is available for quick browsing of (huge) databases. It is named (guess what?) XbpQuickBrowse() and follows a completely different approach than the XbpBrowse class, because it uses an object as its data source. It does not operate directly on a data base, or work area, but requires the services of the new DacPagedDataStore() class. Once you become familiar with the XbpQuickBrowse class you will notice the trade-off when your goal is speed: there is less comfort in customizing the browser compared to the XbpBrowse class. The reason is that only one XbpMultiCellGroup() object displays all data to be browsed. This requires much less GUI resources compared to the XbpBrowse class, where one XbpColumn object is used for each browser column. Using only one object for all browser data is a major factor for speed gain and loss of comfort. We recommend to use XbpBrowse for a customized browser and XbpQuickBrowse for fast browsing, as it is required in a look-up table, for example. 13. Online Help The online help is further enhanced with a window displaying functions and commands by the group they belong to. This offers you another possibility to search for a particular function. The new window is opened via the "See also" button in the main help window. 14. XbpCrt:configure() A change made in the :configure()-method of XbpCrt objects now causes the text screen buffer to be preserved by the operation. This may cause problems in applications that assume that the window is cleared after :configure(). To clear an XbpCrt window, CLS can be used. 15. XbpWindow:setFontCompoundName() The return value of the :setFontCompoundName() method now reflects the font actually set. This may introduce problems for applications that make assumption about the return value of this function, such as expecting it to always return the same string as was passed to the function. 16. GRA_CLR_BROWN + SetColor( "GR" ) The color produced when specifying GRA_CLR_BROWN was incompatible in that it did not match the appropriate color in the standard VGA palette. Furthermore, the color wasn't present in the system palette (not a standard system color) causing GRA_CLR_BROWN to be mapped to some shade of red on systems using 256 colors. This pertains to both applications that used GRA_COLOR_BROWN for GRA output as well as to text or hybrid mode applications that specified the respective color via the SetColor() function. This was changed to conform to the standard VGA palette. However, since the correct color is slightly different from the color used previously, this may cause problems for applications that rely on that specific color. _________________________________ 6. How to contact Alaska Software Please use the following news group to send your feedback about this release to us: news://news.alaska-software.com/alaska-software.news.xbase++ Thank you and enjoy SL2! Your Alaska Xbase++ Team