Dear CA-Clipper 5.2 Developer, The CA-Clipper 5.2d/ExoSpace 1.0f upgrade described in this file contains latest fixes for CA-Clipper and CA-Clipper/ExoSpace. This includes an updated version of the DBFMDX driver revised to be compatible with the CA-Clipper/Compiler Kit. The DBFMDX database collation drivers are now CA-Clipper/ExoSpace compatible also. The DBFCDX driver has not been changed. We are currently working on a separate patch for it. It will be published as soon as it is ready. If you have any questions, please contact your CA-Clipper Level-1 Technical Support representative. This file contains: A. The instructions for applying the CA-Clipper 5.2d upgrade to any International version of CA-Clipper 5.2 including: 5.20, 5.2a, 5.2b or 5.2c. It also contains instructions for applying the CA-Clipper 5.2d/ ExoSpace 1.0f upgrade. This is needed ONLY if you have a previous version of ExoSpace installed on your system. If you DO NOT have ExoSpace already installed, please answer NO to the question "Do you have ExoSpace installed" during the upgrade process and only the Clipper files will be updated. Please review the file list below and the UPDATE PROCESS instructions carefully before applying the upgrade. B. The problem resolutions contained in CA-Clipper 5.2d. ============================================================================= A. Instructions for upgrading Clipper 5.2 (any rev.) to 5.2d (rev. 215) and ExoSpace (any installed version) to 1.0f version. REQUIRED FILE FOR PERFORMING UPDATE: 52DIX.EXE A self extracting ZIP file that may be downloaded from the CLIPPER forum (library 0) on CompuServe. (GO CLIPPER). CONTENTS OF 52DIX.EXE: INSTALL.DAT Installation script file. INSTALL.EXE Installation engine required for performing the CA-Clipper 5.2d upgrade. PATCH.EXE Updating engine required for use with all the *.RTPs. This file is also in Library 0 of the CLIPPER CompuServe forum. DISK.ID Installation identification file. 52DINC.LIF Compressed update file for CLIPPER5\INCLUDE 52DOBJ.LIF Compressed update file for CLIPPER5\OBJ 52DDBU.LIF Compressed update file for CLIPPER5\SOURCE\DBU 52DRL.LIF Compressed update file for CLIPPER5\SOURCE\RL 52DSAMPL.LIF Compressed update file for CLIPPER5\SOURCE\SAMPLE 52DSYS.LIF Compressed update file for CLIPPER5\SOURCE\SYS 52DERROR.LIF Compressed update file for CLIPPER5\SOURCE\ERROR 52DFISYS.LIF Compressed update file for CLIPPER5\SOURCE\FILESYS 52DITEM.LIF Compressed update file for CLIPPER5\SOURCE\ITEM 52DSDX.LIF Compressed update file for CLIPPER5\SOURCE\SDX 52DVM.LIF Compressed update file for CLIPPER5\SOURCE\VM CLP52BIN.RTP Update file for CLIPPER5\BIN CLP52LIB.RTP Update file for CLIPPER5\LIB CLP52NG.RTP Update file for NG 52DIX.TXT Instructions for upgrading to CA-Clipper 5.2d/ExoSpace 1.0f and the list of problem resolutions (This file). THE FOLLOWING FILES ARE FOR PERFORMING EXOSPACE UPDATE: EXO10F.RTP Update file for ExoSpace EXNG-10F.RTP Update file for ExoSpace NG UPDATE PROCESS: 1. Move to your CA-Clipper 5.2 directory. EXAMPLE: C:\> CD\CLIPPER5 2. Backup your current version of CA-Clipper. Do the same for ExoSpace IF you already have it installed. 3. If you have Clipper 5.2, 5.2a, 5.2b or 5.2c AND have any problems installing the upgrade, please reinstall Clipper from the original disks and reapply the upgrade. To determine the version of Clipper that you currently have. At the DOS prompt type Clipper then press return At the top of the screen, there will be the copyright header with the version number. 4. Execute the installation program and follow its simple instructions. EXAMPLE: A:\> INSTALL - or - EXAMPLE: C:\> A:INSTALL NOTE: All the files that are upgraded must be on the same drive. 5. After the installation program has run successfully compare the date and time stamps of the updated files against the LIST OF UPDATED FILES section. 6. If you have applied the CA-Clipper 5.2d upgrade in a directory other than the one into which you installed the original CA-Clipper 5.2 version, you must make sure that your PATH, INCLUDE, OBJ, and LIB environment variables have been correctly set to point to the updated version of CA-Clipper. Example: (Scenario: You installed CA-Clipper 5.2 in C:\CLIPPER5 and later renamed the directory (or moved the files) to C:\CLIP52D.) A:\ SET PATH=C:\CLIP52D\BIN A:\ SET INCLUDE=C:\CLIP52D\INCLUDE A:\ SET OBJ=C:\CLIP52D\OBJ A:\ SET LIB=C:\CLIP52D\LIB NOTE: You should also change these settings in your AUTOEXEC.BAT file. 7. If you are using the CA-Clipper 5.2 International Nation Modules, run NATION.BAT to extract the 5.2d versions of these files. See NATION.DOC in your \CLIPPER5 directory for detailed instructions. 8. Move to your DBU directory, define RTLINK's behavior and re-compile DBU. EXAMPLE: A:\> C: C:\NG> CD \CLIPPER5\SOURCE\DBU C:\CLIPPER5\SOURCE\DBU> SET RTLINKCMD= C:\CLIPPER5\SOURCE\DBU> SET CLIPPERCMD= C:\CLIPPER5\SOURCE\DBU> RMAKE DBU /F Copy DBU.EXE to your BIN directory. EXAMPLE: C:\CLIPPER5\SOURCE\DBU> COPY DBU.EXE C:\CLIPPER5\BIN 9. Move to your RL directory, re-compile RL. EXAMPLE: C:\CLIPPER5\SOURCE\DBU> CD \CLIPPER5\SOURCE\RL C:\CLIPPER5\SOURCE\RL> RMAKE RL /F Copy RL.EXE to your BIN directory. EXAMPLE: C:\CLIPPER5\SOURCE\RL> COPY RL.EXE C:\CLIPPER5\BIN 10. Move to your PE directory, re-compile PE. EXAMPLE: C:\CLIPPER5\SOURCE\RL> CD \CLIPPER5\SOURCE\PE C:\CLIPPER5\SOURCE\PE> RMAKE PE /F Copy PE.EXE to your BIN directory. EXAMPLE: C:\CLIPPER5\SOURCE\PE> COPY PE.EXE C:\CLIPPER5\BIN 11. Move to your PLL directory, rebuild BASE52.PLL and BASE52.PLT. EXAMPLE: C:\CLIPPER5\SOURCE\PE> CD \CLIPPER5\PLL C:\CLIPPER5\PLL> RTLINK @BASE52 Do not become alarmed if the message: "Undefined Symbols... should be resolved at EXE generation" appears during this step. 12. The update process is now complete. LIST OF UPDATED FILES: This is a list of all files that have changed since the release of CA-Clipper 5.2. CA-Clipper 5.2d upgrade marks all CA-Clipper files with a date stamp of 03-25-94 and a time stamp of 5:24am. ExoSpace upgrade IF APPLIED marks TWO files listed below with a date stamp of 4-21-94 and a time stamp of 1:06am. Now it is easy to check if the upgrade applied properly. The exception are files from \PLL and \SOURCE\PE subdirectories. They have never been changed and have a date stamp of 02-15-93 and a time stamp of 5:20am. The files DBU.EXE, RL.EXE, PE.EXE, BASE52.PLL and BASE52.PLT will have the date and time stamp of when they were most recently rebuilt. The following subdirectories are created (if they do not exist) under the SOURCE directory for API sample files. SDX, ERROR, FILESYS, ITEM and VM. Directory of C:\CLIPPER5\BIN CLD HLP 19677 CLD EXE 54415 CLIPPER EXE 198968 Directory of C:\CLIPPER5\INCLUDE ACHOICE CH 951 CLIPDEFS H 1703 EXTEND H 238 INKEY CH 8579 RDDSYS CH 342 STD CH 51453 Following files are added for API ERROR API 2090 Error System API header file EXTEND API 2194 Extend System API header file FILESYS API 2652 File System API header file FM API 811 Fixed Memory API header file GT API 2734 General Terminal API header file ITEM API 1802 Item API header file RDD API 27716 RDD API header file RULES RMK 2312 Common RMAKE dependencies file VM API 1093 Virtual Memory API header file Directory of C:\CLIPPER5\LIB ANSITERM LIB 12321 CLD LIB 80719 CLIPPER LIB 519373 DBFCDX LIB 107993 DBFMDX LIB 90757 DBFNDX LIB 27175 DBFNTX LIB 38977 EXTEND LIB 127931 NOVTERM LIB 13857 PCBIOS LIB 14369 SAMPLES LIB 53891 TERMINAL LIB 14369 Directory of C:\CLIPPER5\OBJ CDXLOCK OBJ 6679 CT2PATCH OBJ 4703 NTXLOCK2 OBJ 302 CHOOSE COM 96 NATION BAT 3674 NAT_OBJ EXE 116116 Directory of C:\CLIPPER5\SOURCE\DBU DBU PRG 24063 DBUCOPY PRG 17556 DBUEDIT PRG 22484 DBUNET PRG 8931 DBUVIEW PRG 67609 Directory of C:\CLIPPER5\SOURCE\RL RL RMK 436 RLBACK PRG 40489 RLDIALG PRG 10626 RLFRONT PRG 40165 Directory of C:\CLIPPER5\SOURCE\SAMPLE BROWSE PRG 10294 STUFF C 2982 TBDEMO PRG 12398 Directory of C:\CLIPPER5\SOURCE\SYS FRMBACK PRG 17723 FRMRUN PRG 28808 LBLRUN PRG 7554 Directory of C:\CLIPPER5\SOURCE\SDX: README SDX 13564 RDD API Sample code SDX C 43468 " " SDX H 3876 " " SDX RMK 951 " " SDXDYN ASM 1944 " " SDXINIT PRG 300 " " SDXINTER C 7781 " " Directory of C:\CLIPPER5\SOURCE\ERROR: FILEOPEN C 2714 Error API Sample code Directory of C:\CLIPPER5\SOURCE\FILESYS: FILEOPEN C 2714 Filesys API Sample code Directory of C:\CLIPPER5\SOURCE\ITEM: CC C 1410 Item API Sample code CCTST PRG 641 " " CCTST RMK 436 " " DFUNC C 1356 " " DFUNCTST PRG 584 " " DFUNCTST RMK 428 " " ISDBL C 609 " " ISDBLTST PRG 1229 " " ISDBLTST RMK 475 " " TESTBED PRG 854 " " UACLN C 1888 " " UACLNTST PRG 1274 " " UACLNTST RMK 435 " " UARRY C 1863 " " UARRYTST PRG 1180 " " UARRYTST RMK 443 " " UEVAL C 893 " " UEVALTST PRG 2121 " " UEVALTST RMK 479 " " YESNO C 837 " " Directory of C:\CLIPPER5\SOURCE\VM: BOOTREAD PRG 603 VM API Sample code BOOTREAD RMK 245 " " BOOTSEC C 1996 " " CCVM C 1372 " " CCVMTST PRG 661 " " CCVMTST RMK 440 " " HEXAMP C 1122 " " TESTBED PRG 854 " " VCOPYTST PRG 863 " " VCOPYTST RMK 462 " " VMCOPY C 12498 " " ExoSpace files (if installed) EXOSPACE EXE 642835 EXOSPACE NG 110905 ============================================================================= B. Problems resolved by CA-Clipper 5.2d: 1. Fixed a VMIF in the Object Memory Manager. This occurred in low memory situations when the OMM took space from the VM segment that it was attempting to expand. 2. Fixed a GPF/VMIF in the Object Memory Manager's garbage collector that occurred when there were a large number of static variables. 3. Fixed the FIELDPOS() function so that it no longer returns misleading results when passed an invalid argument. 4. Fixed bug in oStrDup() where an incorrect number of bytes were being copied to an incorrect location for dedicated VM segments. 5. Fixed a VMIF in the Object Memory Manager that occurred when performing an incremental garbage collection on an array that had just satisfied the requirement for occupying its own dedicated VM segment. 6. Fixed a GPF that occurred when growing the class/dictionary table. This happens when instantiating a class or creating a dictionary when the dictionary/class table is full. 7. Fixed the RDD manager so it does not become corrupted when the VMM swaps its data to disk. This occurred only in a very low memory situation. 8. Panning right in a TBROWSE containing a single frozen column no longer causes TBROWSE to go into an infinite loop when trying to redisplay. 9. Fixed a GPF in TbrowseNew() and TbrowseDB() in certain memory configurations. 10. Fixed a GPF in the function ALIAS([]) when nWorkArea > 255. 11. Fixed the GPF caused by function ORDKEY() with an invalid . 12. Fixed the SET DELETED ON command so that it does not affect record visibility on a network. 13. Fixed the SORT command so that it deallocates the memory it allocated before returning control to its caller. 14. Fixed internal errors 650, 775 and 999 that occurred when the compiler did not produce correct code for statements that contained an extra set of parentheses. EXAMPLE: (( Test() )) 15. Fixed C3039 PHASE ERROR in the compiler that occurred when a .PRG source file contained several static variables that were inline initialized to a codeblock. EXAMPLE: static Var1 := { | x | func1( x ) } static Var2 := { | x | func2( x ) } static Var3 := { | x | func3( x ) } 16. Fixed a lockup in the compiler that occurred when a .PRG had a large number of STATIC variables. 17. Fixed the compiler so that /Z switch has effect on expressions that contain constants. 18. Fixed the compiler so it will not produce the "C3050 Something terrible has happened" error when it encounters a user defined function whose argument is being negated. Example: MyUDF( -X ) 19. Fixed a problem in the compiler that allowed it to accept illegal comment blocks. EXAMPLE: /**/*/ 20. Fixed the compiler so it now generates an error when it encounters one of the following incorrect control blocks: IF...ELSE...ELSE...ENDIF IF...ELSE...ELSEIF...ENDIF 21. Fixed the compiler to generate an error when it encounters the following statement: Alias->Alias-> 22. Fixed the compiler so it does not generate an error when it encounters an expression containing multiple NOTs. EXAMPLE: iff( ! ! .t., .t., .f. ) 23. Fixed the compiler so it does not generate an error when it encounters a statement in which an aliased expression contains extra parenthesis: (MyFunc())->DBFfield or: ? (MyFunc())[x] 24. Fixed the compiler so it will not produce the "C2005 Statement not recognized match failed at: '&'" error when it encounters the following: @ nCol, nRow SAY "string" + &(macro_expression) 25. Fixed evaluating a macro that contains an alias caused a syntax error in the next macro evaluation. EXAMPLE: ? &( "aTest[1]" ) // ? &( "test->( RECNO() )" ) ? &( "aTest[1]" ) // Syntax error - & 26. Fixed a lockup that occurred when a memvar was created within a macro. The scope of that memvar was incorrect, it expanded to the upper lever procedure. EXAMPLE: &("MEMVAR->dummy") := 666 27. Fixed a lockup that occurred when using a macro to expand an expression, that contains an alias. EXAMPLE: &(alias(1))->( Recno() ) 28. Fixed SELECT() so it now returns 0 when passed an invalid parameter. 29. Fixed DBCREATE() so it generates a run-time error when it is passed an unknown RDD name instead of hanging the system. 30. Fixed The USE command so it does not upper-case convert the contents of the variable which is used in VIA clause. 31. Fixed DBCREATE() so it generates a run-time error when there is not enough space on a drive. 32. Fixed the database/index synchronization as in the following example: SET ORDER TO REPLACE SKIP() SET ORDER TO SKIP(-1) ? RECNO() 33. Fixed the 'INDEX ON TO WHILE ' command so it does not create only one record in the scoped index (regardless how many meet the WHILE condition) when the current index order was used, and the most recent DBF movement was not an index movement (SKIP, SEEK). 34. Fixed the updating of the conditional .NTX file when a field, that was not in the key expression, was updated. 35. Fixed index file update failure on complex key expression when the multiple fields were being concatenated as a key and the key field(s) value(s) were subsequently changed. 36. Fixed the 'REPLACE WITH' command so it will not cause a program to lock up if it attempts to write memo information to disk with insufficient space. 37. Fixed the following commands: COPY TO...SDF, COPY TO...DELIMITED APPEND FROM...SDF, APPEND FROM...DELIMITED so they do not hang the system when the DEFAULT option is chosen from the 'cannot open/create file' error message. 38. Fixed the COPY TO [ SDF | DELIMITED ] command so it does not close the current workarea when the DEFAULT option is chosen from the 'cannot open/create file' error message. 39. Fixed the COPY TO command when the current database is the child of a relation and there is a pending seek. 40. Fixed CREATE FROM & COPY STRUCTURE so they work when the target is a disk drive designator and file name without a backslash. EXAMPLE: C:FileName 41. Fixed the APPEND FROM SDF command so it would ignore null-characters when it reads SDF-file. 42. Fixed TBrowse so that 'hitBottom' would report .T. if an attempt was made to go past the end of the available data when there are not enough records to completely fill the TBrowse display and refreshAll() is invoked prior to stabilization. 43. The decimal portion of the field definition for date, logical and memo fields is now initialized. 44. Fixed the function ORDSETFOCUS() to ignore an invalid as per documentation. 45. Fixed the function ORDSETFOCUS() to return an empty string when a database has no controlling order and the DBFNDX driver is used. 46. Fixed the function INDEXKEY() to return an empty string when there was no database opened in a workarea. 47. Fixed the functions ORDBAGNAME(), ORDNAME(), ORDNUMBER(), ORDKEY(), ORDFOR() to provide an argument type checking. The following run-time errors are generated when one or more of the arguments are of the wrong type: Error DBCMD/1021 Argument error: ORDBAGNAME Error DBCMD/1022 Argument error: ORDFOR Error DBCMD/1023 Argument error: ORDKEY Error DBCMD/1024 Argument error: ORDNAME Error DBCMD/1025 Argument error: ORDNUMBER 48. Fixed the inconsistency between OrdSetFocus("") and OrdSetFocus(0). Now OrdSetFocus("") also restores the natural order. 49. Fixed OrdNumber("") so that it returns zero rather than the number of orders for the workarea when DBFNDX driver is used. 50. Fixed the GO command when DBFNDX driver is used and the data type of was DOUBLE, not LONG. 51. Fixed the OrdName(0) so it would return the name of the current controlling order when DBFNDX driver is used. 52. Fixed the OrdNumber() when DBFNDX driver is used and there is no in the Order List. 53. Major revisions have been made to the DBFMDX driver to rectify the problems in the previous versions. 54. Fixed SET ALTERNATE so it generates a run-time error when there is no space available on the disk. 55. Fixed the STRTRAN() function so it no longer goes into an infinite loop when the cSearch parameter is a zero length string. 56. Fixed ALLTRIM() so it generates an error when given an argument of the wrong type. 57. Fixed the function DIRECTORY (, "V") so it does not pad the volume name with garbage, if its length is exactly 8 characters long. 58. All commas contained in a GET's PICTURE clause are now copied into the GET's edit buffer. 59. When a GET's PICTURE clause contains an '@R', the number of editable positions in its edit buffer is now calculated correctly. 60. When a GET's PICTURE clause contains an '@R', non-picture characters beyond the last editable position are now displayed. 61. When a GET's PICTURE clause contains a paren, a leading paren in its edit buffer now causes the value to be parsed as a negative number. 62. A bug was fixed in which GETs that had a PICTURE clause containing a leading '$' would sometimes display negative values with multiple '$' characters. 63. The size of a GET's edit buffer no longer increases if its PICTURE clause contains a paren, and a negative value is entered into its edit buffer. 64. In the #command for GET, the smart stringify result marker was replaced by a normal stringify result marker. The previous use of the smart stringify marker had caused parsing problems whenever an aliased variable was used in a GET command. 65. The ALERT() function now updates the LASTKEY status. 66. Fixed ALERT() so that it no longer exhibits occasional problems when fewer than four option strings are used. 67. Fixed FSEEK() so that it rejects requests that would cause the resulting absolute file position to become negative. In such cases the current file position is left unchanged and an error flag is set; the value of this flag can be retrieved by calling the FERROR() function. 68. Fixed the 'SET FUNCTION TO' command so that it will now accept strings that contain only white space. 69. The SET DATE FORMAT code was modified so that the format string must contain non-numeric delimiters between the month, day, and year portions. 70. Fixed the DEVPOS() function so that it now immediately responds to an error condition. 71. Fixed STUFF() so it will generate a run-time error when there is insufficient virtual memory to create it's data buffer. 72. Fixed VAL("-.nnnn") so it does not return "******" now. 73. Fixed DBU so it does not go to an endless loop if there is a filter set on a field and if GOTO is used and a record number is given that is not one of the records matching the filter. 74. Fixed DBU to respond to the key when BROWSEing a database in which none of the records match the filter condition. 75. Fixed DBU so it does not go to an endless loop if, when VIEWing an empty database, the user presses any character key. 76. Fixed DBU to update and reopen indexes after PACKing or ZAPing a database. 77. Fixed DBU so that BROWSE reflects the filter condition after PACKing or ZAPing a database. 78. Fixed the REPORT FORM command's sub-grouping feature when the name of the last subgroup in a group was the same as the name of the next group. 79. Fixed the REPORT FORM command without the TO PRINT clause so it produces the printer output if SET PRINT ON command was previously issued. 80. The multi-lines per record using ";" - method is now implemented. 81. Fixed the number of lines on the first REPORT page to be the same as the number of lines on the following pages. 82. Fixed the REPORT FORM command not to do page eject after subgroup if page eject after group flag was set to TRUE. 83. Fixed the REPORT FORM heading not to be truncated when page width is set to 61 or more characters. 84. Fixed the CA-Clipper Debugger so it does not display garbage in the last line of the Monitor Window when was pressed. 85. Fixed RLOCK() and DBRLOCK() so that it would not fail if the database was the child of a relation and there was a pending seek. 86. Fixed the failure of the RLOCK() function when invoked after a successful FLOCK() on an open shared database. ============================================================================= =============================================================================