Personal Ancestral File format (PAF)


NAME

PAF Data - Personal Ancestral File Data Formats.


DATES

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) );

INDIVIDUAL TABLE

    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.

INTEGERS

Each integer is a unsigned 2-byte value.


MARRIAGE TABLE

    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.

NAME 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.

NOTE 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

Sex is a 1-byte field. 0 = Female. 1 = Male.


TEXT OF NOTES

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

Place is a 4-integer field. These values are 4 keys into the name table, or 0.


AUTHOR

This document was written by Ron Savage <rpsavage@ozemail.com.au> in 1997.