summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-reader/pdb.h
blob: a0abd1b00e5f349cdc8da3f1f6edabfe27689261 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101

/*
 * This header file defines some structures and types normally found in the
 * Palm SDK.  However, I don't want to require the presense of the SDK for a
 * small utility since most Palm owners won't have it.
 *
 * $Id$
 *
 */

#ifndef __PDB_H__
#define __PDB_H__

#ifndef _WINDOWS
#include <netinet/in.h>
#endif
#include <stdio.h>

#include "CExpander.h"

/* Normal Palm typedefs */
#include "mytypes.h"
typedef UInt32          LocalID;

/* Max length of DB name */
#define dmDBNameLength 0x20


/************************************************************
 * Structure of a Record entry
 *************************************************************/
typedef struct {
    LocalID localChunkID;         // local chunkID of a record
    UInt8   attributes;           // record attributes;
    UInt8   uniqueID[3];          // unique ID of record; should
                                // not be 0 for a legal record.
} RecordEntryType;


/************************************************************
 * Structure of a record list extension. This is used if all
 *  the database record/resource entries of a database can't fit into
 *  the database header.
 *************************************************************/
typedef struct {
    LocalID nextRecordListID;     // local chunkID of next list
    UInt16  numRecords;           // number of records in this list
    UInt16  firstEntry;           // array of Record/Rsrc entries 
                                // starts here
} RecordListType;


/************************************************************
 * Structure of a Database Header
 *************************************************************/
typedef struct {
    UInt8   name[dmDBNameLength]; // name of database
    UInt16  attributes;           // database attributes
    UInt16  version;              // version of database
    UInt32  creationDate;         // creation date of database
    UInt32  modificationDate;     // latest modification date
    UInt32  lastBackupDate;       // latest backup date
    UInt32  modificationNumber;   // modification number of database
    LocalID appInfoID;            // application specific info
    LocalID sortInfoID;           // app specific sorting info
    UInt32  type;                 // database type
    UInt32  creator;              // database creator
    UInt32  uniqueIDSeed;         // used to generate unique IDs.
                                //   Note that only the low order
                                //   3 bytes of this is used (in
                                //   RecordEntryType.uniqueID).
                                //   We are keeping 4 bytes for
                                //   alignment purposes.
    RecordListType recordList;    // first record list
} DatabaseHdrType;


class Cpdb : public CExpander
{
 protected:
    size_t file_length;
    FILE* fin;
    size_t recordpos(int);
    size_t recordlength(int);
    void gotorecordnumber(int);
    DatabaseHdrType head;
    bool openpdbfile(const char* src);
    Cpdb() : fin(NULL) {}
    ~Cpdb();
#ifdef USEQPE
    void suspend();
    void unsuspend();
#else
    void suspend() {}
    void unsuspend() {}
#endif
 public:
    virtual void sizes(unsigned long& _file, unsigned long& _text) = 0;
};
#endif