
SIx Driver 2.0 Release History
------------------------------

Rev 2.01.02

   MACH20    m6_AddScoped() was not releasing the memory it had allocated.

             This has been FIXED.

   SIX20     Sx_RollBack() failed if the current record was a newly appended
             record.

             This has been FIXED.

   SIX20     Sx_KeyGoto() was always positioning a M-RYO index on the first
             key for the record.

             This has been FIXED.

   CDX20     A unique set of appends and replaces caused a rare 1210 error.

             This has been FIXED.

   SIX20     Sx_File2BLOB() now correctly resolves child relations when it
             is attempting to go cold.

             This has been FIXED.

   SIX20     Both SIXCDX and SIXNSX were incorrectly positioning their
             indexes when the controlling order was a conditional index and
             the current record is changed so that it no longer is included
             in the conditional index and the current record was the only
             key in the index.

             This has been FIXED.

   SIX20     Storing a File with Sx_File2BLOB() that is larger than 64k can
             cause the next free block pointer in the .FPT file to be
             incorrect.  This can cause the .FPT to appear to be 4 Gb.

             This has been FIXED.

   SIX20     Packing a .FPT or .SMT file could cause the program to endlessly
             loop.  This only happened if there existed a memo entry over 64k.

             This has been FIXED.

   NSX20     Seeking for a value under SIXNSX could incorrectly report found
             if the search key was greater than the greatest key in the
             appropriate leaf node.  This happened very rarely.

             This has been FIXED.

   CDX20     SIXCDX requires that indexes be made of up of full 1024 byte
             blocks.  A 1010 error could occur if an index built in FOXPRO
             was an odd size and the data table was opened in READONLY mode.

             This has been FIXED.

   SIX20     Sx_DBFEncrypt and Sx_DBFDecrypt were not setting order to 0
             before they traversed the data table.  This could cause some
             records not to be included if the current index was a
             conditional index.

             This has been FIXED.

   SIX20     Both SIXCDX and SIXNSX were not correctly building a
             FOR !DELETED() index if the data table had been encrypted.

             This has been FIXED.

   CDX20     Sx_ClearOrder was not closing a non-structural index under
             SIXCDX.  SIXCDX was mistakenly identifying the index as
             structural, which cannot be explicitly closed.

             This has been FIXED.


Rev 2.01.01

   CDX20     The resizing of an index after an reindex caused the index to
             be incorrectly sized.  This caused 1011 (Write Errors) when the
             index was later updated (Replaces or Appends).

             This has been FIXED.



Rev 2.01.00

   SIX20     SIXCDX and SIXNSX have had rare duplicate memo pointer
             corruption as detected by MEMOTEST.  This has plagued us
             since the release of SIX Driver 1.50.  Just recently did
             we receive some code from a user that exhibited the problem.
             Two days later we had a fix.

             This has been FIXED.


   CDX20     The storage mechanism for the insertion of unique keys has
             improved.  IDX and CDX file remain smaller than before.

             This has been IMPROVED.

   CDX20     .FPT files now reuse block more efficiently.

             This has been IMPROVED.


   SIX20     SIXCDX and SIXNSX had an OrdBagName inconsistency with DBFNTX.
             SIX was striping the extension of a Order if one was passed to
             it.  This differed from DBFNTX.

             This has been CHANGED.

   NSX20     A GPF could occur under SIXNSX when a system did hundreds of
             thousands of replaces.

             This has been FIXED.

   CDX20     SIXCDX was not correctly determining that an index was a
             structural index.  This caused locking problems when a user
             had two separate workstations who were accessing the same data
             table and one workstation had opened the table with
             Sx_AutoOpen(.F.) and one workstation with Sx_AutoOpen(.T.).

             This has been FIXED.

   SIX20     Performing a ZAP on a dbf file would not cause the indexes to
             shrink in size.  A reindex was occurring but the index files
             were not truncated.

             This has been FIXED.

   SIX20     Sx_WildSeek() was failing on descending indexes.

             This has been FIXED.

   SIX20     SIX 2 was incorrectly setting EOF() if a workstation was on the
             last record in the database and then another workstation
             appended a new record.  The subsequent skip on the original
             workstation resulted in EOF() being set to .T.

             This has been FIXED.

   SIX20     Sx_WildSeek() was failing with SET DELETED ON and when the
             search would have resulted on a deleted record.

             This has been FIXED.

   SIX20     When switching from an index with keys in scope to a conditional
             index with no keys would cause SIX 2 to position the data
             table on record 1 instead of LastRec+1.

             This has been FIXED.

   SIX20     Sx_Compress() could cause GPFs of the same string has
             recompressed over and over again.  Typically it would occur
             if the result string returned from Sx_Compress() was
             recompressed over 100 times.

             This has been FIXED.

   SIX20     DBRUNLOCK() was not unlocking an implicitly locked record if
             dbrunlock() was passed the record number to unlock.

             This has been FIXED.

   SIX20     Sx_SkipUnique() was not properly positioning the record pointer
             when skipping backwards.

             This has been FIXED.

   SIX20     Sx_SkipUnique() was not properly setting BOF() when skipping
             backwards.

             This has been FIXED.

   MACH20    MachSix 2 has been optimized to work with 286 and higher
             processors.

