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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
|
\hypertarget{xbmemo_8h_source}{}\doxysection{xbmemo.\+h}
\label{xbmemo_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbmemo.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbmemo.h}}
\mbox{\hyperlink{xbmemo_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbmemo.h}}
\DoxyCodeLine{2 \textcolor{comment}{}}
\DoxyCodeLine{3 \textcolor{comment}{XBase64 Software Library}}
\DoxyCodeLine{4 \textcolor{comment}{}}
\DoxyCodeLine{5 \textcolor{comment}{Copyright (c) 1997,2003,2014,2022 Gary A Kunkel}}
\DoxyCodeLine{6 \textcolor{comment}{}}
\DoxyCodeLine{7 \textcolor{comment}{The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.}}
\DoxyCodeLine{8 \textcolor{comment}{}}
\DoxyCodeLine{9 \textcolor{comment}{Email Contact:}}
\DoxyCodeLine{10 \textcolor{comment}{}}
\DoxyCodeLine{11 \textcolor{comment}{ XDB-\/devel@lists.sourceforge.net}}
\DoxyCodeLine{12 \textcolor{comment}{ XDB-\/users@lists.sourceforge.net}}
\DoxyCodeLine{13 \textcolor{comment}{}}
\DoxyCodeLine{14 \textcolor{comment}{*/}}
\DoxyCodeLine{15 }
\DoxyCodeLine{16 }
\DoxyCodeLine{17 \textcolor{preprocessor}{\#ifndef \_\_XB\_XBMEMO\_H\_\_}}
\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_XBMEMO\_H\_\_}}
\DoxyCodeLine{19 }
\DoxyCodeLine{20 }
\DoxyCodeLine{21 \textcolor{comment}{// dont use "{}\#pragma interface"{} with abstract classes}}
\DoxyCodeLine{22 \textcolor{comment}{// \#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
\DoxyCodeLine{23 \textcolor{comment}{// \#pragma interface}}
\DoxyCodeLine{24 \textcolor{comment}{// \#endif}}
\DoxyCodeLine{25 }
\DoxyCodeLine{26 \textcolor{preprocessor}{\#ifdef XB\_MEMO\_SUPPORT}}
\DoxyCodeLine{27 }
\DoxyCodeLine{28 }
\DoxyCodeLine{29 }
\DoxyCodeLine{30 }
\DoxyCodeLine{31 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
\DoxyCodeLine{32 }
\DoxyCodeLine{34 }
\DoxyCodeLine{55 \textcolor{keyword}{class }XBDLLEXPORT xbMemo : \textcolor{keyword}{public} xbFile \{}
\DoxyCodeLine{56 \textcolor{keyword}{public}:}
\DoxyCodeLine{57 }
\DoxyCodeLine{58 xbMemo( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf, xbString \textcolor{keyword}{const} \&sFileName );}
\DoxyCodeLine{59 }
\DoxyCodeLine{60 \textcolor{comment}{/* virtual methods */}}
\DoxyCodeLine{61 \textcolor{keyword}{virtual} \string~xbMemo();}
\DoxyCodeLine{62 \textcolor{keyword}{virtual} xbInt16 Abort () = 0;}
\DoxyCodeLine{63 \textcolor{keyword}{virtual} xbInt16 CloseMemoFile ();}
\DoxyCodeLine{64 \textcolor{keyword}{virtual} xbInt16 Commit () = 0;}
\DoxyCodeLine{65 }
\DoxyCodeLine{66 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
\DoxyCodeLine{67 \textcolor{keyword}{virtual} xbInt16 LockMemo ( xbInt16 iLockFunction );}
\DoxyCodeLine{68 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetMemoLocked () \textcolor{keyword}{const};}
\DoxyCodeLine{69 \textcolor{preprocessor}{ \#endif}}
\DoxyCodeLine{70 }
\DoxyCodeLine{71 \textcolor{comment}{/* pure virtual methods */}}
\DoxyCodeLine{72 \textcolor{keyword}{virtual} xbInt16 CreateMemoFile () = 0;}
\DoxyCodeLine{73 }
\DoxyCodeLine{74 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString \&sMemoData ) = 0;}
\DoxyCodeLine{75 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 \&ulMemoFieldLen ) = 0;}
\DoxyCodeLine{76 \textcolor{keyword}{virtual} xbInt16 OpenMemoFile () = 0;}
\DoxyCodeLine{77 \textcolor{keyword}{virtual} xbInt16 GetMemoFileType();}
\DoxyCodeLine{78 \textcolor{keyword}{virtual} xbInt16 PackMemo ( \textcolor{keywordtype}{void} (*memoStatusFunc)(xbUInt32 ulItemNum, xbUInt32 ulNumItems)) = 0;}
\DoxyCodeLine{79 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField( xbInt16 iFieldNo, \textcolor{keyword}{const} xbString \&sMemoData ) = 0;}
\DoxyCodeLine{80 }
\DoxyCodeLine{81 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
\DoxyCodeLine{82 \textcolor{keyword}{virtual} xbInt16 DumpMemoFreeChain() = 0;}
\DoxyCodeLine{83 \textcolor{keyword}{virtual} xbInt16 DumpMemoHeader () = 0;}
\DoxyCodeLine{84 \textcolor{preprocessor}{ \#endif}}
\DoxyCodeLine{85 }
\DoxyCodeLine{86 \textcolor{comment}{// *********** FIXME *************}}
\DoxyCodeLine{87 \textcolor{comment}{// next two methods should be protected but are called in the xb\_test\_xxxx programs testing routines}}
\DoxyCodeLine{88 \textcolor{comment}{// so for now, they are kept as public}}
\DoxyCodeLine{89 \textcolor{keyword}{virtual} xbInt16 CalcLastDataBlock ( xbUInt32 \&lLastDataBlock );}
\DoxyCodeLine{90 \textcolor{keyword}{virtual} xbInt16 GetHdrNextBlock ( xbUInt32 \&ulBlockNo );}
\DoxyCodeLine{91 }
\DoxyCodeLine{92 \textcolor{keyword}{protected}:}
\DoxyCodeLine{93 \textcolor{keyword}{friend} \textcolor{keyword}{class }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
\DoxyCodeLine{94 }
\DoxyCodeLine{95 \textcolor{keyword}{virtual} xbInt16 ReadDbtHeader ( xbInt16 iOption ) = 0;}
\DoxyCodeLine{96 \textcolor{keyword}{virtual} xbInt16 UpdateHeaderName () = 0;}
\DoxyCodeLine{97 \textcolor{keyword}{virtual} xbInt16 UpdateHeadNextNode();}
\DoxyCodeLine{98 \textcolor{keyword}{virtual} xbInt16 Zap () = 0;}
\DoxyCodeLine{99 }
\DoxyCodeLine{100 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf; \textcolor{comment}{/* pointer to related dbf instance */}}
\DoxyCodeLine{101 \textcolor{keywordtype}{char} cVersion; \textcolor{comment}{/* byte 16 off the header block, 0x03 for V3, version IV -\/ ? */}}
\DoxyCodeLine{102 xbInt16 iMemoFileType; \textcolor{comment}{/* 3 = version III, 4 = version IV */}}
\DoxyCodeLine{103 xbUInt32 ulHdrNextBlock; \textcolor{comment}{/* next available block , bytes 0-\/3 of the memo header */}}
\DoxyCodeLine{104 \textcolor{keywordtype}{void} * mbb; \textcolor{comment}{/* memo block buffer */}}
\DoxyCodeLine{105 }
\DoxyCodeLine{106 }
\DoxyCodeLine{107 \textcolor{keyword}{private}:}
\DoxyCodeLine{108 }
\DoxyCodeLine{109 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
\DoxyCodeLine{110 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFileLocked; \textcolor{comment}{/* memo file locked */}}
\DoxyCodeLine{111 \textcolor{preprocessor}{ \#endif}}
\DoxyCodeLine{112 }
\DoxyCodeLine{113 \};}
\DoxyCodeLine{114 }
\DoxyCodeLine{115 }
\DoxyCodeLine{116 }
\DoxyCodeLine{117 \textcolor{preprocessor}{\#ifdef XB\_DBF3\_SUPPORT}}
\DoxyCodeLine{119 }
\DoxyCodeLine{131 \textcolor{keyword}{class }XBDLLEXPORT xbMemoDbt3 : \textcolor{keyword}{public} xbMemo \{}
\DoxyCodeLine{132 \textcolor{keyword}{public}:}
\DoxyCodeLine{133 xbMemoDbt3( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf, xbString \textcolor{keyword}{const} \&sFileName );}
\DoxyCodeLine{134 \string~xbMemoDbt3();}
\DoxyCodeLine{135 \textcolor{keyword}{virtual} xbInt16 Abort ();}
\DoxyCodeLine{136 \textcolor{keyword}{virtual} xbInt16 Commit ();}
\DoxyCodeLine{137 \textcolor{keyword}{virtual} xbInt16 CreateMemoFile ();}
\DoxyCodeLine{138 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString \&sMemoData );}
\DoxyCodeLine{139 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 \&ulMemoFieldLen );}
\DoxyCodeLine{140 \textcolor{keyword}{virtual} xbInt16 OpenMemoFile ();}
\DoxyCodeLine{141 \textcolor{keyword}{virtual} xbInt16 PackMemo ( \textcolor{keywordtype}{void} (*memoStatusFunc) (xbUInt32 ulItemNum, xbUInt32 ulNumItems));}
\DoxyCodeLine{142 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField( xbInt16 iFieldNo, \textcolor{keyword}{const} xbString \&sMemoData );}
\DoxyCodeLine{143 }
\DoxyCodeLine{144 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
\DoxyCodeLine{145 \textcolor{keyword}{virtual} xbInt16 DumpMemoFreeChain();}
\DoxyCodeLine{146 \textcolor{keyword}{virtual} xbInt16 DumpMemoHeader ();}
\DoxyCodeLine{147 \textcolor{preprocessor}{ \#endif}}
\DoxyCodeLine{148 }
\DoxyCodeLine{149 \textcolor{keyword}{protected}:}
\DoxyCodeLine{150 \textcolor{keyword}{virtual} xbInt16 ReadDbtHeader( xbInt16 iOption );}
\DoxyCodeLine{151 \textcolor{keyword}{virtual} xbInt16 UpdateHeaderName();}
\DoxyCodeLine{152 \textcolor{keyword}{virtual} xbInt16 Zap();}
\DoxyCodeLine{153 }
\DoxyCodeLine{154 \textcolor{keyword}{private}:}
\DoxyCodeLine{155 \};}
\DoxyCodeLine{156 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{157 }
\DoxyCodeLine{158 }
\DoxyCodeLine{159 \textcolor{preprocessor}{\#ifdef XB\_DBF4\_SUPPORT}}
\DoxyCodeLine{160 }
\DoxyCodeLine{162 }
\DoxyCodeLine{172 \textcolor{keyword}{class }XBDLLEXPORT xbMemoDbt4 : \textcolor{keyword}{public} xbMemo \{}
\DoxyCodeLine{173 \textcolor{keyword}{public}:}
\DoxyCodeLine{174 xbMemoDbt4( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf, xbString \textcolor{keyword}{const} \&sFileName );}
\DoxyCodeLine{175 \string~xbMemoDbt4();}
\DoxyCodeLine{176 \textcolor{keyword}{virtual} xbInt16 Abort ();}
\DoxyCodeLine{177 \textcolor{keyword}{virtual} xbInt16 Commit ();}
\DoxyCodeLine{178 \textcolor{keyword}{virtual} xbInt16 CreateMemoFile ();}
\DoxyCodeLine{179 }
\DoxyCodeLine{180 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString \&sMemoData );}
\DoxyCodeLine{181 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( xbInt16 iFieldNo, xbUInt32 \&ulMemoFieldLen );}
\DoxyCodeLine{182 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( xbInt16 iFieldNo, xbUInt32 \&ulMemoFieldLen, xbUInt32 \&lBlockNo );}
\DoxyCodeLine{183 \textcolor{keyword}{virtual} xbInt16 OpenMemoFile ();}
\DoxyCodeLine{184 \textcolor{keyword}{virtual} xbInt16 PackMemo ( \textcolor{keywordtype}{void} (*memoStatusFunc) (xbUInt32 ulItemNum, xbUInt32 ulNumItems));}
\DoxyCodeLine{185 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField ( xbInt16 iFieldNo, \textcolor{keyword}{const} xbString \&sMemoData );}
\DoxyCodeLine{186 }
\DoxyCodeLine{187 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
\DoxyCodeLine{188 \textcolor{keyword}{virtual} xbInt16 DumpMemoFreeChain ();}
\DoxyCodeLine{189 \textcolor{keyword}{virtual} xbInt16 DumpMemoHeader ();}
\DoxyCodeLine{190 \textcolor{keyword}{virtual} xbInt16 DumpMemoInternals ();}
\DoxyCodeLine{191 \textcolor{keyword}{virtual} xbInt16 ReadFreeBlockHeader( xbUInt32 ulBlockNo, xbUInt32 \&ulNextBlock, xbUInt32 \&ulFreeBlockCnt );}
\DoxyCodeLine{192 \textcolor{preprocessor}{ \#endif}}
\DoxyCodeLine{193 }
\DoxyCodeLine{194 \textcolor{keyword}{protected}:}
\DoxyCodeLine{195 \textcolor{keyword}{virtual} xbInt16 FindBlockSetInChain( xbUInt32 ulBlocksNeeded, xbUInt32 \&ulLastDataBlock, xbUInt32 \&ulLocation, xbUInt32 \&ulPrevNode, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bFound );}
\DoxyCodeLine{196 \textcolor{keyword}{virtual} xbInt16 FreeMemoBlockChain( xbUInt32 ulBlockNo );}
\DoxyCodeLine{197 \textcolor{keyword}{virtual} xbInt16 FreeMemoBlockChain( xbUInt32 ulBlockNo, xbUInt32 \&ulLastDataBlock );}
\DoxyCodeLine{198 \textcolor{keyword}{virtual} xbInt16 GetBlockSetFromChain( xbUInt32 ulBlocksNeeded, xbUInt32 ulLocation, xbUInt32 ulPrevNode );}
\DoxyCodeLine{199 \textcolor{keyword}{virtual} xbInt16 ReadDbtHeader( xbInt16 iOption );}
\DoxyCodeLine{200 \textcolor{keyword}{virtual} xbInt16 ReadBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption );}
\DoxyCodeLine{201 \textcolor{keyword}{virtual} xbInt16 UpdateHeaderName ();}
\DoxyCodeLine{202 \textcolor{keyword}{virtual} xbInt16 WriteBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption );}
\DoxyCodeLine{203 \textcolor{keyword}{virtual} xbInt16 Zap();}
\DoxyCodeLine{204 }
\DoxyCodeLine{205 \textcolor{keyword}{private}:}
\DoxyCodeLine{206 xbString sDbfFileNameWoExt;}
\DoxyCodeLine{207 xbUInt32 ulNextFreeBlock;}
\DoxyCodeLine{208 xbUInt32 ulFreeBlockCnt;}
\DoxyCodeLine{209 xbInt16 iField1;}
\DoxyCodeLine{210 xbInt16 iStartPos;}
\DoxyCodeLine{211 xbUInt32 ulFieldLen;}
\DoxyCodeLine{212 }
\DoxyCodeLine{213 xbLinkList<xbUInt32> llOldBlocks; \textcolor{comment}{// list of previously used memo blocks for field, used by Commit() / Abort()}}
\DoxyCodeLine{214 xbLinkList<xbUInt32> llNewBlocks; \textcolor{comment}{// list of newly updated memo blocks for field, used by Commit() / Abort()}}
\DoxyCodeLine{215 }
\DoxyCodeLine{216 \};}
\DoxyCodeLine{217 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{218 }
\DoxyCodeLine{219 }
\DoxyCodeLine{220 \} \textcolor{comment}{/* namespace xb */}}
\DoxyCodeLine{221 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_MEMO\_SUPPORT */}\textcolor{preprocessor}{}}
\DoxyCodeLine{222 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_MEMO\_H\_\_ */}\textcolor{preprocessor}{}}
\DoxyCodeLine{223 }
\end{DoxyCode}
|