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 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 at 310-348-4400.
         

  This file contains:

      A. The instructions for applying the CA-Clipper 5.2d upgrade to any
         North American 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 list of problems resolved by 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:

   52DUSX.EXE           A self extracting ZIP file that may be 
                        downloaded from the CLIPPER forum (library 0)
                        on CompuServe. (GO CLIPPER).


   CONTENTS OF 52DUSX.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

   52DUSX.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 the 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.     Move to your DBU directory, define RTLINK's behavior and
          re-compile DBU.
          EXAMPLE:
                  A:\> C:
                  C:\> 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


   8.     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


   9.     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


   10.    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.


   11.    The update process is now complete.


   LIST OF UPDATED FILES:

          This is a list of all files that have changed since the
          release 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    516769 
          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 


          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     17716 
          FRMRUN   PRG     28257 
          LBLRUN   PRG      7192 


          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([<nWorkArea>]) when
      nWorkArea > 255.

  11. Fixed the GPF caused by function ORDKEY() with an invalid
      <cOrderName>.

  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-><field>

  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]" )                // <value>
             ? &( "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 <order>
                REPLACE <not a keyfield>
                SKIP()
                SET ORDER TO <another order>
                SKIP(-1)
                ? RECNO()

  33. Fixed the 'INDEX ON <exp> TO <file> WHILE <exp>' 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 <memo_field> 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 <cOrderName>
      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 <n> command when DBFNDX driver is used and the data
      type of <n> 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(<cOrdName>) when DBFNDX driver is used and 
      there is no <cOrdName> 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 <nnn> 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 <ENTER> 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 <PgDn> 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.

=============================================================================
=============================================================================