\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 llOldBlocks; \textcolor{comment}{// list of previously used memo blocks for field, used by Commit() / Abort()}} \DoxyCodeLine{214 xbLinkList 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}