[net.micro.cpm] Correction to dBase II files.

BLC%jpl-vax@sri-unix.UUCP (10/02/83)

From:  Bruce L. Conroy <BLC@jpl-vax>

After additional analysis, I have found several typos and ambiguities
in the dBase II file structure I sent out before. Here is a
corrected version. Please accept my apologies for the former errors.

STRUCTURE OF DBASE II FILES

Based on an analysis of several CP/M type data files,
the structure of dBase II files appears to be as follows:

1)   Bytes 0 to 7; General Header
          Byte 0, always 2--Purpose unknown
          Bytes 1-2, number of records, binary, low, hi
          Bytes 3-5, date of last update, (mo, day, year), binary
          Bytes 6-7, number of bytes per record, binary, low, hi
               (This is the number reported as TOTAL by DISP STRU,
               it is one more than the sum of the field widths due
               to the extra blank added to each record.)

2)   Bytes 8 to 519; Field Headers
     16 Bytes per Field, up to 32 Fields.
     Relative Byte in each Header
          Bytes 0-9, Name, ASCII, padded with NULLS
               (<CR> as first byte marks end of Fields)
          Byte 10, always 0
          Byte 11, Type, ASCII, C N or L
          Byte 12, Width, Binary, 1 for Logical
          Bytes 13-14, 70B9H + Sum of Widths of Preceeding Fields
               (Possibly an in-memory pointer)
          Byte 15, Decimal Places, binary, 0 for C and L Types

3)   Byte 520; Normally 0, <CR> (0DH) in data base with 32
          fields (this would be the first byte of a 33rd field.)

4)   Bytes 521 on; Data, ASCII, Number of Bytes Bytes per Record
     Each Data record begins with a blank (20H), followed by the
     fields in order, with no intervening blanks or nulls. Thus
     the BPR (bytes per record) is 1 plus the sum of the widths.

Thus the start of the Nth record (starting at 0) of a file with
BPR bytes per record is at byte 521 + N * BPR + 1.

5)   End of data is marked by ^Z (1AH) instead of blank in the first
position.
------