 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 collecter that
      occured 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 occured 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 GO <n> command when DBFNDX driver is used and the data
      type of <n> was DOUBLE, not LONG.

  49. Fixed the OrdName(0) so it would return the name of the 
      current controlling order when DBFNDX driver is used.

  50. Fixed the OrdNumber(<cOrdName>) when DBFNDX driver is used and 
      there is no <cOrdName> in the Order List.

  51. Fixed SET ALTERNATE so it generates a run-time error when there 
      is no space available on the disk.

  52. Fixed the STRTRAN() function so it no longer goes into an infinite 
      loop when the cSearch parameter is a zero length string.

  53. Fixed ALLTRIM() so it generates an error when given an argument 
      of the wrong type.

  54. Fixed the function DIRECTORY (, "V") so it does not pad the
      volume name with garbage, if its length is exactly 8 characters
      long.

  55. All commas contained in a GET's PICTURE clause are now copied into 
      the GET's edit buffer.

  56. When a GET's PICTURE clause contains an '@R', the number of 
	  editable positions in its edit buffer is now calculated 
	  correctly.

  57. When a GET's PICTURE clause contains an '@R', non-picture characters 
      beyond the last editable position are now displayed.

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

  59. A bug was fixed in which GETs that had a PICTURE clause containing a 
      leading '$' would sometimes display negative values with multiple 
      '$' characters.

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

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

  62. The ALERT() function now updates the LASTKEY status.

  63. Fixed ALERT() so that it no longer exhibits occasional problems 
      when fewer than four option strings are used.

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

  65. Fixed the 'SET FUNCTION <nnn> TO' command so that it will now
      accept strings that contain only white space.

  66. The SET DATE FORMAT code was modified so that the format string 
      must contain non-numeric delimiters between the month, day, and 
      year portions.

  67. Fixed the DEVPOS() function so that it now immediately responds 
      to an error condition.

  68. Fixed STUFF() so it will generate a run-time error when there is 
      insufficient virtual memory to create it's data buffer.

  69. Fixed  VAL("-.nnnn") so it does not return "******" now.

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

  71. Fixed DBU to respond to the <ENTER> key when BROWSEing a
      database in which none of the records match the filter condition.

  72. Fixed DBU so it does not go to an endless loop if, when VIEWing 
      an empty database, the user presses any character key.

  73. Fixed DBU to update and reopen indexes after PACKing or ZAPing 
	  a database.

  74. Fixed DBU so that BROWSE reflects the filter condition after
      PACKing or ZAPing a database.

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

  76. Fixed the REPORT FORM command without the TO PRINT clause so it 
      produces the printer output if SET PRINT ON command was
      previously issued.

  77. The multi-lines per record using ";" - method is now implemented.

  78. Fixed the number of lines on the first REPORT page to be the same 
      as the number of lines on the following pages.

  79. Fixed the REPORT FORM command not to do page eject after subgroup
      if page eject after group flag was set to TRUE.

  80. Fixed the REPORT FORM heading not to be truncated when page width
      is set to 61 or more characters.

  81. Fixed the CA-Clipper Debugger so it does not display garbage in
      the last line of the Monitor Window when <PgDn> was pressed.