Rev 2.00.02

   SIX20     Six 2.00 has been optimized to work with 286 and higher
             processors.

             This has been CHANGED.

   SIX20     Explicitly unlocking an appended blank record on a large data
             table, greater than 175,000 records, could cause the reccount
             in the data header to become corrupt.

             This has been FIXED.

   CDX20     Key storage has been improved for CDX files.  This results
             in even smaller CDX files.

             This has been IMPROVED.

   CDX20     A key could be placed out of order if the following
             conditions are true: 1. The key has to be a unique key that
             was not already in the index.  2. The key that directly
             precedes the new insert must be a duplicate except for the
             last non trailing blank character.  That character must
             be one less in ascii value in the existing key than in
             the new key.

             This has been FIXED.

   SIX20     Passing ORDNUMBER() "" for the order name would return
             the current order number.  To be more compliant with
             DBFNTX ORDNUMBER("") will now return a 0.

             This has been CHANGED.

   SIX20     Setting a scope to a value one less than the first
             key in the index would cause a lockup when a go bottom
             is issued.

             This has been FIXED.

   CDX20     Indexes created with SIXCDX 2.00 were not 100% compatible
             with SIXCDX 1.50.

             This has been FIXED.

   CDX20     Two functions that have been in SIx 2.0 since it's initial
             release were erroneously left out of the .NG file.  These
             functions are Sx_SeekLast() and Sx_SkipUnique().  They have
             been added to the .NG in this rev.

             This has been ADDED.

   MACH20    When using a continue with a non optimizable expression an
             GPF would occur.

             This has been FIXED.


Rev 2.00.01  Initial International Release

   SIX20     An incorrectly positioned record occurred when a goto
             LastRec + 1 and then a skip -1 was performed.  With an
             index active the index would incorrectly position itself
             on the first record.  This mainly occurred in
             custom TBrowse code.

             This has been FIXED.

   NSX20     Discovered data dependant indexing error that caused a rare
             GPF.  Symbol pointed to was __NSXCOMPRESSKEY.

             This has been FIXED.

   SIX20     Doing a seek on a value with a filter set would fail if the
             index active was a Multi-Key RYO and the first record that
             would satisfy the seek was not in the filter.

             This has been FIXED.

   SIX20     Calling OrdCreate directly could cause a GPF if the order bag
             name that was passed in did not contain an extension.

             This has been FIXED.

   SIX20     The obsolete function SETRDD() was placed back in the library.
             Some third party developers were depending on this function
             in their library.  This function is still marked as obsolete
             and may not appear in future releases.

             This has been CHANGED.

   SIX20     When at BOF and with an active index and active filter, the next
             skip 1 would position to the wrong record.

             This has been FIXED.

   SIX20     Sx_File2Blob() would blank out the fields of a record if the
             data table had not been positioned since opening.  Storing
             any value to the record would cure this problem.

             This has been FIXED.

   SIX20     Sx_File2Blob() would incorrectly compute the next free memo
             block when the file being stored exceeded 64k.

             This has been FIXED.



Rev 2.00.00  Initial US Release
