blob: eac3ae6d42599456fca715b7722ea2a77cfae1f5 (
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
|
/*
* 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>
/* Normal Palm typedefs */
typedef unsigned char UInt8;
typedef unsigned short UInt16;
typedef signed short Int16;
typedef unsigned long UInt32;
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
{
protected:
size_t file_length;
FILE* fin;
size_t recordpos(int);
size_t recordlength(int);
void gotorecordnumber(int);
DatabaseHdrType head;
bool openfile(const char* src);
Cpdb() : fin(NULL) {}
~Cpdb() { if (fin != NULL) fclose(fin); }
};
#endif
|