blob: 1ca5e73ea1175bf1e49d18634e5b3ea5759cf7ef (
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
|
/*
Derived from makedoc9 by Pat Beirne
*/
#ifndef __Aportis_h
#define __Aportis_h
#include "CExpander.h"
#include "pdb.h"
typedef UInt32 DWORD;
typedef UInt16 WORD;
#define DISP_BITS 11
#define COUNT_BITS 3
/*
// all numbers in these structs are big-endian, MAC format
struct tDocHeader {
char sName[32];
DWORD dwUnknown1;
DWORD dwTime1;
DWORD dwTime2;
DWORD dwTime3;
DWORD dwLastSync;
DWORD ofsSort;
DWORD ofsCatagories;
DWORD dwCreator;
DWORD dwType;
DWORD dwUnknown2;
DWORD dwUnknown3;
WORD wNumRecs;
};
*/
struct tDocRecord0 {
WORD wVersion; // 1=plain text, 2=compressed
WORD wSpare;
DWORD dwStoryLen; // in chars, when decompressed
WORD wNumRecs; // text records only; equals tDocHeader.wNumRecs-1
WORD wRecSize; // usually 0x1000
DWORD dwSpare2;
};
struct PeanutHeader
{
UInt16 Version;
UInt8 Junk1[6];
UInt16 Records;
UInt8 Junk2[106];
};
////////////// utilities //////////////////////////////////////
inline WORD SwapWord(WORD r)
{
return (r>>8) + (r<<8);
}
inline DWORD SwapLong(DWORD r)
{
return ((r>>24) & 0xFF) + (r<<24) + ((r>>8) & 0xFF00) + ((r<<8) & 0xFF0000);
}
class Aportis : public CExpander, Cpdb {
bool peanutfile;
void dePeanut(int&);
DWORD dwLen;
WORD nRecs2;
DWORD dwTLen;
WORD nRecs;
WORD BlockSize;
DWORD dwRecLen;
int currentrec, currentpos;
unsigned int cbptr;
unsigned int outptr;
unsigned char circbuf[2048];
char bCompressed;
public:
virtual void sizes(unsigned long& _file, unsigned long& _text)
{
_file = dwLen;
_text = dwTLen;
}
virtual bool hasrandomaccess() { return true; }
virtual ~Aportis() {}
Aportis();
virtual int openfile(const char *src);
virtual int getch();
virtual unsigned int locate();
virtual void locate(unsigned int n);
virtual CList<Bkmk>* getbkmklist();
virtual MarkupType PreferredMarkup()
{
return (peanutfile) ? cPML : cTEXT;
}
private:
bool refreshbuffer();
unsigned int GetBS(unsigned int bn);
};
#endif
|