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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
/*
** Text to Doc converter for Palm Pilots
** palm.h
**
** Copyright (C) 1998 Paul J. Lucas
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef palm_H
#define palm_H
/* standard */
#include <time.h>
/*****************************************************************************
*
* Define integral type Byte, Word, and DWord to match those on the
* Pilot being 8, 16, and 32 bits, respectively.
*
*****************************************************************************/
typedef unsigned char Byte;
#if SIZEOF_UNSIGNED_SHORT == 2
typedef unsigned short Word;
#else
#error machine does not seem to support a 16-bit integral type
#endif
#if SIZEOF_UNSIGNED_INT == 4
typedef unsigned int DWord;
#elif SIZE_OF_UNSIGNED_LONG == 4
typedef unsigned long DWord;
#else
#error machine does not seem to support a 32-bit integral type
#endif
/********** Other stuff ******************************************************/
#define dmDBNameLength 32 /* 31 chars + 1 null terminator */
#define RECORD_SIZE_MAX 4096 /* Pilots have a max 4K record size */
#ifdef HAVE_TIME_H
#define palm_date() (DWord)(time(0) + 2082844800ul)
#else
#define palm_date() 0
#endif
/*****************************************************************************
*
* SYNOPSIS
*/
struct RecordEntryType
/*
* DESCRIPTION
*
* Every record has one of these headers.
*
* SEE ALSO
*
* Christopher Bey and Kathleen Dupre. "Palm File Format Specification,"
* Document Number 3008-003, Palm, Inc., May 16, 2000.
*
*****************************************************************************/
{
DWord localChunkID; /* offset to where record starts */
struct {
int delete : 1;
int dirty : 1;
int busy : 1;
int secret : 1;
int category : 4;
} attributes;
Byte uniqueID[3];
};
typedef struct RecordEntryType RecordEntryType;
/*
** Some compilers pad structures out to DWord boundaries so using sizeof()
** doesn't give the right result.
*/
#define RecordEntrySize 8
/*****************************************************************************
*
* SYNOPSIS
*/
struct RecordListType /* 6 bytes total */
/*
* DESCRIPTION
*
* This is a PDB database header as currently defined by Palm, Inc.
*
* SEE ALSO
*
* Ibid.
*
*****************************************************************************/
{
DWord nextRecordListID;
Word numRecords;
};
typedef struct RecordListType RecordListType;
#define RecordListSize 6
/*****************************************************************************
*
* SYNOPSIS
*/
struct DatabaseHdrType /* 78 bytes total */
/*
* DESCRIPTION
*
* This is a PDB database header as currently defined by Palm, Inc.
*
*****************************************************************************/
{
char name[ dmDBNameLength ];
Word attributes;
Word version;
DWord creationDate;
DWord modificationDate;
DWord lastBackupDate;
DWord modificationNumber;
DWord appInfoID;
DWord sortInfoID;
char type[4];
char creator[4];
DWord uniqueIDSeed;
RecordListType recordList;
};
typedef struct DatabaseHdrType DatabaseHdrType;
#define DatabaseHdrSize 78
#endif /* palm_H */
|