The DBF data file format is still same. However, the DBT format has been
changed with regard to deleted memo records. In Bullet 2.x, deleted memos
kept their size state -- in other words, if a memo had 400 data bytes
then its size was kept as 408 (8 bytes of overhead; the memo size routine
returned the data bytes' size, or 400). In Bullet 3, deleted memos have
their size (as stored in the memo file itself) converted to blocks. So,
that 408-byte memo would have its memo size (again, as stored in the memo
file) set to 1, for one block (block size defaults to 512 bytes). This
affects deleted memos only. The optional VALIDATE.EXE
program
can be used to convert memo files from Bullet 2.x to Bullet 3 and back (only
needed if there are deleted memos; packing the database to remove deleted
memos is another way). Be sure to read the Validate documentation before
doing any conversion.
Multi-threaded access is no longer guarded by Bullet. Instead, the programmer is given the task of ensuring that multiple access of a handle pack (TBLT_DH or TBLT_KH) is serialized. B2 serialized access to Bullet itself at the process level; B3 lets the programmer serialize at the handle level, meaning multiple threads may be inside Bullet at any one time (B2 allowed only one thread per process in its code at any one at a time). The TBLT_KH/TBLT_DH structures include a slot, .mutexHandle, for a semaphore, though Bullet itself does not use it. The supplemental documentation covers this more.