Regarding the first byte of a .DBF file and how to detect the version of xbase used (ie, the format of the rest of the file), the most comprehensive list I can compile is:
Byte 0 ----------- x xxx x 001 = 0x?1 not used 0 000 0 010 = 0x02 FoxBASE 0 000 0 011 = 0x03 FoxBASE+/dBASE III PLUS, no memo x xxx x 100 = 0x?4 dBASE 7 0 000 0 101 = 0x05 dBASE 5, no memo 0 011 0 000 = 0x30 Visual FoxPro 0 011 0 001 = 0x31 Visual FoxPro, autoincrement enabled 0 011 0 010 = 0x32 Visual FoxPro, Varchar, Varbinary, or Blob-enabled 0 100 0 011 = 0x43 dBASE IV SQL table files, no memo 0 110 0 011 = 0x63 dBASE IV SQL system files, no memo 0 111 1 011 = 0x7B dBASE IV, with memo 1 000 0 011 = 0x83 FoxBASE+/dBASE III PLUS, with memo 1 000 1 011 = 0x8B dBASE IV, with memo 1 000 1 110 = 0x8E dBASE IV with SQL table 1 100 1 011 = 0xCB dBASE IV SQL table files, with memo 1 110 0 101 = 0xE5 Clipper SIX driver, with SMT memo 1 111 0 101 = 0xF5 FoxPro 2.x (or earlier) with memo 1 111 1 011 = 0xFB FoxBASE (with memo?) | ||| | ||| | ||| | ||| Bit flags (not used in all formats) | ||| | ||| ----------------------------------- | ||| | +++-- bits 2, 1, 0, version (x03 = level 5, x04 = level 7) | ||| +------ bit 3, presence of memo file | +++-------- bits 6, 5, 4, presence of dBASE IV SQL table +------------ bit 7, presence of .DBT file
Which header format can be assumed by reading the initial .DBF byte? (Ie, does the file use a version 2 header, a version 3 to 5 header, or a version 7 header?) It's not at all clear what the best logic would be...
DBF Header: http://www.dbf2002.com/dbf-file-format.html
Example dbf access from basic, Yes BASIC ;)
http://www.angelfire.com/d20/quickbasic/UTIL/IMB9006.ZIP
The DBF's are virtually static in its header. Static until the start section of fields indicated in the same heading. The difference made between them given by different database engines derivatives (xbase) is the data types, optimization or storage formats (7.8 bits ASCII or 128 or any other difference ...). The format does not have versions (not a standard) simply revisions as software developers who created variants on their engines database (dbase foxpro vs vs clipper etc ...)
I apologize for the semi-automatic translation, but useful.