Format
------

A PDB file can be broken into multiple parts. The header, record 0 and data.
values stored within the various parts are big-endian byte order. The data
part is broken down into multiple sections. The section count and offsets
are referenced in the PDB header. Sections can be no more than 65505 bytes in
length.


Layout
------

PDB files take the format: DB header followed by the record 0 which has
contained format specific iformation followed by data.

    DB Header
0   Record 0
.
.   Data (broken down into sections)
.


Palm Database Header Format

bytes   content             comments 

32      name                database name. This name is 0 terminated in the
                            field and will be used as the file name on a
                            computer. For eBooks this usually contains the
                            title and may have the author depending on the
                            length available.

2       attributes          bit field.
                            0x0002 Read-Only
                            0x0004 Dirty AppInfoArea
                            0x0008 Backup this database (i.e. no conduit exists)
                            0x0010 (16 decimal) Okay to install newer over
                                    existing copy, if present on PalmPilot
                            0x0020 (32 decimal) Force the PalmPilot to reset
                                    after this database is installed
                            0x0040 (64 decimal) Don't allow copy of file to be
                                    beamed to other Pilot.

2       version             file version

4       creation date       No. of seconds since start of January 1, 1904.

4       modification date   No. of seconds since start of January 1, 1904.

4       last backup date    No. of seconds since start of January 1, 1904.

4       modificationNumber

4       appInfoID           offset to start of Application Info (if present)
                            or null

4       sortInfoID          offset to start of Sort Info (if present) or null

4       type                See above table. (For Applications this data will
                            be 'appl')

4   	creator             See above table. This program will be launched if
                            the file is tapped

4       uniqueIDseed        used internally to identify record

4       nextRecordListID    Only used when in-memory on Palm OS. Always set to
                            zero in stored files.

2       number of Records   number of records in the file - N

8N      record Info List

        start of record
        info entry          Repeat N times to end of record info entry

4       record Data Offset  the offset from the start of the PDB of this record

1       record Attributes   bit field. The least significant four bits are used
                            to represent the category values. These are the
                            categories used to split the databases for viewing
                            on the screen. A few of the 16 categories are
                            pre-defined but the user can add their own. There
                            is an undefined category for use if the user or
                            programmer hasn't set this.
                            0x10 (16 decimal) Secret record bit.
                            0x20 (32 decimal) Record in use (busy bit).
                            0x40 (64 decimal) Dirty record bit.
                            0x80 (128, unsigned decimal) Delete record on
                                  next HotSync.

3       UniqueID            The unique ID for this record. Often just a
                            sequential count from 0

        end of record
        info entry

2?      Gap to data        traditionally 2 zero bytes to Info or raw data

?       Records            The actual data in the file. AppInfoArea (if
                           present), SortInfoArea (if present) and then
                           records sequentially

