PAF Data - Personal Ancestral File Data Formats.
Each date is a 4-byte (0 .. 3) bit field.
year = ( (date[0] & 0x0F) << 4) + ( (date[1] & 0xF0) >> 4) + date[3]; month = ( (date[1] & $07) << 1) + (date[2] >> 7); // 1 .. 12. day = ( (date[2] & $7C) >> 2); valid = ( (day != 0) || (month != 0) || (year != 0) );
Record size: 92 bytes.
Bytes Size Type Interpretation 0- 1 2 Integer Key of surname in name table 2- 3 2 Integer Key of given name 1 in name table 4- 5 2 Integer Key of given name 2 in name table 6- 7 2 Integer Key of given name 3 in name table 8- 9 2 Integer Key of title in name table 10-10 1 Byte Sex 11-14 4 Date Date of birth 15-22 8 Place Place of birth 23-34 12 Christening. Date 4 + Place 8? 35-38 4 Date Date of death 39-46 8 Place Place of death 47-50 4 Date Date of burial 51-58 8 Place Place of burial 59-72 14 Unknown 73-73 1 Unknown 74-75 2 Integer Key of sibling in individual table, or 0 76-77 2 Integer Key of marriage in marriage table, or 0 78-89 12 Unknown 90-91 2 Integer Key of note in note table, or 0
Notes: File name: 'DATA\INDIV2.DAT'. Records are numbered 0 .. N. Record 0 is ignored.
Each integer is a unsigned 2-byte value.
Record size: 28 bytes.
Bytes Size Type Interpretation 0- 1 2 Integer Key of husband in individual table, or 0 2- 3 2 Integer Key of wife in individual table, or 0 4- 5 2 Integer Youngest child's individual record, or 0 6- 9 4 Date Date of marriage 10-17 8 Place Place of marriage 18-22 5 Unknown 23-24 2 Integer Husband's next marriage record, or 0 25-26 2 Integer Wife's next marriage record, or 0 27-27 1 Unknown
Notes: File name: 'DATA\MARR2.DAT'. Records are numbered 0 .. N. Record 0 is ignored. Record numbers 1 .. N are used in other tables as keys into this table.
Record size: 20 bytes.
Bytes Size Type Interpretation 0- 1 2 Unused 2-18 17 Byte Name terminated by '\0' 19-19 1 Unused
Notes: File name: 'DATA\NAME2.DAT'. Records are numbered 0 .. N. Record 0 is ignored. Record numbers 1 .. N are used in other tables as keys into this table.
Record size: 256 bytes.
Bytes Size Type Interpretation 0- 1 2 Integer Record number for next note in chain, or 0 2-253 254 Byte Text of note
Notes: File name: 'DATA\NOTES2.DAT'. Record numbers 1 .. N are used in other tables as keys into this table.
Sex is a 1-byte field. 0 = Female. 1 = Male.
Notes are a series of strings, each terminated by 0x00. Some strings have length 0.
So, scan each note byte-by-byte, constructing these strings. Steps:
If the 1st byte of the note is 0x00, stop processing.
For each byte in the note: If the byte is = 0x00, and the length of the string is > 0x00, add this string to the note, and reset the string. If the byte is > 0x01, add the character to the string.
If the record number of the next note is > 0x00, process the next note.
Place is a 4-integer field. These values are 4 keys into the name table, or 0.
This document was written by Ron Savage <rpsavage@ozemail.com.au> in 1997.